참고
파일 복사 모듈
file
NOTE
file 모듈은 파일의 권한, 소유권, 복사, 편집, 제거와 같은 대부분의 작업을 수행할 수 있습니다.
# state: touch(파일)
- name: 빈 파일 생성
file:
path: /tmp/example.txt
state: touch
mode: 0644
owner: root
group: root
# state: directory(폴더)
- name: 디렉토리 생성
file:
path: /tmp/example_dir
state: directory
mode: 0644
owner: root
group: root
# 상위 디렉토리가 없어도 생성된다.
- name: 여러 디렉토리 생성
ansible.builtin.file:
path: /tmp/dir1/dir2/dir3
state: directory
mode: '0755'
owner: root
group: root
# state: absent(제거)
- name: 파일 삭제
file:
path: /tmp/example.txt
state: absent
# recurse: 하위 디렉토리 삭제
- name: 디렉토리 삭제
file:
path: /tmp/example_dir
state: absent
recurse: yes
YAML
복사
파일 생성/수정/삭제
# state: link(심볼릭 링크)
- name: 심볼릭 링크 생성
file:
src: /tmp/example.txt
path: /tmp/example_link.txt
state: link
- name: 심볼릭 링크 확인
stat:
path: /tmp/example_link.txt
register: link_info
- name: 출력 - 링크 정보
debug:
msg: "심볼릭 링크가 존재 대상: {{ link_info.stat.lnk_target}}"
YAML
복사
심볼릭 링크 확인
copy
NOTE
copy 모듈은 Ansible 서버에서 관리 노드로 파일을 복사하는데 사용되며 파일의 권한, 소유자, 그룹을 설정할수도 있습니다.
- name: Ansible 서버 파일 복사
copy:
src: "/tmp/example.txt"
dest: "/tmp/example_copy.txt"
mode: '0644'
owner: root
group: root
- name: Ansible 서버 디렉토리 복사
copy:
src: "/tmp/dir1"
dest: "/tmp/dir1_copy"
mode: '0644'
owner: root
group: root
# backup(원본 파일이 다른경우 백업파일 생성)
- name: 파일 복사전에 백업
copy:
src: "/tmp/example.txt"
dest: "/tmp/example_copy2.txt"
backup: yes
YAML
복사
fetch
NOTE
fetch 모듈은 원격 호스트에서 Ansible 서버로 파일을 가져오는데 사용합니다. 주로 로그, 설정 파일 데이터를 수집하는데 유용합니다.
# fail_on_missing(파일이 없는경우 실패여부)
- name: 원격 호스트에서 파일 가져오기
fetch:
src: "/tmp/example_copy.txt"
dest: "/tmp/example_fetch1.txt"
fail_on_missing: yes
# flat(하위 경로 복사여부)
- name: 원격 호스트에서 폴더 가져오기
fetch:
src: "/tmp/dir1"
dest: "/tmp/dir1_fetch"
flat: no
YAML
복사
template
stat
NOTE
stat 모듈은 원격 호스트에서 파일이나 디렉토리의 상태 정보를 수집하는데 사용됩니다.
# 특정 파일/디렉토리 정보수집
- name: /etc/hosts 파일 확인
stat:
path: /etc/
register: file_info
# stat 정보 출력
- name: 상세 정보 확인
debug:
msg:
# 파일의 존재여부, 경로, 크기
- "File exists: {{ file_info.stat.exists }}"
- "File path: {{ file_info.stat.path }}"
- "File size: {{ file_info.stat.size }}"
# 파일에 대한 상세정보
- "File uid: {{ file_info.stat.uid }}"
- "File inode: {{ file_info.stat.inode }}"
- "File islnk {{ file_info.stat.islnk }}"
# 파일 소유자 정보
- "File pw_name {{ file_info.stat.pw_name }}"
- "File gr_name {{ file_info.stat.gr_name }}"
- "File uid {{ file_info.stat.uid }}"
- "File gid {{ file_info.stat.gid }}"
# 파일 시간 정보
- "File atime: {{ file_info.stat.atime }}"
- "File mtime: {{ file_info.stat.mtime }}"
- "File ctime: {{ file_info.stat.ctime }}"
YAML
복사
파일 내용 수정
lineinfile
NOTE
lineinfile모듈은 파일의 특정 라인을 추가, 수정, 삭제하는데 사용하며 주로 파일에서 줄 하나를 수정할때 유용합니다
- name: Ansible stat 모듈 예제
hosts: servers
gather_facts: yes
become: no
tasks:
# state: present, absent
- name: 파일에 해당 라인이 있는가?
lineinfile:
path: /etc/hosts
line: "127.0.0.1 localhost"
state: present
- name: 파일에 해당 라인 제거
lineinfile:
path: /etc/hosts
regexp: "^127.0.0.1 localhost$"
state: absent
# insertafter, insertbefore
- name: 새로운 라인 추가
lineinfile:
path: /etc/hosts
line: "127.0.0.1 localhostanme"
insertbefore: "BOF"
- name: 새로운 라인 추가
lineinfile:
path: /etc/hosts
line: "127.0.1.1 myhostname"
insertafter: "^127.0.0.1 localhost$"
YAML
복사
blockinfile
NOTE
blockinfile모듈은 파일의 특정 블록을 추가하거나 수정하는데 사용합니다.
# state: present(추가/수정), absent(삭제)
# marker: 블록의 시작과 끝
- name: Ensure a block of lines is in the file
ansible.builtin.blockinfile:
path: /etc/someconfig.conf
block: |
Line 1 of the block
Line 2 of the block
marker: "# {mark} ANSIBLE MANAGED BLOCK"
# insertafter, insertbefore: 블록 위치 설정
- name: Insert a block after a specific line
ansible.builtin.blockinfile:
path: /etc/someconfig.conf
block: |
Line 1 of the block
Line 2 of the block
insertafter: "Specific line content"
YAML
복사
replace
NOTE
replace 모듈은 파일의 특정 문자열을 찾아 다른 문자열로 대체하는데 사용됩니다.
- name: 파일의 특정 문자열 수정
replace:
path: /etc/test.config
regexp: 'nice'
replace: 'hello'
- name: 파일의 여러 문자열을 수정
replace:
path: /etc/test.config
regexp: '^hello'
replace: "hello change"
YAML
복사
파일 압축 및 해제
archive
NOTE
archive모듈은 파일 또는 디렉토리를 압축파일로 만드는데 사용하며 tar, zip, gz, bz2, xz등의 다양한 압축형식을 지원합니다.
# path(원본), dest(압축경로)
- name: 디렉토리 압축
archive:
path: "/tmp/test"
dest: "/tmp/test2/test1.tar.gz"
format: gz
owner: root
group: root
mode: '0644'
- name: 파일 압축
archive:
path:
- "/tmp/test/test.text"
- "/tmp/test/test2.text"
dest: "/tmp/test2/test2.tar.gz"
format: gz
# remove(압축 후 원본삭제)
- name: 압축후 원본 파일 삭제
archive:
path: "/tmp/test/test3.text"
dest: "/tmp/test2/test3.tar.gz"
format: gz
remove: yes
YAML
복사
unarchive
NOTE
unarchive 모듈은 원격 호스트에 압축 파일을 해제하는데 사용하며, Ansible에 있는 압축파일 혹은 원격 호스트에 있는 압축파일을 해제할 수 있습니다.
# src(원본), dest(압축해제 경로)
- name: 압축 해제
unarchive:
src: "/tmp/test2/test1.tar.gz"
dest: "/tmp/test3/"
owner: root
group: root
mode: '0755'
remote_src: yes
# remote_src(원격 호스트 경로 사용여부, no인경우 로컬파일 복사후 사용)
- name: 로컬파일을 원격 호스트에 업로드 후 압축해제
unarchive:
src: /tmp/test2/test2.tar.gz
dest: /tmp/test3/
# creates: 파일/디렉토리가 존재하면 압축해제 생략
- name: 파일 존재 여부에 따라 압축해제 생략
unarchive:
src: /tmp/test2/test3.tar.gz
dest: /tmp/test3/
creates: /tmp/test3
remote_src: yes
YAML
복사