Ansible의 fetch 모듈을 이용한 파일 가져오기
원격 시스템의 파일 및 디렉토리를 로컬로 가져올 수 있다.
활용 용도
- 원격 서버에 스크립트를 수행한 후의 결과파일을 로컬로 가져오는 구조의 Job
- /etc/passwd 파일과 같은 전체 시스템의 특정 파일을 모두 가져와야 하는 Job
- 보안취약점 진단에 File Copy 모듈과 함께 사용 중이다.
Inventory 설정
# cat hosts
[ALL_HOSTS]
172.16.0.100 managed_ip=172.16.0.100 des="2020-12-03"
[ALL_HOSTS_OK]
대상 호스트는 172.16.0.100이며, 추가는 2020-12-03에 수행한다. 참고적으로 ALL_HOSTS_OK 호스트 그룹은 작업이 완료된 호스트의 history를 위한 그룹이다.
Host Variables 설정
# cat host_vars/172.16.0.100
ansible_ssh_host: 172.16.0.100
ansible_ssh_port: SSH_포트번호
ansible_ssh_user: 사용자 아이디
ansible_ssh_pass: "사용자 패스워드"
ansible_become: yes
ansible_become_method: su
ansible_become_user: root
ansible_become_pass: "!root_패스워드"
ansible_python_interpreter: python2.7
Playbook 설정
---
- name : Config File Fetch Playbook
hosts: ALL_HOSTS
gather_facts: no
tasks:
- name: Local Directory Create
local_action: command mkdir -p FETCH/{{ managed_ip }}
- name: Nginx Configure file fetch
fetch:
src: /etc/passwd
dest: FETCH/{{ managed_ip }}/
flat: yes
File Fetch
에 대한 Playbook 분석
- 대용량의 파일을 가져오려면, Ansible 2.5 이상을 사용해야하고, become 모듈을 사용하지 않아야 메모리에러 이슈를 방지할 수 있다.
- 가져올 파일은 로컬 시스템(PC 또는 서버)의 FETCH/IP주소/ 로 가져온다.
playbook 실행
# ansible-playbook -i hosts file_fetch.yml