Digamos que ejecuto lo siguiente.
$ cat test.sh
#!/bin/bash
echo Hello World
exit 0
$ cat Hello.yml
---
- hosts: MyTestHost
tasks:
- name: Hello yourself
script: test.sh
$ ansible-playbook Hello.yml
PLAY [MyTestHost] ****************************************************************
GATHERING FACTS ***************************************************************
ok: [MyTestHost]
TASK: [Hello yourself] ********************************************************
ok: [MyTestHost]
PLAY RECAP ********************************************************************
MyTestHost : ok=2 changed=0 unreachable=0 failed=0
$
Estoy seguro de que tuvo éxito.
¿Dónde / cómo veo el "Hola mundo" hecho eco / impreso por mi script en el host remoto (MyTestHost)? ¿O el código de retorno / salida del script?
Mi investigación me muestra que sería posible escribir un complemento para interceptar las devoluciones de llamada de ejecución del módulo o algo en esas líneas y escribir un archivo de registro. Preferiría no perder el tiempo con eso.
Por ejemplo, algo como stdout a continuación (tenga en cuenta que estoy ejecutando ansible y no ansible-playbook):
$ ansible plabb54 -i /project/plab/svn/plab-maintenance/ansible/plab_hosts.txt -m script -a ./test.sh
plabb54 | success >> {
"rc": 0,
"stderr": "",
"stdout": "Hello World\n"
}
$
set -x
yset +x
en un script de shell.no_log: True
bandera para evitar que se registre un comando o un libro de jugadas, pero eso es lo más detallado que creo.logrotate
paralog_path
que cadaansible
ejecución tenga un archivo diferente (con el comando / libro de jugadas incluido en el archivo)?v
s para obtener stdout y stderrLa tarea de secuencia de comandos del libro de jugadas se generará
stdout
al igual que el comando que no es del libro de jugadas, solo debe guardarse en una variable usandoregister
. Una vez que lo tenemos, el módulo de depuración puede imprimir en el flujo de salida del libro de jugadas.La salida debería verse así:
fuente
También hay otra forma de generar un archivo de registro.
Antes de ejecutar,
ansible-playbook
ejecute los siguientes comandos para habilitar el registro:Especifique la ubicación del archivo de registro.
Habilitar depuración
Para verificar ese archivo de registro generado.
fuente
Complementos oficiales
Puede utilizar los complementos de devolución de llamada de salida . Por ejemplo, a partir de Ansible 2.4, puede usar el complemento de devolución de llamada de salida de depuración :
(Alternativamente, ejecute
export ANSIBLE_STDOUT_CALLBACK=debug
antes de ejecutar su libro de jugadas)Importante: debes ejecutar
ansible-playbook
con la opción-v
(--verbose
) para ver el efecto. Constdout_callback = debug
set, la salida ahora debería verse así:Hay otros módulos además del
debug
módulo si desea que la salida tenga un formato diferente. Hayjson
,yaml
,unixy
,dense
,minimal
, etc ( la lista completa ).Por ejemplo, con
stdout_callback = yaml
, la salida se verá así:Complementos de terceros
Si ninguno de los complementos oficiales es satisfactorio, puede probar el
human_log
complemento. Hay algunas versiones:https://github.com/n0ts/ansible-human_log
https://gist.github.com/cliffano/9868180
fuente
Usando complementos de devolución de llamada, puede tener la salida estándar de sus comandos en forma legible con el juego : gist: human_log.py
fuente
Ayuda de línea de comandos de Ansible, como
ansible-playbook --help
muestra cómo aumentar el nivel de detalle de la salida configurando el modo detallado (-v) en más detalle (-vvv) o en el nivel de depuración de la conexión (-vvvv). Esto debería darle algunos de los detalles que busca en stdout, que luego puede iniciar sesión.fuente