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 task
porque se cuelga allí, mientras que es Long task
eso 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 --version
en 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=false
en /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:
- Utilizando elcomplemento de devolución de llamada predeterminadoy configurando
display_skipped_hosts = False
andshow_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) - 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 = skippy
en 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:
- Ticket sobre el tema:https://github.com/ansible/ansible/issues/51042
- PR que introdujo la función en el complemento predeterminado para agregar salida de tarea de iniciohttps://github.com/ansible/ansible/pull/53819
- Últimos documentos para el complemento predeterminadohttps://docs.ansible.com/ansible/latest/collections/ansible/builtin/default_callback.html
- Últimos documentos del complemento skippyhttps://docs.ansible.com/ansible/latest/collections/ansible/posix/skippy_callback.html
- Cómo configurar complementos de devolución de llamadahttps://docs.ansible.com/ansible/latest/plugins/callback.html
Respuesta4
En mi caso, estaba usando la estrategia "gratuita" que no mostraba el encabezado antes de terminar la tarea.