我试图在同一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