Salida de pantalla con Ansible


39

Tengo un juego Ansible para PGBouncer que muestra algunos resultados de un módulo de estadísticas integrado en PGBouncer.

Mi problema es que cuando Ansible imprime la salida en el terminal, destruye las nuevas líneas. En lugar de ver

----------
| OUTPUT |
----------

Veo

----------\n| OUTPUT |\n----------

¿Alguien sabe cómo obtener Ansible para "imprimir bastante" la salida?

Respuestas:


14

No hay una manera de hacer lo que quieres de forma nativa en Ansible. Puede hacer esto como una solución alternativa:

ansible-playbook ... | sed 's/\\n/\n/g'

1
En OSX tuve que usar sed -e 's/\\n/'$'\\\n/g'. También relevante: comicjk.com/20
Navin

44
vea la respuesta de sorins serverfault.com/a/846232/240508, que es la correcta en 2017 y ansible> 2.3
Vadimo

En su mayoría \naparecen en el resultado, por lo que podría usar esta msg: "{{ result.stdout | regex_replace('\\n', '\n') }}"
expresión regular

desafortunadamente, al hacer esto se eliminan los colores agradables y útiles que se obtienen en la salida ansible
Mehdi LAMRANI

63

Si desea una salida más amigable para los humanos, defina:

ANSIBLE_STDOUT_CALLBACK=debug

Esto hará que ansible usar el módulo de salida de depuración (anteriormente nombrado human_log) a pesar de que su nombre desafortunado es menos detallado y mucho más fácil de leer para los humanos.

Si recibe un error de que este módulo no está disponible, actualice Ansible o agregue este módulo localmente si no puede actualizar ansible, funcionará con más de versiones de ansible como 2.0 o probablemente 1.9.

Otra opción para configurar esto es agregar stdout_callback = debuga su ansible.cfg


13
esta debería ser la respuesta ACEPTADA en 2017, la salida del registro amigable para los humanos se envía de fábrica.
Vadimo

1
Aquí hay algunos consejos más para hacer esto más permanente: github.com/ansible/ansible/issues/27078#issuecomment-364560173
kramer65

1
O ANSIBLE_STDOUT_CALLBACK=yaml. Lo prefiero porque se formatea bien fail msgcuando proporciono un objeto.
Marinos un


12

Encontrado de esta manera en el foro del grupo Ansible Project:

- name: "Example test"
  command:
    ...
  register: test
- name: "Example test stdout"
  debug:
    msg: "{{ test.stdout.split('\n') }}"
- name: "Example test stderr"
  debug:
    msg: "{{ test.stderr.split('\n') }}"

Básicamente convertimos esto en una lista dividiéndola por una nueva línea y luego imprimiendo esa lista.


¡Eso hace que la salida de shell sea mucho más legible! ¡Agradable!
Asfand Qazi

Esta solución parece tener un inconveniente importante: si falla la ejecución del módulo "Prueba de ejemplo", generalmente falla la construcción completa del libro de jugadas y nunca verá la salida formateada, especialmente la de stderr, que probablemente sea más interesante.
René

@ René tienes razón. Para eso, puede agregar ignore_errors: yesal comando original y luego algo como `- afirmar: eso:" test.rc == 0 ".
jhutar


0

Si desea verlo en un formato que prácticamente imite la salida estándar, puede usar el debugcomplemento de devolución de llamada con el debugmódulo en Ansible 2.7+ de esta manera:

- name: "Test Output"
  debug:
    msg: "{{ test_result.stdout_lines | join('\n') }}"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.