Ansible에서 항상 핸들러 실행 트리거 핸들러가 있지만 조건없이 핸들러

Ansible을 사용하여 개발 서버를 프로비저닝하고 있습니다.

나는 항상 나를 위해 몇 가지 서비스를 시작하기를 원합니다. 이 목적을위한 핸들러가 있지만 조건없이 핸들러 실행을 트리거하는 가장 좋은 방법은 무엇입니까?

이 같은:

tasks:
    - name: Trigger handler
      run_handler: name=nginx-restart


답변

매번 핸들러를 트리거해야하는 경우 다음 두 가지 옵션이 있습니다.

1) noop shell 명령을 실행하면 항상 변경된 것으로보고됩니다.

-  name: trigger nginx-restart
   command: /bin/true
   notify: nginx-restart

2) changed_when : 과 함께 디버그를 사용 하여 핸들러를 트리거하십시오.

-  debug: msg="trigger nginx-restart"
   notify: nginx-restart
   changed_when: true

또한의 모드 옵션 1과 확인 : 당신은 사용할 수 있습니다 check_mode: noAnsible 버전 2.2 이상 또는를 사용하는 경우 always_run: yes작업이 체크 모드에서 스킵되지 않습니다 그래서보다 이전 버전을 사용하는 경우. 내 수동 테스트에서 처리기가 검사 모드로 유지되는 것처럼 보이지만 사례가 다를 수 있으므로주의하십시오.


답변

Ansible은 핸들러 처리를위한 몇 가지 옵션을 제공합니다.

1) 모든 처리기를 항상 강제 실행하려면 https://github.com/ansible/ansible/issues/4777에ansible-playbook playbook.yml --force-handlers 설명 된 대로을 실행 하십시오.

2) 플레이 북 내 특정 지점에 통보 된 핸들러를 강제로 실행하려면 메타 태스크 https://docs.ansible.com/playbooks_intro.html을 사용할 수 있습니다 .

tasks:
  - shell: some tasks go here
  - meta: flush_handlers
  - shell: some other tasks

3) 그러나 다른 작업의 결과에 관계없이 서비스가 실행 중이거나 다시 시작되도록하려는 것 같습니다. 이 경우 처리기를 사용하지 말고 Ansible의 service모듈 을 호출하는 새 작업을 사용 하십시오 . http://docs.ansible.com/service_module.html

tasks:
  - name: ensure ntp is running
    service: name=ntp state=started enabled=yes

  - name: always reload nginx
    service: name=nginx state=reloaded

  - name: always restart MySQL
    service: name=mysql state=restarted

답변

서비스를 다시 시작하는 것이 한 가지입니다. 실행 중인지 확인하는 것도 또 다른 방법입니다. 당신이 원하는 경우 ansible확인하기 위해 nginx실행되고, 당신은이 작업을 수행 :

tasks:
  - name: Ensure nginx is running
    service: name=nginx state=started