Ansible Fetch 모듈

AnsibleBeginner
지금 연습하기

소개

Ansible Fetch 모듈 랩에 오신 것을 환영합니다! 이 랩에서는 Ansible Fetch 모듈의 사용법을 자세히 살펴보겠습니다. Fetch 모듈을 사용하면 원격 머신에서 파일을 검색하여 Ansible 이 실행되는 제어 머신으로 복사할 수 있습니다. 이는 관리 호스트에서 특정 파일 또는 아티팩트를 수집해야 할 때 유용합니다.

시작해 봅시다!

단일 파일 가져오기

이 단계에서는 Ansible Fetch 모듈을 사용하여 원격 머신에서 단일 파일을 가져오는 방법을 배우게 됩니다. 이를 통해 모듈의 기본 사용법과 구문을 이해할 수 있습니다.

먼저, /home/labex/project/fetching_a_single_file.yml 파일을 완성합니다. 텍스트 편집기에서 열고 플레이북 파일에 다음 내용을 추가합니다.

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Fetch a single file
      fetch:
        src: /home/labex/example/example_1.txt
        dest: /home/labex/project/example_1.txt
        flat: true
  • fetch: 원격 호스트에서 파일을 가져오는 데 사용되는 Ansible 모듈입니다.
  • src: 가져와야 하는 원격 호스트의 파일 경로를 지정합니다. 이 예에서는 /home/labex/example/example_1.txt입니다.
  • dest: 가져온 파일을 로컬 호스트에 저장해야 하는 대상 경로를 지정합니다. 이 예에서는 /home/labex/project/example_1.txt입니다.
  • flat: 이 매개변수는 대상 경로의 동작을 제어합니다. true로 설정하면 가져온 파일이 하위 디렉터리를 생성하지 않고 대상 디렉터리에 배치됩니다. 단일 파일을 가져오고 디렉터리 구조를 단순하게 유지하려는 경우에 유용합니다.

Ansible 의 fetch 모듈은 원격 호스트에서 로컬 호스트로 파일을 가져오는 데 사용됩니다. 이 구성에서는 "example_1.txt"라는 파일을 원격 호스트의 /home/labex/example/ 디렉터리에서 가져와 로컬 호스트의 /home/labex/project/ 디렉터리에 "example_1.txt"로 저장하는 데 사용됩니다. flat: true 매개변수는 가져온 파일이 하위 디렉터리 없이 대상 디렉터리에 직접 배치되도록 합니다.

그런 다음 다음 명령으로 플레이북을 실행합니다.

ansible-playbook fetching_a_single_file.yml

예시 출력:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Fetch Module Lab] **************************************************

TASK [Fetch a single file] *****************************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

마지막으로, example_1.txt 파일이 원격 호스트에서 로컬로 가져왔는지 확인합니다.

ll /home/labex/project/example_1.txt

예시 출력:

-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 /home/labex/project/example_1.txt

여러 파일 가져오기

이 단계에서는 원격 머신에서 여러 파일을 가져와 Fetch 모듈에 대한 이해를 높입니다. 이를 통해 단일 작업에서 여러 파일을 수집할 수 있습니다.

먼저, /home/labex/project/fetching_multiple_files.yml 파일을 완성합니다. 텍스트 편집기에서 열고 플레이북 파일에 다음 내용을 추가합니다.

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false

  tasks:
    - name: Fetch multiple files
      loop:
        - example_2.txt
        - example_3.txt
      fetch:
        src: "/home/labex/example/{{ item }}"
        dest: "/home/labex/project/{{ item }}"
        flat: true
  • loop: 이 키워드는 항목 목록을 반복하는 데 사용됩니다.
  • fetch: 원격 호스트에서 파일을 가져오는 데 사용되는 Ansible 모듈입니다.
  • src: 가져올 파일의 소스 경로를 지정합니다. {{ item }} 자리 표시자는 루프의 각 항목으로 대체되어 /home/labex/example/ 디렉터리에서 example_2.txtexample_3.txt를 가져옵니다.
  • dest: 가져온 파일을 저장해야 하는 대상 경로를 지정합니다. 다시, {{ item }} 자리 표시자를 사용하여 각 파일이 /home/labex/project/ 내의 해당 디렉터리에 배치되도록 합니다.
  • flat: 이 매개변수는 대상 경로의 동작을 제어합니다. true로 설정하면 가져온 파일이 하위 디렉터리를 생성하지 않고 대상 디렉터리에 배치됩니다. 단일 파일을 가져오고 디렉터리 구조를 단순하게 유지하려는 경우에 유용합니다.

이 구성에서는 로컬 호스트의 /home/labex/example/ 디렉터리에서 여러 파일 (example_2.txtexample_3.txt) 을 가져와 /home/labex/project/ 내의 해당 디렉터리에 저장하는 데 사용됩니다. loop 구문을 사용하면 항목 목록을 반복하고 목록의 각 항목에 대해 fetch 작업을 수행할 수 있습니다.

