Как использовать обработчики в Ansible Playbook
В Ansible обработчик похож на любую другую задачу, но запускается только при вызове или уведомлении . Он принимает меры, когда на управляемом хосте были внесены изменения. Обработчики используются для инициирования вторичных изменений, таких как запуск или перезапуск службы после установки или даже перезагрузка службы после внесения некоторых изменений в файлы конфигурации. В этом руководстве мы подробнее рассмотрим обработчики Ansible. Мы узнаем, как использовать обработчики в ansible playbook.
Файл Ansible playbook с обработчиком
Чтобы лучше понять, как работают обработчики, мы возьмем пример файла playbook — install_apache.yml — который устанавливает веб-сервер Apache, а затем перезапускает службу Apache. В приведенном ниже примере обработчик получает уведомление о перезапуске службы Apache вскоре после установки. Это достигается с помощью модуля уведомления, как показано на рисунке. Обратите внимание, что имя ‘notify’ должно совпадать с именем обработчика, как указано, иначе вы столкнетесь с ошибками в вашем файле playbook.
--- - hosts: staging name: Install become: yes tasks: - name: Install Apache2 on Ubuntu server apt: name: apache2 state: present update_cache: yes notify: - Restart apache2 handlers: - name: Restart apache2 service: name: apache2 state: restarted
Теперь запустим файл playbook.
$ ansible-playbook /etc/ansible/install_apache.yml -K
Из выходных данных вы можете увидеть, что обработчик выполняется сразу после задачи.
Несколько задач с несколькими обработчиками
Кроме того, у нас может быть несколько задач, вызывающих несколько обработчиков. Рассмотрим файл playbook ниже.
Вот вам нужно выполнить 2 задачи:
- Установка веб-сервера Apache
- Разрешение HTTP-трафика на брандмауэре UFW.
После успешного выполнения задач я вызвал каждый из обработчиков с модулем « уведомить », как показано ниже. Первый обработчик перезапускает Apache, а второй перезагружает брандмауэр UFW.
--- - hosts: staging name: Install become: yes tasks: - name: Install Apache2 on Ubuntu server apt: name: apache2 state: present update_cache: yes - name: Allow HTTP traffic on UFW firewall ufw: rule: allow port: http proto: tcp notify: - Restart apache2 - Reload ufw firewall handlers: - name: Restart apache2 service: name: apache2 state: restarted - name: Reload ufw firewall ufw: state: enabled
Когда файл playbook выполняется, оба обработчика запускаются Ansible сразу после установки Apache, и HTTP-трафик разрешается на брандмауэре.
Вторичные действия, выполняемые обработчиками, здесь:
- Перезапуск Apache
- Включение и перезагрузка брандмауэра, чтобы изменения вступили в силу.
Заключение
Как вы видели, обработчики похожи на обычные задачи, только на них ссылаются с помощью глобально уникального модуля, называемого ‘ notify ‘. Если обработчик не уведомлен, он не запускается. Помните, что все обработчики запускаются после выполнения всех задач.