Contexto

Contexto

Contexto

Tengo un libro de jugadas de Ansible que incluye una tarea muy larga, hasta una hora.

Muy simplificado, se ve así:

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

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

Cuando el usuario ejecuta el libro de jugadas, el resultado es al principio:

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]

Problema

Los usuarios finales del libro de jugadas creen que hay un problema Short taskporque se cuelga allí, mientras que es Long taskeso lo que causa el retraso.

Pregunta

¿Cómo podría configurar ansible o el playbook para imprimir los encabezados definidos enname: antesejecutando la tarea?

Lo que quiero lograr es un resultado como:

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]

Respuesta1

Migrando mi comentario a una respuesta a petición de OP


Estoy usando Ansible 2.9.2.

Lo intenté sin archivo de configuración y con un archivo de configuración sin valor declarado stdout_callback(predeterminado). No puedo reproducir su problema en ninguno de los casos.

Este es mi libro de jugadas de prueba:

---
- hosts: localhost
  gather_facts: false

  tasks:

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

    - name: LOOOOOOOOOng task
      shell: sleep 2000

Y el resultado (en ambos casos. Nota: interrupción por parte del usuario después de mostrar el encabezado de la tarea)

$ 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

Verifique nuevamente qué archivo de configuración está cargando ansible-playbook --versionen el directorio donde va a iniciar el libro de jugadas. También le sugiero que pruebe sin ningún archivo de configuración para ver si soluciona el problema (y luego ver qué configuración está causando realmente el problema).


Agregado del comentario de OP: resulta que la configuración problemática en ansible.cfg en este caso específico fuedisplay_skipped_hosts=False

Respuesta2

El display_skipped_hosts=falseen /etc/ansible/ansible.cfg lo arregló para mí.

¿Es un error? No me gusta ver los hosts omitidos, pero sí me gusta ver el progreso de mi libro de jugadas.

Usando Ansible 2.10.3

Respuesta3

Para aquellos que todavía quieren ocultar las tareas omitidas, ahora hay dos opciones:

  1. Utilizando elcomplemento de devolución de llamada predeterminadoy configurando display_skipped_hosts = Falseand show_per_host_start = True, esto agregará otra línea de registro cuando se inicie cada tarea, sin embargo, no recupera el comportamiento de simplemente mostrar el título a tiempo (y de alguna manera, a veces también aparece después de que una tarea ya está terminada, lo que dificulta las cosas). leer)
  2. Siga usando el (ahora obsoleto)complemento saltadoque era el complemento de acceso antes de que el complemento predeterminado obtuviera la función de omitir. Todavía funciona como se esperaba con 2.11 y también es mi solución preferida para este problema. Establezca stdout_callback = skippyen su ansible.cfg. Solo para asegurarme de que también incluí el complemento en la lista blanca concallback_enabled = ansible.posix.skippy

Mi ansible.cfg se ve así ahora y todo funciona como antes. Migré al último ansible.cfg con los valores predeterminados:

[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
# ...

Otras lecturas:

Respuesta4

En mi caso, estaba usando la estrategia "gratuita" que no mostraba el encabezado antes de terminar la tarea.

información relacionada