Ansible에서 태그를 사용하는 방법

Ansibleeseo Taegeuleul Sayonghaneun Bangbeob



연극, 역할, 작업은 ansible 구조이며 이 ansible 구조에는 Ansible에서 태그라고 하는 중요한 속성이 포함되어 있습니다. Ansible에서 플레이북을 시작할 때마다 -tags 및 –skip tags 명령을 사용하여 특정 일련의 작업, 플레이 및 역할만 실행할 수 있습니다. 너무 많은 작업이 포함된 플레이북이 있지만 전체 플레이북을 실행하는 대신 플레이북의 모든 작업을 실행하고 싶지 않은 경우 Ansible 플레이북에서 태그 명령을 사용하여 몇 가지 작업만 실행합니다.

이 주제에서는 Ansible의 가장 중요한 측면 중 하나인 태그에 대해 논의할 것입니다. Ansible 플랫폼의 난해한 기능이기 때문에 태그가 무엇이며 Ansible에서 태그가 어떻게 작동하는지 설명하려고 노력할 것입니다.







예를 들어 플레이북에는 모듈 설치, 구성, 배포된 모듈의 상태 확인(예: 서비스 실행 및 액세스 가능 여부)의 세 가지 책임이 포함될 수 있습니다. 몇 대의 원격 머신에서 모듈의 상태를 확인하기만 하면 되므로 플레이북의 모든 작업을 실행하는 대신 이 상황에서 Ansible 태그를 활용합니다. 이를 통해 특정 작업을 독점적으로 실행할 수 있으므로 모든 관련 활동을 단일 플레이북에 보관하여 실행 시간을 줄일 수 있습니다.



Ansible Playbook에서 태그를 활용하기 위한 전제 조건

실제 예제를 ansible 소프트웨어에 넣기 위해서는 다음 요구 사항을 충족해야 합니다.



변경을 수행하려면 Ansible 제어 서버가 필요합니다. Ansible 소프트웨어에서 태그 매개변수를 활용하려면 통신할 로컬 호스트가 필요합니다. 이 경우 실행 전체에서 로컬 호스트를 대상 원격 서버로 사용하고 있습니다. 플레이북을 만들고, Ansible 태그 명령을 실행하고, ansible-controller 장치에서 원격 호스트의 결과를 모니터링합니다.





학습자가 Ansible 플레이북의 태그 개념을 쉽게 이해할 수 있도록 다양한 시나리오를 사용하여 몇 가지 Ansible 태그를 검토하는 것을 목표로 합니다.

예 01: Ansible 플레이북에서 단일 작업에 액세스

플레이북에 여러 작업을 제공하여 Ansible에서 구현한 다음 태그를 활용하여 단일 작업에만 액세스할 것입니다. 이를 위해 먼저 다음 명령을 작성하여 플레이북을 만듭니다.



[root@master ansible]# nano ansible_tags.yml

ansible_tags.yml 플레이북을 만들고 실행한 후. 이제 플레이북에 명령을 작성하기 시작합니다. 먼저 'localhost'를 사용할 'hosts' 매개 변수에 제공된 호스트를 전달합니다. 그런 다음 playbook을 실행할 때 localhost에 대한 추가 정보를 얻을 수 없도록 'gather_facts' 매개 변수에 'false' 값을 작성합니다.

그런 다음 실행하려는 활동을 하나씩 'tasks' 매개변수 아래에 나열하기 시작합니다. 첫 번째 프로세스에서 문서가 localhost 시스템에 있는지 확인합니다. 사용 가능한 경우 '등록' 매개변수에 저장한 다음 플레이북을 실행할 때 태그에 쉽게 액세스할 수 있도록 태그에 고유한 이름을 지정합니다. 두 번째 작업에서는 첫 번째 작업과 동일하게 수행하지만 태그는 고유해야 하며 디버그 옵션을 사용하여 관련 메시지와 함께 작업을 표시합니다.

- 호스트:

- 로컬 호스트
수집_사실: 거짓


