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