不能从包含的angular色中运行处理程序

我试图在同一angular色的处理程序上运行通知,并且该angular色被包含为依赖项。

这是我的剧本

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 } 

我的意识angular色是我想要通知在tasks/client.yml工作的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被改变了,但是我从来没有看到被调用处理程序的通知。

首先,由于错误的文件types,我认为你的处理程序被忽略了:

angular色/ sensu /处理程序/ main.html

应该是: roles/sensu/handlers/main.yml

其次,请注意,虽然你有一些处理程序,但通知程序通知的唯一处理程序是: restart sensu client 。 所以其他的处理程序将不会运行。

处理程序是任务列表,与全局唯一名称引用的常规任务没有任何区别。 处理程序是通知程序通知的。 如果没有任何通知处理程序,它将不会运行。 不pipe有多less事情通知一个处理程序,它只会在一个特定的游戏中完成所有任务之后运行一次。

参考: http : //docs.ansible.com/ansible/playbooks_intro.html