그런 다음 다음 명령으로 플레이북을 실행합니다.

ansible-playbook fetching_multiple_files.yml

예시 출력:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Fetch Module Lab] **************************************************

TASK [Fetch multiple files] ****************************************************
changed: [localhost] => (item=example_2.txt)
changed: [localhost] => (item=example_3.txt)

PLAY RECAP *********************************************************************
localhost                  : ok=1    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

마지막으로, example_2.txtexample_3.txt가 원격 호스트에서 로컬로 가져왔는지 확인합니다.

ll /home/labex/project/ | grep example

예시 출력:

-rw-rw-r-- 1 labex labex 23 Mar 14 10:45 example_1.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_2.txt
-rw-rw-r-- 1 labex labex 23 Mar 14 11:00 example_3.txt

Fetch 모듈에서 변수 사용하기

이 단계에서는 변수를 통합하여 Ansible Fetch 모듈의 보다 고급 사용법을 탐구합니다. 플레이북에 정의된 동적 값을 기반으로 파일을 가져옵니다.

먼저, /home/labex/project/using_variablesin_fetch_modules.yml 파일을 완성합니다. 텍스트 편집기에서 열고 플레이북 파일에 다음 내용을 추가합니다.

- name: Fetch Module Lab
  hosts: localhost
  gather_facts: false
  vars:
    file_path: "/home/labex/example/example_4.txt"
    dest_path: "/home/labex/project/example_4.txt"

  tasks:
    - name: Fetch files using variables
      fetch:
        src: "{{ file_path }}"
        dest: "{{ dest_path }}"
        flat: true
  • vars: 이 섹션에서는 플레이북 내에서 사용할 변수를 정의할 수 있습니다.
  • fetch: 원격 호스트에서 파일을 가져오는 데 사용되는 Ansible 모듈입니다.
  • src: 가져올 파일의 소스 경로를 지정합니다. file_path 변수를 사용하여 소스 파일 경로를 동적으로 제공합니다.
  • dest: 가져온 파일을 저장해야 하는 대상 경로를 지정합니다. dest_path 변수를 사용하여 대상 파일 경로를 동적으로 제공합니다.
  • flat: 이 매개변수는 대상 경로의 동작을 제어합니다. true로 설정하면 가져온 파일이 하위 디렉터리를 생성하지 않고 대상 디렉터리에 배치됩니다. 단일 파일을 가져오고 디렉터리 구조를 단순하게 유지하려는 경우에 유용합니다.

이 구성에서는 원격 호스트의 소스 파일 경로 (file_path 변수) 에서 파일을 가져와 로컬 Ansible 제어 노드의 대상 파일 경로 (dest_path 변수) 에 저장하는 데 사용됩니다. 변수를 사용하면 파일 경로를 동적으로 지정할 수 있어 플레이북의 유연성과 재사용성이 향상됩니다.

그런 다음 다음 명령으로 플레이북을 실행합니다.

ansible-playbook using_variablesin_fetch_modules.yml

예시 출력:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Fetch Module Lab] **************************************************

TASK [Fetch files using variables] *********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

다음으로, example_4.txt 파일이 원격 호스트에서 로컬로 가져왔는지 확인합니다.

ll /home/labex/project/example_4.txt

예시 출력:

-rw-rw-r-- 1 labex labex 23 Mar 14 11:16 /home/labex/project/example_4.txt

마지막으로, -e 옵션을 사용하여 file_pathdest_path를 지정해 봅니다.

ansible-playbook using_variablesin_fetch_modules.yml -e file_path="/tmp/example_5.txt" -e dest_path="/tmp/target/example_5.txt"

예시 출력:

[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'

PLAY [Fetch Module Lab] **************************************************

TASK [Fetch files using variables] *********************************************
changed: [localhost]

PLAY RECAP *********************************************************************
localhost : ok=1 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0

example_5.txt 파일이 원격 호스트에서 로컬로 가져왔는지 확인합니다.

ll /tmp/target/example_5.txt

예시 출력:

-rw-rw-r-- 1 labex labex 23 Mar 14 11:24 /tmp/target/example_5.txt

요약

Ansible Fetch Module Lab 을 완료하신 것을 축하드립니다! 이 랩에서는 Ansible Fetch 모듈을 사용하여 원격 머신에서 파일을 검색하고 제어 머신으로 복사하는 방법을 배웠습니다. 단일 파일 가져오기부터 시작하여 여러 파일을 가져오고 동적 파일 검색을 위해 변수를 통합하는 방식으로 진행했습니다.

이 랩을 완료함으로써 관리형 호스트에서 특정 파일 또는 아티팩트를 수집하기 위해 Fetch 모듈을 활용하는 데 귀중한 경험을 얻었습니다. 자동화 기능을 더욱 향상시키기 위해 Ansible 및 해당 모듈을 계속 탐색하십시오.

자동화를 즐기세요!