여기서 가장 좋은 방법은 handlers을 사용하는 것입니다. 역할에
는 콘텐츠와 파일
handlers/main.yml
을 만듭니다
- name: restart mypackage
service: name=mypackage state=restarted
는 모든 작업에서이 핸들러를 통지합니다. 작업이 변경된 상태 (= 노란색 출력)
- name: install package
apt: name=mypackage state=latest
notify: restart mypackage
- name: modify a file
lineinfile: do stuff
notify: restart mypackage
- name: modify a second file
lineinfile: other stuff
notify: restart mypackage
핸들러가 귀하의 놀이의 맨 끝에 실행됩니다를보고 경우에만 처리기가 통보됩니다. 당신이 다시 시작된 myPackage에 서비스에 종속 관련된 다른 역할이있는 경우 역할의 끝에서 모든 처리기를 세척 할 수 있습니다 :
- meta: flush_handlers
추가로
force_handlers 설정을 살펴 있습니다. mypackge 역할 이후에 처리 된 다른 역할에서 오류가 발생하면 처리기가 트리거되지 않습니다.
ansible.cfg
에
force_handlers=True
을 설정하면 오류가 발생한 후에도 처리기가 강제로 실행됩니다. 다음 번에 파일이 변경되지 않으므로 핸드북을 실행할 때 처리기가 알림을받지 못하기 때문에 이는 매우 중요한 주제이므로 서비스가 다시 시작되지 않습니다.
핸들러를 사용하지 않고도이 작업을 수행 할 수 있지만 매우 추합니다. 나중에 다시 시작 작업에 적용되는 조건에서 상태를 확인할 수 있도록 모든 단일 작업의 출력을 등록해야합니다.
- name: install package
apt: name=mypackage state=latest
register: mypackage_1
- name: modify a file
lineinfile: do stuff
register: mypackage_2
- name: modify a second file
lineinfile: other stuff
register: mypackage_3
- name: restart if anything changed
service: name=mypackage state=restarted
when: mypackage_1 | changed or mypackage_2 | changed or mypackage_3 | changed
도 Ansible Handler notify vs register에 대한 답을 참조하십시오.
아, 훌륭합니다. 변경 사항이 등록되어있을 때만 처리기가 시작된다는 것을 전혀 생각하지 못했고, ** 그들은 연극이 끝날 때 모두 해고되었습니다. 처음에는 등록과 알림 사이의 혼합에 대해 생각해 보았지만 이러한 문제는 해결되었습니다. 감사! – rasebo