Контекст

Контекст

Контекст

У меня есть Ansible playbook, который включает в себя очень длительную задачу, до одного часа.

Очень упрощенно это выглядит так:

- hosts: localhost
  tasks:
  - name: Short task
    debug:
      msg: "I'm quick!"

  - name: Long task
    shell: "sleep 15s"

Когда пользователь запускает плейбук, сначала выводится следующее:

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

TASK [Short task] *******************
ok: [127.0.0.1] => {
    "msg": "I'm quick!"
}

(hang there until Long task is done)

TASK [Long task] ********************
changed: [127.0.0.1]

Проблема

Конечные пользователи сценария считают, что проблема в Short taskтом, что он зависает, хотя именно это Long taskи вызывает задержку.

Вопрос

Как мне настроить ansible или playbook для печати заголовков, определенных вname: довыполнение задания?

Я хочу добиться примерно такого результата:

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

TASK [Short task] *******************
ok: [127.0.0.1] => {
    "msg": "I'm quick!"
}

TASK [Long task] ********************

(and hang there during the execution)

changed: [127.0.0.1]

решение1

Переношу свой комментарий в ответ по просьбе ОП


Я использую Ansible 2.9.2.

Я пробовал без файла конфигурации и с файлом конфигурации без объявленного значения stdout_callback(по умолчанию). Я не могу воспроизвести вашу проблему ни в одном из случаев.

Вот мой тестовый план:

---
- hosts: localhost
  gather_facts: false

  tasks:

    - name: Short running
      debug:
        msg: I'm a short task

    - name: LOOOOOOOOOng task
      shell: sleep 2000

И результат (в обоих случаях. Примечание: прерывание пользователем после отображения заголовка задачи)

$ ansible-playbook /tmp/play.yml  

PLAY [localhost] **************************************************************************************************************************************************************************************************

TASK [Short running] **********************************************************************************************************************************************************************************************
ok: [localhost] => {
    "msg": "I'm a short task"
}

TASK [LOOOOOOOOOng task] ******************************************************************************************************************************************************************************************
^C [ERROR]: User interrupted execution

Дважды проверьте, какой файл конфигурации вы загружаете ansible-playbook --versionв каталоге, где вы собираетесь запустить плейбук. Я также предлагаю вам попробовать без какого-либо файла конфигурации, чтобы посмотреть, исправит ли это вашу проблему (а затем посмотреть, какая настройка на самом деле вызывает проблему).


Добавлено из комментария OP: оказывается, проблемная настройка в ansible.cfg в данном конкретном случае былаdisplay_skipped_hosts=False

решение2

Файл display_skipped_hosts=false/etc/ansible/ansible.cfg исправил это для меня.

Это баг? Мне не нравится видеть пропущенные хосты, но мне нравится видеть прогресс моей пьесы.

Использование Ansible 2.10.3

решение3

Для тех, кто все еще хочет скрыть пропущенные задачи, теперь есть две возможности:

  1. Используяплагин обратного вызова по умолчаниюи установка display_skipped_hosts = Falseи show_per_host_start = True, это добавит еще одну строку журнала при запуске каждой задачи, однако это не вернет поведение, при котором заголовок просто выводится вовремя (и каким-то образом иногда появляется после того, как задача уже выполнена, что затрудняет чтение)
  2. Продолжайте использовать (теперь устарело)плагин skippyкоторый был плагином go to до того, как плагин по умолчанию получил функцию пропуска. Он по-прежнему работает, как и ожидалось, с 2.11 и также является моим предпочтительным исправлением этого. Установите stdout_callback = skippyв ansible.cfg. Просто чтобы убедиться, что я также добавил плагин в белый список с помощьюcallback_enabled = ansible.posix.skippy

Мой ansible.cfg теперь выглядит так, и все работает так же, как и раньше. Я перешел на последнюю версию ansible.cfg со значениями по умолчанию:

[default]
# ...
stdout_callback = skippy
# if you had other plugins here just add to list, comma seperated
callback_enabled = ansible.posix.skippy
# deprecated flag, sometimes still needed, hence I always set both
callback_whitelist = ansible.posix.skippy
# ...

Дальнейшее чтение:

решение4

В моем случае я использовал «бесплатную» стратегию, которая не отображала заголовок до завершения задачи.

Связанный контент