Estou tendo problemas para conseguir que uma tarefa dentro de uma função ansible acione manipuladores. Aqui estão os arquivos que estou usando:
roles/services/tasks/postgresql.yml
mostra
- 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
mostra
- 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
Quando executo o manual, a tarefa é bem-sucedida e reconhece que mudou de estado, mas não aciona os manipuladores. Esta é a última tarefa nessa função e, quando concluída, o ansible passa para a primeira tarefa na próxima função do meu manual:
TASK: [services | install postgresql packages] ********************************
changed: [IP.REMOVED.##] => (item=postgresql,libpq-dev,python-psycopg2)
TASK: [passenger | install passenger gem] *************************************
Tentei alterar o recuo de várias maneiras, sem sucesso. Espero que alguém com novos olhos veja o que estou perdendo.
Responder1
Você pode não estar esperando o suficiente. Ansible esperará pelos manipuladores o maior tempo possível. Se você quiser fazer todos os manipuladores que já estão na fila, tente
- meta: flush_handlers
o que acho muito útil. Por exemplo, depois de instalar um pacote debian, quero que ele elimine os daemons imediatamente, então adiciono o meta comando logo após a instalação do pacote e o ansible não me faz esperar.