Pregunta ¿Cómo ver stdout de comandos ansible?


¿Cómo veo stdout para los comandos de libro de juego ansible? -v solo muestra la salida ansible, no los comandos individuales. Sería genial si pudiera descubrir cómo hacer esto inmediatamente, así que si algo falla o se cuelga, puedo ver por qué.

p.ej.

- name: print to stdout
  action: command echo "hello"

imprimiría

TASK: [print variable] ******************************************************** 

hello

123
2017-09-06 21:01


origen


relacionado: serverfault.com/questions/667252/… - Capi Etheriel
stackoverflow.com/questions/20563639/… - JonnyJD


Respuestas:


Creo que puede registrar el resultado en una variable y luego imprimir con depuración.

- name: print to stdout
  command: echo "hello"
  register: hello

- debug: msg="{{ hello.stdout }}"

- debug: msg="{{ hello.stderr }}"

126
2017-09-14 13:01



Además, puedes depurar una variable directamente con - debug: var=hello. A veces esto es más útil para la salida multilínea o la salida del módulo Ansible (en lugar de command/shell salida). - geerlingguy
Tuve problemas para obtener la salida de Java utilizando esto. La solución es redirigir toda la salida de Java a la salida estándar: shell: java -version 2>&1 - Matthias Braun
eso es mucho mejor que nada, pero solo recibes el mensaje stdout después el comando se ha completado con éxito. Estaba teniendo un problema en el que parece que cuelga ansible. La razón fue que estaba usando el nombre de usuario incorrecto para un comando rsync, que puso en cola la solicitud de contraseña interactiva, que acaba de colgar ansible. Fue muy difícil de depurar, pero si pudiera ver la salida estándar en tiempo real, inmediatamente me habría dado cuenta de lo que había hecho mal. Me encantaría esta funcionalidad, si es posible. - Michael B
Si bien esto funciona, significa que ansible hace que la depuración sea realmente difícil. Imaginemos que la primera tarea nunca termina (quizás esté esperando tontamente la entrada del usuario) ... ¡el usuario nunca lo sabría! Además, la register módulo, o lo que sea que no produce objetos que tienen la stdout o stderr conjunto de variables ... así que es realmente malo que no solo obtengamos la salida por defecto: | - vlad-ardelean


En lugar de stdout Sugeriría usar stdout_lines. Para la salida multilínea, esto es mucho mejor, por ejemplo.

- hosts: all
  tasks:
    - name: Run ls.sh and output "ls /"
      script: ls.sh
      register: out

    - debug: var=out.stdout_lines

da

TASK: [debug var=out.stdout_lines] ******************************************** 
ok: [local] => {
    "var": {
        "out.stdout_lines": [
            "total 61", 
            "lrwxrwxrwx   1 root root     7 Feb 15  2015 bin -> usr/bin", 
            "drwxr-xr-x   6 root root  1024 Aug 24 22:08 boot", 
            "drwxr-xr-x  22 root root  3580 Sep  8 18:41 dev",  
            [...] 
            "drwxr-xr-x   9 root root  4096 Aug 25 19:14 usr", 
            "drwxr-xr-x  13 root root  4096 Feb 25  2015 var"
        ]
    }
}

Con respecto a la salida en tiempo real para fines de depuración, hay un informe de error cerrado https://github.com/ansible/ansible/issues/3887#issuecomment-54672569 discutir las razones por las cuales esto no es posible y no será implementado.


75
2017-09-08 18:12



+1 para vincular el error de "salida en tiempo real". - ntc2
Si quiero enviar.stdout_lines (como cuerpo de tarea de correo imposible), ¿cómo puedo enviarlo para que NO tenga este aspecto cuando se recibe un correo electrónico? [u'total 61 ', u'lrwxrwxrwx 1 root root 7 feb 15 2015 bin -> usr / bin', u'drwxr-xr-x 6 root root 1024 ago 24 22:08 boot ', u' .... . '] Quiero que se vea así, como se ve en la terminal - Chris F


Me encontré usando el mínimo  stdout_callback con ansible-playbook dio resultados similares al uso de ansible ad-hoc.

En su ansible.cfg (Tenga en cuenta que estoy en OS X, así que modifique el callback_plugins camino a su instalación)

stdout_callback     = minimal
callback_plugins    = /Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/ansible/plugins/callback

Para que una tarea como esta

---
- hosts: example
  tasks:
   - name: Say hi
     command: echo "hi ..."

Da una salida como esta, como lo haría un comando ad-hoc

example | SUCCESS | rc=0 >>
hi ...

Estoy usando ansible-playbook 2.2.1.0


13
2018-04-06 08:12



Agradable complemento de devolución de llamada, el posprocesamiento simple puede extraer solo la salida estándar. - RichVel