ansible 작업이 핸들러를 트리거하지 않습니다.

ansible 작업이 핸들러를 트리거하지 않습니다.

핸들러를 트리거하기 위해 ansible 역할 내에서 작업을 가져오는 데 문제가 있습니다. 내가 사용하는 파일은 다음과 같습니다.

roles/services/tasks/postgresql.yml

- name: install postgresql packages
  apt: name={{ item }} state=present
  sudo: yes
  with_items:
  - postgresql
  - libpq-dev
  - python-psycopg2
  notify:
  - set postgres password
  - configure md5 security
  - restart postgres server

roles/services/handlers/main.yml

- name: set postgres password 
  sudo: yes
  sudo_user: postgres
  postgresql_user: name=postgres password=newpass

- name: configure md5 security
  sudo: yes
  copy: src=pg_hba.conf dest=/etc/postgresql/9.3/main/pg_hba.conf group=postgres owner=postgres backup=yes

- name: restart postgres server
  sudo: yes
  service: name=postgresql enabled=yes state=restarted

플레이북을 실행하면 작업이 성공하고 상태가 변경되었음을 확인하지만 핸들러를 트리거하지는 않습니다. 이것이 해당 역할의 마지막 작업이며, 작업이 완료되면 Ansible은 내 플레이북에 있는 다음 역할의 첫 번째 작업으로 이동합니다.

TASK: [services | install postgresql packages] ******************************** 
changed: [IP.REMOVED.##] => (item=postgresql,libpq-dev,python-psycopg2)

TASK: [passenger | install passenger gem] ************************************* 

나는 성공하지 못한 채 다양한 방법으로 들여쓰기를 변경해 보았습니다. 나는 신선한 눈을 가진 누군가가 내가 놓친 것을 볼 수 있기를 바랍니다.

답변1

충분히 오래 기다리지 못할 수도 있습니다. Ansible은 가능한 한 오랫동안 핸들러를 기다립니다. 이미 대기열에 있는 모든 처리기를 수행하려면 다음을 시도하십시오.

 - meta: flush_handlers

나는 매우 편리하다고 생각합니다. 예를 들어 데비안 패키지를 설치한 후 바로 데몬을 종료하고 싶기 때문에 패키지 설치 직후에 메타 명령을 추가하면 ansible이 나를 기다리게 하지 않습니다.

관련 정보