앤서블 로컬 액션

앤서블 로컬 액션

2022-09-03 last update

6 minutes reading Ansible
대부분의 경우 Ansible을 사용하여 단일 제어 노드에서 원격 호스트를 관리하고 구성합니다. 따라서 플레이북을 생성할 때 플레이북의 호스트 블록에서 지정한 원격 시스템에서 실행해야 한다는 점을 이해해야 합니다.
그러나 원격 호스트 대신 로컬 시스템에서 특정 작업을 수행해야 하는 경우가 있습니다. 이러한 경우 local_action과 같은 기능이 유용합니다.
이 가이드에서는 Ansible local_action 모듈을 사용하여 로컬에서 작업을 실행하는 방법을 보여줍니다.

Ansible local_action 모듈의 작동 방식


앞서 언급했듯이 플레이북을 생성할 때 대상은 일반적으로 원격 호스트입니다. 원격 호스트가 아닌 다른 호스트에 대해 작업을 수행해야 하는 경우 local_action 및 delegate_to와 같은 Ansible 모듈을 사용할 수 있습니다.
Delegate_to는 특정 호스트에서 실행할 작업을 설정해야 할 때 유용합니다. 호스트 이름 또는 IP 주소를 지정하여 delegate_to 모듈을 대상 호스트로 지정합니다.
반면에 Local_action은 로컬 시스템에서만 설정된 작업을 실행합니다. delegate_to 값을 localhost 또는 127.0.0.1로 설정하는 것과 유사합니다.
delegate_to: localhost
local_action 모듈은 원격 시스템으로 보내기 전에 로컬 시스템에서 작업을 먼저 수행해야 할 때 편리합니다. 이들은 주로 로컬 시스템 내의 사용자 지정 또는 셸 명령입니다.
local_action 모듈을 사용하는 방법을 이해하는 가장 좋은 방법은 예제 플레이북을 사용하는 것입니다.

Ansible local_action 예시 사용 사례


단순함을 위해 플레이북을 너무 복잡하지 않고 짧게 유지하려고 노력할 것입니다.
플레이북에 초점을 맞추기 전에 Ansible 설정을 설명하면 local_action 모듈이 어떻게 작동하는지 이해할 수 있습니다.
예제 설정에는 Ansible이 설치된 Ubuntu 20.04 서버가 있습니다. 이것은 Ansible 제어 노드 역할을 합니다.
다음으로 Ubuntu 21.04 서버, Debian 11 서버 및 CentOS 8 서버의 세 가지 원격 시스템이 있습니다.
제어 노드에 세 호스트의 IP 주소가 모두 포함된 Ansible 인벤토리 파일이 있습니다.
플레이북을 실행하면 세 호스트 모두에서 실행됩니다.
참고: 복잡성과 혼란을 피하기 위해 출력을 단일 호스트로 제한합니다.

모듈을 사용하는 Local_action


다음 플레이북을 고려하십시오.
---
- hosts: all
gather_facts: no
become: true
tasks:
- name: Archivethelocallogfiles
local_action:
module: community.general.archive
path: /var/log
dest: /var/log/log.tar.gz
format: gz
force_archive: true
- name: Copylogarchivetoremotehost
ansible.builtin.copy:
src: /var/log/log.tar.gz
dest: /home/ubuntu
첫 번째 블록에서는 달리 지정하지 않는 한 작업을 실행할 대상 호스트를 지정합니다.
플레이북은 gather_facts 블록을 no로 설정하여 원격 호스트에 대한 사실 수집을 계속 비활성화합니다.
읽기 및 쓰기 권한을 갖기 위해 ben 블록을 true로 설정합니다.
후속 블록에서는 두 가지 작업을 정의합니다.
첫 번째 작업은 로컬 시스템에서 로그 파일의 아카이브를 만듭니다. local_actiob 블록을 사용하여 로컬 시스템에서 실행할 작업을 위임합니다. 이 예에서는 다음 명령을 사용하여 설치할 수 있는 커뮤니티 모듈을 사용합니다.
ansible-galaxy collection install community.general
다음 작업은 로컬 시스템에서 원격 호스트의 지정된 경로로 로그 아카이브를 복사합니다.
플레이북을 저장하고 다음 명령을 사용하여 실행합니다.
ansible-playbook local_action.yml
성공적으로 완료되면 아래와 유사한 출력이 표시되어야 합니다.

셸 명령을 사용하는 Local_action


아래 예제는 local_action 모듈을 사용하여 쉘 명령을 실행하는 방법을 보여줍니다.
---
- hosts: all
gather_facts: no
become: true
tasks:
- name: countfilesanddirectoriesonthe remotehost
shell: ls-la~| wc -l
register: remote_files
- name: printremotefiles
debug:
msg: '{{remote_files.stdout}}'
- name: countfilesanddirectoriesonthe localmachine
local_action: shellls-la~| wc -l
register: local_files
- name: printlocalfiles
debug:
msg: '{{local_files.stdout}}'
위의 예제 플레이북에서는 local_action 모듈을 사용하여 셸 명령을 실행합니다. 쉘 명령은 변수에 저장된 파일 및 디렉토리의 수를 계산합니다.
그런 다음 디버그 모듈을 사용하여 원격 및 로컬 호스트 모두에 있는 파일 수를 인쇄합니다.
파일을 다음과 같이 실행합니다.
ansible-playbook filecount.yml

run_once가 있는 Local_action


run_once 매개변수와 함께 local_action 모듈을 사용할 수 있습니다.
---
- hosts: all
gather_facts: no
become: true
tasks:
- name: Stoptheapacheserver
local_action:
module: ansible.builtin.service
name: httpd
state: stopped
run_once: True
위의 플레이북은 로컬 시스템에서 local_action 블록을 한 번 실행합니다.

결론


local_action 모듈은 로컬 시스템에서 실행할 작업을 위임하려는 경우에 유용합니다. Ansible 모듈 또는 셸 명령과 함께 둘 다 사용할 수 있습니다.