Ответ
Да, объявить обработчик можно в любом месте плейбука внутри секции handlers: соответствующего плей (play). Однако важно понимать механизм выполнения: обработчики запускаются только один раз в конце плей, и только если задача, которая уведомила (notify) этот обработчик, завершилась со статусом changed.
Пример плейбука:
- name: Configure web server
hosts: webservers
tasks:
- name: Install Nginx package
ansible.builtin.apt:
name: nginx
state: latest
notify: restart nginx # Уведомление отправлено здесь
- name: Deploy configuration template
ansible.builtin.template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
notify: restart nginx # И здесь. Обработчик выполнится один раз.
handlers:
- name: restart nginx
ansible.builtin.service:
name: nginx
state: restarted
Почему так сделано: Это предотвращает множественные перезагрузки службы в рамках одного плей, если её конфигурация меняется в нескольких задачах. Если нужно выполнить действие немедленно, используйте обычную задачу с модулем service вместо обработчика.