Глобальные обработчики в Ansible

Глобальные обработчики в Ansible

Возможно ли иметь действительно глобальные обработчики в Ansible, чтобы я мог «уведомить» обработчик из любой задачи любой роли любого плейбука? И без явного импорта.

Я просто хочу определить обработчик один раз (например, «перезапустить httpd») и сделать его доступным для любой директивы «notify» в любом месте.

Спасибо!

решение1

Вы можете определить обработчики в вашей игре, а не в ролях. Обработчики, определенные в игре, будут доступны для всех задач/ролей в этой игре.

При желании вы также можете использовать импорт в разделе обработчиков.

---
- hosts: all
  handlers:
  - import_tasks: global_handlers.yml
  tasks:
  - shell: echo "Hello World"
    notify: some thing from global_handlers

Обратите внимание, что вам необходимо «статическое включение» (согласно https://docs.ansible.com/ansible/latest/user_guide/playbooks_intro.html#handlers-running-operations-on-change), поэтому его import_tasksследует использовать вместо include_tasks:

Вы не можете уведомить обработчик, который определен внутри include. Начиная с Ansible 2.1, это работает, однако include должен быть статическим.

решение2

Есть как минимум два способа добиться этого, и мне не ясно, какой из них лучше.

Решение 1

Одинрекомендуемая практикасоздать файл только для обработчиков и включить или импортировать его в свой плейбук (увидеть различия); таким образом, все роли могут получить выгоду.

Например, предположим, что у вас есть файл, myhandlers.ymlсодержащий один обработчик для перезапуска Apache и другой для перезагрузки mysqld.

Затем, в вашей книге действий:

- name: Testing 123
  hosts: localhost
  handlers:
    - name: Here are my custom common handlers
      # You can also look at include_tasks: handlers.yml
      import_tasks: handlers.yml
  tasks:
    - command: "true"
      notify: restart-apache
    
    - command: "true"
      notify: restart-mysql

Решение 2

Еще один чистый подходсоздать специальную роль ( roles/myhandlers/например) и сделать эту роль зависимой для всех остальных ролей.

dependencies:
  - myhandlers

Дополнительная информация о зависимостяхздесь.

Связанный контент