ansible não executando manipuladores de funções incluídas

3

Estou tentando executar a notificação em um manipulador na mesma função e essa função está sendo incluída como uma dependência.

Aqui está meu livro de exercícios

root@monitor:/etc/ansible# cat monitor.yml
---

- hosts: local
  connection: local
  become: yes
  become_user: root
  roles:
    - common
    - role: sensu
      sensu_install_server: true

Meus arquivos comuns parecem

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 }

Meu papel sensu é onde eu quero que a notificação funcione no 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

Uma olhada em uma execução mostra que o client.json é alterado, mas nunca vejo uma notificação para o manipulador sendo chamado.

    
por Mike 22.02.2016 / 22:19

1 resposta

1

Primeiro de tudo, por causa do tipo de arquivo errado, seus manipuladores estão sendo ignorados, suponho:

roles/sensu/handlers/main.html

deve ser: roles/sensu/handlers/main.yml

Em segundo lugar, observe que, embora você tenha alguns manipuladores, o único manipulador notificado pelos notificadores é: restart sensu client . Assim, os outros manipuladores não serão executados.

Handlers are lists of tasks, not really any different from regular tasks, that are referenced by a globally unique name. Handlers are what notifiers notify. If nothing notifies a handler, it will not run. Regardless of how many things notify a handler, it will run only once, after all of the tasks complete in a particular play.

Ref: link

    
por 22.02.2016 / 23:36

Tags