Search
Duplicate
📒

[Ansible] 04-1. 파일 시스템 모듈(복사, 수정, 압축, 마운트)

상태
완료
수업
Ansible
주제
4 more properties
참고

파일 복사 모듈

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
복사

디스크 마운트