Ответ
Хэндлеры (handlers) в Ansible — это специальные задачи, которые выполняются только при изменении состояния системы, когда обычная задача возвращает статус changed: true. Их основное назначение — выполнение действий, которые должны следовать за изменением конфигурации, например, перезапуск или перезагрузка сервисов.
Ключевые особенности:
- Выполняются один раз в конце выполнения плейбука, даже если были уведомлены (notified) несколько раз в разных задачах.
- Порядок выполнения можно контролировать с помощью директив
listen(хэндлер слушает общее событие) и меток (tags). - По умолчанию хэндлеры выполняются даже при возникновении ошибок в других задачах плейбука (это поведение можно изменить флагом
--force-handlers).
Пример использования:
- name: Deploy Nginx configuration template
ansible.builtin.template:
src: /templates/nginx.conf.j2
dest: /etc/nginx/nginx.conf
owner: root
group: root
mode: '0644'
notify:
- Reload Nginx service # Этот хэндлер будет вызван, только если задача изменила файл на целевой машине
handlers:
- name: Reload Nginx service
ansible.builtin.service:
name: nginx
state: reloaded
Почему это важно: Использование хэндлеров предотвращает ненужные перезапуски сервисов, когда конфигурация не менялась, что делает плейбуки идемпотентными и безопасными.