Ansible-고급 실행
이 장에서는 Ansible을 사용한 고급 실행이 무엇인지 알아 봅니다.
작업별로 실행을 제한하는 방법
이것은 전체 플레이 북이 아닌 하나의 실행 만 실행하면되는 매우 중요한 실행 전략입니다. For example, 서버를 중지하고 (프로덕션 문제가 발생할 경우) 서버 만 시작하려는 패치를 적용한 다음 게시한다고 가정합니다.
여기 원래 플레이 북에서 중지 및 시작은 동일한 플레이 북에서 다른 역할의 일부 였지만 태그를 사용하여 처리 할 수 있습니다. 우리는 다른 역할에 다른 태그를 제공 할 수 있으며 (이는 작업을 가질 것입니다) 따라서 실행자가 제공하는 태그를 기반으로 지정된 역할 / 작업 만 실행됩니다. 따라서 제공된 위의 예에서 다음과 같은 태그를 추가 할 수 있습니다.
- {role: start-tomcat, tags: ['install']}}
다음 명령은 태그 사용에 도움이됩니다-
ansible-playbook -i hosts <your yaml> --tags "install" -vvv
위의 명령을 사용하면 start-tomcat 역할 만 호출됩니다. 제공된 태그는 대소 문자를 구분합니다. 정확한 일치가 명령에 전달되고 있는지 확인하십시오.
호스트 별 실행을 제한하는 방법
특정 호스트에서 특정 단계를 실행하는 방법에는 두 가지가 있습니다. 특정 역할의 경우 특정 역할이 실행되어야하는 특정 호스트에 대해 호스트를 정의합니다.
예
- hosts: <A>
environment: "{{your env}}"
pre_tasks:
- debug: msg = "Started deployment.
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "
roles:
- {role: <your role>, tags: ['<respective tag>']}
post_tasks:
- debug: msg = "Completed deployment.
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"
- hosts: <B>
pre_tasks:
- debug: msg = "started....
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}} "
roles:
- {role: <your role>, tags: ['<respective tag>']}
post_tasks:
- debug: msg = "Completed the task..
Current time is {{ansible_date_time.date}} {{ansible_date_time.time}}"
위의 예에 따라 제공된 호스트에 따라 각 역할 만 호출됩니다. 이제 내 호스트 A와 B가 호스트 (인벤토리 파일)에 정의되어 있습니다.
대체 솔루션
다른 솔루션은 변수를 사용하여 플레이 북의 호스트를 정의한 다음 다음을 통해 특정 호스트 주소를 전달하는 것입니다. --extra-vars −
# file: user.yml (playbook)
---
- hosts: '{{ target }}'
user: ...
playbook contd….
플레이 북 실행
ansible-playbook user.yml --extra-vars "target = "<your host variable>"
{{target}}이 정의되지 않은 경우 플레이 북은 아무 작업도 수행하지 않습니다. 필요한 경우 호스트 파일의 그룹을 전달할 수도 있습니다. 추가 변수가 제공되지 않으면 해를 끼치 지 않습니다.
단일 호스트를 대상으로하는 플레이 북
$ ansible-playbook user.yml --extra-vars "target = <your hosts variable>" --listhosts