Глава 5: Ansible Playbooks - за пределами основ

Handlers

В главе 4 пример Ubuntu LAMP server мы использовали handler для перезапуска Apache, и некоторые задачи, которые изменяли конфигурацию Apache, уведомляя handler параметром notify: restart apache:

handlers:
  - name: restart apache
    service: name=apache2 state=restarted

tasks:
  - name: Enable Apache rewrite module.
    apache2_module: name=rewrite state=present
    notify: restart apache

В некоторых случаях может потребоваться уведомление нескольких handlers. Чтобы уведомить несколько handlers из одной задачи, используйте список notify:

- name: Rebuild application configuration.
  command: /opt/app/rebuild.sh
  notify:
    - restart apache
    - restart memcached

Чтобы из handler уведомить другой handler слпользуйте параметр notify:

handlers:
  - name: restart apache
    service: name=apache2 state=restarted
    notify: restart memcached

  - name: restart memcached
    service: name=memcached state=restarted

При работе с handlers существует несколько правил:

  • Handlers будут выполняться только в том случае, если задача уведомляет handler; Если задача, которая уведомила handler, пропускается из-за того или иного условия, handler не будет запущен.
  • Handlers будут выполняться только один раз в конце инструкции. Если вам необходимо запустить handler в середине инструкции, можно воспользоваться модулем meta (например - meta: flush_handlers).
  • Если инструкция не выполняется на каком-то хосте (или на всех узлах) перед уведомлением handlers, они не будут запущены. Если необходимо запускать handlers вне зависимости от удачного выполнения playbook, можно использовать модуль meta, описанный выше, как отдельную задачу в playbook, или использовать флаг c командной --force-handlers при запуске playbook.

results matching ""

    No results matching ""