[Ansible Modules] Fetch module 설명 및 활용

 

Ansible modules 중 Fetch module에 대해 알아보겠습니다.

Fetch module 이란

Fetch는 영어로 “가지고 오다”라는 뜻입니다. copy 명령어와 정확히 반대로 동작합니다. 이 말은 copy 명령은 제어 노드에 있는 파일을 관리 대상 노드로 전송하는 기능을 하는 반면, fetch 모듈은 관리 대상 노드에서 제어노드로 파일을 가져오는 작업을 실행합니다.

💡 제어노드는 앤서블을 실행하는 노드를 말하고, 관리 노드는 앤서블로 관리하는 대상 노드를 말합니다.

ansible modules(fetch module), copy module 비교
Ansible modules(fetch_module)

 

Fetch module 옵션

  • src: 관리 대상 노드에 있는 복사해서 가져오고 싶은 파일

  • dest: 파일을 저장할 디렉토리

  • flat: ( default: false )

    • false: $hostname/path/to/file 처럼 파일구조가 생성되어 저장된다. (hostname은 인벤토리 호스트 이름이다) 이 옵션을 사용하게 되면 위 처럼 파일 구조로 복사되는것이 아닌 지정된 파일만 복사된다. 이름이 같은 파일은 하나의 파일로 덮어씌어지게 되므로, 관리 대상 노드가 하나이거나 파일 이름이 모두 다를 때 유용하다

    • true: src에 디렉토리를 지정할 수 있으며, 하위에 있는 파일들을 모두 가져올 수 있다. 디렉토리를 지정하게 되면 dest의 경로에 후행 슬러시를 입력해 주어야 한다.

 

Fetch module 사용 방법

💡 예제에 사용된 inventory 파일

[test]
rocky86.lab.example.com
rocky84.lab.example.com

 

예제1. 기본값인 flat을 false로 두고 파일 가져오기 

fetch 모듈을 이용하여 관리노드의 /etc/hostname 파일을 앤서블 노드의 /home/student/ansible/backup 디렉토리 위치로 가지고 오는 작업입니다.

- fetch:
    src: /etc/hostname
    dest: /home/student/ansible/backup/
    flat: false

위의 플레이북을 실행하면 아래와 같은 디렉토리 구조가 생성됩니다. 먼저 인벤토리 이름으로 디렉토리가 생성된 뒤 가져오는 파일의 절대경로 구조 그대로 파일이 생성됩니다.

$ tree backup
backup
├── rocky84.lab.example.com
│   └── etc
│       └── hostname
└── rocky86.lab.example.com
    └── etc
        └── hostname

 

예제2. flat 값을 yes로 변경하여 디렉토리 구조 없이 파일만 가져오기

1번 작업과 동일하지만 flat값을 yes로 변경하였습니다.

- fetch:
    src: /etc/hostname
    dest: /home/student/ansible/backup/
    flat: yes

flat을 yes로 변경한 경우 절대경로 구조를 취하지 않고 파일만 그대로 가져오는 걸 확인할 수 있습니다. 같다면 마지막으로 실행된 파일 하나만 존재하고 이전 파일들은 덮어 써져서 사라져 버립니다. 따라서 flat을 활성화할 경우 아래 3번의 방법을 이용해 파일명을 변경하시기 바랍니다.

$ tree backup/
backup/
└── hostname

$ cat backup/hostname 
rocky86

 

예제3. 파일명이 동일한 상황에서 flat을 yes로 복사해야 하는 경우, inventory_hostname 변수를 사용

가져오는 파일의 이름에 inventory_hostname 변수를 이용해서 구분하였습니다.

- fetch:
    src: /etc/hostname
    dest: /home/student/ansible/backup/{{ inventory_hostname }}_hostname
    flat: yes

인벤토리 이름이 파일명 앞에 설정되어 파일을 가져오는 모습이 확인됩니다.

$ tree backup/
backup/
├── rocky84.lab.example.com_hostname
└── rocky86.lab.example.com_hostname

$ cat backup/rocky84.lab.example.com_hostname 
rocky84
$ cat backup/rocky86.lab.example.com_hostname 
rocky86

 

참고 사이트:

https://docs.ansible.com/ansible/latest/collections/ansible/builtin/fetch_module.html

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

Scroll to Top