Назад | Перейти на главную страницу

ansible не запускает обработчики из включенных ролей

Я пытаюсь запустить уведомление на обработчике с той же ролью, и эта роль включается как зависимость.

Вот моя инструкция

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