작업:
- 이름: 파일 존재 확인 x`
상태: 경로=./host.yml
레지스터: fileExists
태그: check_file


- 디버그:
msg: '{{ '파일 존재' if fileExists.stat.exists else '파일을 찾을 수 없음' }}'
태그: check_file


- 이름: 현재 사용자가 host.yml에 액세스할 수 있는지 확인
쉘: stat -c '%a' ./host.yml
레지스터: accessPath
태그: check_access


- 디버그:
msg: '{{ '파일 액세스 가능' if (accessPath.stdout|int) < 660 else '파일 액세스 불가능' }}'
태그: check_access

이제 플레이북을 저장한 다음 닫습니다. 우리는 ansible_tags.yml 플레이북을 실행하려고 하므로 Ansible 터미널에서 다음 명령을 작성하여 사용자에게 출력을 보여줄 것입니다.

[root@master ansible]# ansible-playbook ansible_tags.yml –tags check_file

위의 명령을 실행하면 원하는 결과를 얻을 수 있습니다. 아래와 같이 하나의 작업만 실행되고 '파일 존재 확인'이라는 출력에 표시됩니다.

예 02: Ansible 플레이북에서 특정 태그 무시

다음은 '건너뛰기' 태그로 이동하는 Ansible 태그의 두 번째 예입니다. 모든 작업을 무시할지 아니면 Ansible에서 플레이북의 특정 작업을 무시할지 여부는 사용자에게 달려 있습니다. 우리는 예제 1 구현을 활용하고 있으며 Ansible 터미널에 아래 문을 간단히 작성하여 작업을 건너뛸 것입니다.

[root@master ansible]# ansible-playbook ansible_tags.yml --skip-tags check_file

위의 명령에서 '파일 존재 확인' 작업을 무시했습니다. 이제 녹색 글꼴로 '파일 액세스 가능'인 단일 작업만 출력에 표시됩니다.

예 03: 항상 Ansible 플레이북에서 태스크 실행 유지

Ansible 태그를 기반으로 세 번째 예제를 구현하려고 합니다. 이 예에서는 특정 태그가 Ansible Playbook에서 항상 실행됨을 의미하는 'always' 태그를 사용합니다. 플레이북을 시작하려면 다음 명령을 사용합니다.

[root@master ansible]# nano ansible_tags.yml

플레이북에서 실행할 여러 작업을 만들었지만 '인벤토리에서 암호 삭제'인 마지막 작업에서 '항상' 태그를 전달했습니다. 다음은 플레이북에서 구현된 명령입니다.

- 호스트: 모두

수집_사실: 거짓


작업:
- 이름: 파일 존재 확인
상태: 경로=./host.yml
레지스터: fileExists
delegate_to: 로컬 호스트
태그: check_file


- 디버그:
msg: '{{ '파일 존재' if fileExists.stat.exists else '파일을 찾을 수 없음' }}'
태그: check_file


- 이름: 현재 사용자가 host.yml에 액세스할 수 있는지 확인
쉘: stat -c '%a' ./host.yml
레지스터: accessPath
delegate_to: 로컬 호스트
태그: check_access


- 디버그:
msg: '{{ '파일 액세스 가능' if (accessPath.stdout|int) < 660 else '파일 액세스 불가능' }}'
태그: check_access


- 이름: 인벤토리에서 비밀번호 삭제
라인인파일:
경로: '{{inventory_file}}'
정규식: '\b{{항목}}.*\b'
상태: 결석
delegate_to: 로컬 호스트
되다: 거짓
태그: 항상
with_items:
- ansible_password

그런 다음 인벤토리 파일을 생성하여 컨트롤러와 대상 원격 호스트 간의 연결을 구축합니다. 아래는 명령입니다.

[root@master ansible]# nano host.yml

다음은 Ansible의 'Linux_host' 관련 정보가 포함된 인벤토리 파일입니다.

모두:

호스트:
Linux_호스트:
ansible_host: 192.168.3.229
ansible_user: 가능
ansible_password: ******
ansible_connection: ssh
ansible_port: 22

원하는 출력을 얻기 위해 Ansible 터미널에서 다음 명령을 실행합니다.

[root@master ansible]# ansible-플레이북 ansible_tags.yml --tags check_file -i host.yml

결론

Ansible의 태그는 이 기사에서 설명했습니다. 이제 태그의 기능과 이를 적용할 Ansible의 위치를 ​​이해했습니다. 학습자가 Ansible 태그의 개념을 이해할 수 있도록 다양한 예시를 개발했습니다.