Как сбросить выполнение обработчика Ansible после задачи уведомления с помощью модуля ansible.builtin.meta.

Когда запускаются обработчики Ansible?

По умолчанию обработчики запускаются после завершения всех задач в конкретной игре.

Ссылки

Демо

Давайте перейдем к реальному примеру того, как немедленно запустить обработчик Ansible.

В первую очередь нам нужен статус изменения задачи. Самый простой модуль Ansible, возвращающий статус «изменено», — это модуль Ansible `command` с командой Linux, например «uptime».

Предположим, мы хотим выполнить обработчик сразу после изменения статуса, а не ждать следующей задачи с помощью модуля ansible.builtin.meta.

Первоначальный сценарий

  • flush_before.yml
---
- name: handler demo
  hosts: all
  tasks:
    - name: changed status
      ansible.builtin.command: "uptime"
      notify: message 1

    - name: message 2
      ansible.builtin.debug:
        msg: message 2

  handlers:
    - name: message 1
      ansible.builtin.debug:
        msg: message 1
  • инвентарь
localhost ansible_connection=local

Начальное выполнение

Как вы можете заметить, обработчик `message 1` выполняется ПОСЛЕ выполнения последней задачи (`message 2`) воспроизведения.

$ ansible-playbook -i inventory flush_before.yml

PLAY [handler demo] *********************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [localhost]

TASK [changed status] *******************************************************************
changed: [localhost]

TASK [message 2] ************************************************************************
ok: [localhost] => {
    "msg": "message 2"
}

RUNNING HANDLER [message 1] *************************************************************
ok: [localhost] => {
    "msg": "message 1"
}

PLAY RECAP ******************************************************************************
localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Модифицированный сборник сценариев

Давайте добавим модуль `ansible.builtin.meta` Ansible после первой задачи.

---
- name: handler demo
  hosts: all
  tasks:
    - name: changed status
      ansible.builtin.command: "uptime"
      notify: message 1

    - name: flush
      ansible.builtin.meta: flush_handlers

    - name: message 2
      ansible.builtin.debug:
        msg: message 2

  handlers:
    - name: message 1
      ansible.builtin.debug:
        msg: message 1

Модифицированное выполнение

Как вы можете заметить, обработчик `message 1` выполняется ДО последней задачи (`message 2`) выполняемого Play.

% ansible-playbook -i inventory flush.yml    

PLAY [handler demo] *********************************************************************

TASK [Gathering Facts] ******************************************************************
ok: [localhost]

TASK [changed status] *******************************************************************
changed: [localhost]

TASK [flush] ****************************************************************************

RUNNING HANDLER [message 1] *************************************************************
ok: [localhost] => {
    "msg": "message 1"
}

TASK [message 2] ************************************************************************
ok: [localhost] => {
    "msg": "message 2"
}

PLAY RECAP ******************************************************************************
localhost                  : ok=4    changed=1    unreachable=0    failed=0    skipped=0    rescued=0    ignored=0

Резюме

Теперь вы знаете, как немедленно запустить обработчик Ansible в Playbook.

Надеюсь, вам понравилось это читать. Если вы хотите поддержать меня как писателя, рассмотрите возможность подписки стать участником Medium. Всего 5 долларов в месяц, и вы получаете неограниченный доступ к Medium.

Подпишитесь на канал YouTube, Medium, Substack и веб-сайт, чтобы не пропустить следующий выпуск Ansible Pilot.

Лучшие ресурсы для Ansible

Видеокурс

Печатная книга

электронные книги

Пожертвовать