Una de mis tareas ansibles importa una base de datos Oracle usando impdp
.
Esto genera una gran cantidad de salida a la consola, así que lo he configurado no_log: True
.
Sin embargo, cuando esto falla, ¡quiero ver el registro!
¿Cómo puedo hacer que esta tarea en particular registre en un archivo y no en la consola?
failed_when
condición, y eliminar el archivo de registro, si el anterior. la tarea fue exitosa :)-vvv
después delansible-playbook
comando para obtener registros detallados.Respuestas:
[Convertir mi comentario en una respuesta]
Una forma de hacerlo sería escribir los registros en algún archivo externo y luego tener una tarea que haga uso de la condición fail_when y eliminar el archivo de registro, si la tarea anterior fue exitosa.
Algo como esto debería ayudarte.
Nota: Esta podría no ser la mejor manera de manejar su problema. Pero, este fue un truco que me ayudó a hacer mi registro y monitoreo.
fuente
Creo que todo lo que necesita hacer es registrar la salida de cada comando que necesita (almacenarlo en una variable) y luego simplemente volcar la variable en un archivo. De esa manera puedes revisarlo más tarde.
Luego en dumpall.j2:
El ejemplo que estoy usando es de aquí
fuente
Resolví esto agregando
a la tarea no_log. Esto hace que ansible continúe con la siguiente tarea, incluso cuando la tarea falla. Luego, para la siguiente tarea, defina una tarea de depuración, que siempre falla y genera la variable registrada, pero solo se ejecuta cuando falla la tarea anterior:
Entonces, incluso con no_log: true, esto hará que ansible muestre el resultado de la tarea fallida. Esta solución no lo está registrando en un archivo como se solicitó, pero satisface su necesidad de "ver el registro cuando falla" y, por supuesto, puede redirigir o usar tee para generar la salida ansible completa a un archivo, lo que, con esta solución también contiene el registro de la tarea fallida.
fuente
Lo que hago cuando tengo un comando para ejecutar y deseo obtener el registro solo en caso de falla es el siguiente (precedido por un comando de shell como
/bin/sh -c '...'
en el caso de que el iniciador no use unasystem
llamada o ejecute el comando directamente sin shell) :Esto redirigirá el error y la salida estándar a un archivo y mostrará el contenido del archivo solo en caso de falla. Si el comando es muy detallado y no desea mantener el registro cuando está bien, puede ir con:
Cotización
&&
y||
uso de la página de manual de sh :Probablemente esa no sea la forma más idiomática de hacerlo con ansible, pero tiene la ventaja de ser muy portátil con cualquier sistema de administración de configuración que le permita mostrar comandos stdout.
fuente
Suponiendo que ansible arroja errores correctamente a stderr, puede capturar la salida de errores en cualquier programa en un archivo usando la redirección de salida:
some command 2> error.log
Sin embargo, no creo que este sea el caso.
En su lugar, es probable que desee consultar esta guía para decidir cuándo ocurrirán los errores http://docs.ansible.com/ansible/playbooks_error_handling.html y luego seleccionar su salida para las cadenas que indican un error antes de enviarlas a un archivo
es decir.
ansible-playbook my-playbook | grep 'error' > error.log
fuente
Creo que lo que estás buscando podría ser simplemente redirigir stdout y street a file.
Típicamente, algún comando &> logfile.log
o alguna variante ...
fuente
Tee será una herramienta muy simple para iniciar sesión, puede consultar el siguiente comando.
fuente