핸들러를 트리거하기 위해 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이 나를 기다리게 하지 않습니다.