У меня проблемы с получением задачи в доступной роли для запуска обработчиков. Вот файлы, которые я использую:
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
Когда я запускаю playbook, задача выполняется успешно и подтверждает, что она изменила состояние, но не запускает обработчики. Это последняя задача в этой роли, и когда она будет выполнена, ansible перейдет к первой задаче в следующей роли в моей книге:
TASK: [services | install postgresql packages] ********************************
changed: [IP.REMOVED.##] => (item=postgresql,libpq-dev,python-psycopg2)
TASK: [passenger | install passenger gem] *************************************
Я пробовал изменять отступ разными способами, но безуспешно. Надеюсь, кто-то свежим взглядом увидит то, что мне не хватает.
Возможно, вы не ждете достаточно долго. Ansible будет ждать обработчиков как можно дольше. Если вы хотите выполнить все обработчики, которые уже поставлены в очередь, попробуйте
- meta: flush_handlers
что мне очень удобно. Например, после установки пакета debian я хочу, чтобы он сразу же убил демонов, поэтому я добавляю мета-команду сразу после установки пакета, и ansible не заставляет меня ждать.