logging - ¿Cómo obtengo los registros/detalles de las ejecuciones del módulo ansible-playbook?
(5)
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
$
Sé con certeza que fue un éxito.
¿Dónde / cómo veo el "Hello World" echo''ed / printed 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 devoluciones de llamadas de ejecución de módulos o algo así y escribir un archivo de registro. Preferiría no perder el tiempo con eso.
Por ejemplo, algo así como la stdout en la parte inferior (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"
}
$
Al usar los complementos de devolución de llamada, puede hacer que la salida estándar de los comandos se emita en forma legible con el juego : gist: human_log.py
Edite, por ejemplo, salida:
_____________________________________
< TASK: common | install apt packages >
-------------------------------------
/ ^__^
/ (oo)/_______
(__)/ )///
||----w |
|| ||
changed: [10.76.71.167] => (item=htop,vim-tiny,curl,git,unzip,update-motd,ssh-askpass,gcc,python-dev,libxml2,libxml2-dev,libxslt-dev,python-lxml,python-pip)
stdout:
Reading package lists...
Building dependency tree...
Reading state information...
libxslt1-dev is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 24 not upgraded.
stderr:
start:
2015-03-27 17:12:22.132237
end:
2015-03-27 17:12:22.136859
La ayuda de la línea de comandos de Ansible, como ansible-playbook --help
muestra cómo aumentar la verbosidad de los resultados configurando el modo detallado (-v) en más verbosidad (-vvv) o en la depuración de la conexión (-vvvv). Esto debería darle algunos de los detalles que busca en stdout, que luego puede registrar.
La tarea de secuencia de comandos de stdout
generará stdout
igual que el comando que no es de Playbook, solo necesita guardarse en una variable usando register
. Una vez que tenemos eso, el módulo de depuración puede imprimir en la secuencia de salida del libro de jugadas.
tasks:
- name: Hello yourself
script: test.sh
register: hello
- name: Debug hello
debug: var=hello
- name: Debug hello.stdout as part of a string
debug: "msg=The script''s stdout was `{{ hello.stdout }}`."
La salida debería verse más o menos así:
TASK: [Hello yourself] ********************************************************
changed: [MyTestHost]
TASK: [Debug hello] ***********************************************************
ok: [MyTestHost] => {
"hello": {
"changed": true,
"invocation": {
"module_args": "test.sh",
"module_name": "script"
},
"rc": 0,
"stderr": "",
"stdout": "Hello World/r/n",
"stdout_lines": [
"Hello World"
]
}
}
TASK: [Debug hello.stdout as part of a string] ********************************
ok: [MyTestHost] => {
"msg": "The script''s stdout was `Hello World/r/n`."
}
Si pasa el -v
a ansible-playbook en la línea de comando, verá el stdout y el stderr para cada tarea ejecutada:
$ ansible-playbook -v playbook.yaml
Ansible también tiene soporte integrado para el registro. Agregue las siguientes líneas a su archivo de configuración ansible :
[defaults]
log_path=/path/to/logfile
Ansible buscará en varios lugares el archivo de configuración:
-
ansible.cfg
en el directorio actual donde ejecutóansible-playbook
-
~/.ansible.cfg
-
/etc/ansible/ansible.cfg
También hay otra forma de generar archivo de registro.
Antes de ejecutar ansible-playbook
ejecute los siguientes comandos para habilitar el registro:
Especifique la ubicación del archivo de registro.
export ANSIBLE_LOG_PATH = ~ / ansible.log
Habilitar depuración
exportar ANSIBLE_DEBUG = True
Para verificar el archivo de registro generado.
menos $ ANSIBLE_LOG_PATH