여러 작업이있는 Ansible 핸들러를 작성하려면 어떻게해야합니까?
변경에 대한 응답으로 실행해야하는 여러 관련 작업이 있습니다. 여러 작업이있는 Ansible 핸들러를 작성하려면 어떻게해야합니까?
예를 들어 이미 시작된 경우에만 서비스를 다시 시작하는 처리기를 원합니다.
- name: Restart conditionally
shell: check_is_started.sh
register: result
- name: Restart conditionally step 2
service: name=service state=restarted
when: result
Ansible 2.2부터이 문제에 대한 적절한 해결책이 있습니다.
핸들러는 또한 일반 주제를 "수신"할 수 있으며 태스크는 다음과 같이 해당 주제를 알릴 수 있습니다.
handlers:
- name: restart memcached
service: name=memcached state=restarted
listen: "restart web services"
- name: restart apache
service: name=apache state=restarted
listen: "restart web services"
tasks:
- name: restart everything
command: echo "this task will restart the web services"
notify: "restart web services"
이렇게 사용하면 여러 핸들러를 훨씬 쉽게 트리거 할 수 있습니다. 또한 핸들러를 이름에서 분리하여 플레이 북과 역할간에 핸들러를 더 쉽게 공유 할 수 있습니다.
특히 질문에 대해서는 다음과 같이 작동합니다.
- name: Check if restarted
shell: check_is_started.sh
register: result
listen: Restart processes
- name: Restart conditionally step 2
service: name=service state=restarted
when: result
listen: Restart processes
작업에서 '프로세스 다시 시작'을 통해 핸들러에게 알립니다.
http://docs.ansible.com/ansible/playbooks_intro.html#handlers-running-operations-on-change
핸들러 파일에서 notify를 사용하여 여러 단계를 함께 연결하십시오.
- name: Restart conditionally
debug: msg=Step1
changed_when: True
notify: Restart conditionally step 2
- name: Restart conditionally step 2
debug: msg=Step2
changed_when: True
notify: Restart conditionally step 3
- name: Restart conditionally step 3
debug: msg=Step3
Then refer to it from a task with notify: Restart conditionally
.
Note that you can only notify to handlers below the current one. So for example, Restart conditionally step 2
can't notify Restart conditionally
.
Source: #ansible at irc.freenode.net. I'm unsure whether this will continue to work in the future as it's not mentioned as a feature in the official documentation.
As of Ansible 2.0, you can use an include action in your handler to run multiple tasks.
For example, put your tasks in a separate file restart_tasks.yml
(if you use roles, that would go into the tasks subdirectory, not in the handlers subdirectory):
- name: Restart conditionally step 1
shell: check_is_started.sh
register: result
- name: Restart conditionally step 2
service: name=service state=restarted
when: result
Your handler would then simply be:
- name: Restart conditionally
include: restart_tasks.yml
Source: issue thread on github: https://github.com/ansible/ansible/issues/14270
참고URL : https://stackoverflow.com/questions/31618967/how-do-i-write-an-ansible-handler-with-multiple-tasks
'Programing' 카테고리의 다른 글
특정 클래스가있는 요소를 어떻게 선택합니까? (0) | 2020.11.17 |
---|---|
Python 로그 형식 문자열에 사용자 정의 필드를 어떻게 추가합니까? (0) | 2020.11.17 |
net :: ERR_INSECURE_RESPONSE (Chrome) (0) | 2020.11.17 |
Windows 설치자를위한 무료 소프트웨어 : NSIS 대 WiX? (0) | 2020.11.17 |
iPhone에서 활동 표시기보기를 사용하는 방법은 무엇입니까? (0) | 2020.11.17 |