Ich habe Probleme, eine Aufgabe innerhalb einer Ansible-Rolle dazu zu bringen, Handler auszulösen. Hier sind die Dateien, die ich verwende:
roles/services/tasks/postgresql.yml
zeigt an
- 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
zeigt an
- 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
Wenn ich das Playbook ausführe, ist die Aufgabe erfolgreich und bestätigt, dass sich der Status geändert hat, aber die Handler werden nicht ausgelöst. Dies ist die letzte Aufgabe in dieser Rolle, und wenn sie abgeschlossen ist, fährt Ansible mit der ersten Aufgabe in der nächsten Rolle in meinem Playbook fort:
TASK: [services | install postgresql packages] ********************************
changed: [IP.REMOVED.##] => (item=postgresql,libpq-dev,python-psycopg2)
TASK: [passenger | install passenger gem] *************************************
Ich habe versucht, die Einrückung auf verschiedene Weise zu ändern, ohne Erfolg. Ich hoffe, dass jemand mit einem frischen Blick erkennt, was ich übersehe.
Antwort1
Möglicherweise warten Sie nicht lange genug. Ansible wartet so lange wie möglich auf die Handler. Wenn Sie alle Handler ausführen möchten, die bereits in der Warteschlange stehen, versuchen Sie
- meta: flush_handlers
was ich sehr praktisch finde. Wenn ich beispielsweise ein Debian-Paket installiere, möchte ich, dass die Daemons sofort beendet werden. Deshalb füge ich den Metabefehl direkt nach der Paketinstallation hinzu und Ansible lässt mich nicht warten.