Я пытаюсь запустить уведомление на обработчике с той же ролью, и эта роль включается как зависимость.
Вот моя инструкция
root@monitor:/etc/ansible# cat monitor.yml
---
- hosts: local
connection: local
become: yes
become_user: root
roles:
- common
- role: sensu
sensu_install_server: true
Мои общие файлы выглядят так
root@monitor:/etc/ansible# cat roles/common/tasks/main.yml
- name: Add the OS specific variables
include_vars: '{{ ansible_os_family }}.yml'
#
# ansible run script
- name: copy the ansible-run script
copy:
src=ansible-run.py
dest=/usr/bin/ansible-run
owner=root
group=root
mode=0700
- cron: name="cron ansible-run" minute="*/5" job="/usr/bin/ansible-run > /dev/null 2&1"
#
# ntp
- name: Install ntp
package: name=ntp state=present
- name: Start/stop ntp service
service: name={{ ntp_service_name }} state=started enabled=yes
root@monitor:/etc/ansible# cat roles/common/meta/main.yml
---
dependencies:
- { role: users }
- { role: sensu }
Моя роль сенсу - это то, где я хочу, чтобы уведомление работало в tasks/client.yml
root@monitor:/etc/ansible# cat roles/sensu/tasks/main.yml
- include: common.yml
- include: server.yml
when: sensu_install_server
ignore_errors: true
- include: client.yml
root@monitor:/etc/ansible# cat roles/sensu/tasks/client.yml
- name: reload ansible_local
setup: filter=ansible_local
- name: copy plugins files
copy:
src=files/sensu/plugins/
dest=/etc/sensu/plugins/
owner=sensu
group=sensu
mode=0750
notify:
- restart sensu client
- name: generate config files
template:
src=client.json.j2
dest=/etc/sensu/conf.d/client.json
owner=sensu
group=sensu
mode=0640
backup=yes
notify:
- restart sensu client
- name: enable sensu-client to survive reboot
service:
name=sensu-client
enabled=yes
state=started
root@monitor:/etc/ansible# cat roles/sensu/handlers/main.yml
---
# handlers file for sensu
- name: restart sensu server
service: name=sensu-{{ item }} state=restarted
with_items:
- server
- api
- name: restart sensu client
service: name=sensu-client state=restarted
- name: restart uchiwa service
service: name=uchiwa state=restarted
- name: restart nginx service
service: name=nginx state=restarted
Взгляд из прогона показывает, что client.json изменяется, но я никогда не вижу уведомления для вызываемого обработчика.
Во-первых, я полагаю, из-за неправильного типа файла ваши обработчики игнорируются:
роли / сенсу / обработчики /main.html
Должно быть: roles/sensu/handlers/main.yml
Во-вторых, обратите внимание, хотя у вас есть несколько обработчиков, единственный обработчик, который уведомляется уведомителями: restart sensu client
. Так что другие обработчики не запустятся.
Обработчики - это списки задач, на самом деле не отличающиеся от обычных задач, на которые ссылаются по глобально уникальному имени. Обработчики - это то, о чем уведомляют уведомители. Если ничего не уведомляет обработчик, он не будет запущен. Независимо от того, сколько вещей уведомляет обработчика, он будет запускаться только один раз после того, как все задачи будут выполнены в конкретной игре.
Ссылка: http://docs.ansible.com/ansible/playbooks_intro.html