Listen: один триггер — несколько обработчиков
Направьте одно уведомление нескольким обработчикам
«Listen: один триггер — несколько обработчиков» — бесплатный урок Ansible Academy на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Ansible Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Ansible Academy содержит 4 уроков всего.
Одно событие — много реакций
Иногда одно изменение должно одновременно запускать несколько обработчиков. Ключевое слово listen позволяет нескольким обработчикам подписаться на одну тему.
Уведомляйте тему, а не имя
При использовании listen значение notify задачи указывает на логическое имя события, а не на название конкретного обработчика.
- name: Update certs
ansible.builtin.copy:
src: site.pem
dest: /etc/ssl/site.pem
notify: restart web stackОбработчики подписываются с помощью listen
Каждый обработчик добавляет строку listen с названием одной и той же темы. Каждый обработчик, подписанный на эту тему, запускается при получении уведомления.
handlers:
- name: Restart nginx
ansible.builtin.service:
name: nginx
state: restarted
listen: restart web stackМного обработчиков, одна тема
Задайте нескольким обработчикам одинаковое значение listen, и одно уведомление notify будет передано им всем. Это удобно для сгруппированных перезапусков.
- name: Restart php-fpm
ansible.builtin.service:
name: php-fpm
state: restarted
listen: restart web stackРазделяйте задачи и обработчики
Главное преимущество — развязка: задачи ссылаются на тему, а Вы можете добавлять или удалять обработчики, не изменяя задачи, которые отправляют уведомления.
Имя по-прежнему необязательно, но полезно
У обработчика с listen по-прежнему может быть имя, что делает вывод читаемым и позволяет другим задачам также уведомлять его напрямую.
Обработчик может слушать несколько тем
Передайте listen список, и один обработчик будет реагировать на несколько разных тем. Он реагирует на ту тему, для которой получено уведомление.
listen:
- restart web stack
- reload tlsИдемпотентность сохраняется
Уведомления на основе тем подчиняются тем же правилам: обработчики запускаются только при состоянии changed, и каждый из них по-прежнему выполняется не более одного раза за плейбук.
Порядок по-прежнему определяется порядком объявления
Когда тема запускает несколько обработчиков, они выполняются в порядке, в котором определены в списке обработчиков, как и обычные обработчики.
Часто используется в общих ролях
Повторно используемые роли применяют listen, чтобы пользователи уведомляли стабильную тему, пока роль свободно изменяет свой внутренний набор обработчиков.
Notify и listen
notify — это сигнал от задачи, а listen — подписка обработчика. Вместе они превращают одно событие во множество действий. 🔔
Быстрая проверка
Вы хотите одним уведомлением перезапустить сразу три службы. Что позволяет нескольким обработчикам реагировать на одну тему?
Итоги
С помощью listen задача отправляет уведомление по теме, и срабатывает каждый подписанный обработчик. Это отделяет задачи от обработчиков и обеспечивает удобное масштабирование. 🎯
Часто задаваемые вопросы
Урок «Listen: один триггер — несколько обработчиков» бесплатный?
Да — полный текст урока «Listen: один триггер — несколько обработчиков» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Ansible Academy, подпишись на CoddyKit PRO. Курс Ansible Academy содержит 4 уроков всего.
Чему я научусь в уроке «Listen: один триггер — несколько обработчиков»?
Направьте одно уведомление нескольким обработчикам Ты практикуешь Ansible Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Ansible Academy?
Предыдущий опыт не требуется. Ansible Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 4 из 4.
Сколько времени занимает урок «Listen: один триггер — несколько обработчиков»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Ansible Academy?
Да. Каждый урок Ansible Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Уведомление обработчика об изменении
- Определение обработчиков и шаблонов перезапуска
- Когда запускаются обработчики и flush_handlers
- Listen: один триггер — несколько обработчиков