tower - Ansible Ignora los errores en las tareas y falla al final del libro de jugadas si alguna de las tareas tuvo errores
execute ansible yaml (3)
Estoy aprendiendo Ansible. Tengo un libro de jugadas para limpiar los recursos, y quiero que el libro de jugadas ignore todos los errores y continúe hasta el final, y luego falle al final si hubo errores.
Puedo ignorar errores con
ignore_errors: yes
Si se tratara de una tarea, podría hacer algo como (desde la captura de un error ansible)
- name: this command prints FAILED when it fails
command: /usr/bin/example-command -x -y -z
register: command_result
ignore_errors: True
- name: fail the play if the previous command did not succeed
fail: msg="the command failed"
when: "''FAILED'' in command_result.stderr"
¿Cómo fallo al final? Tengo varias tareas, ¿cuál sería mi condición de "cuándo"?
El módulo de falla funciona muy bien! Gracias.
Tenía que definir mi hecho antes de verificarlo, de lo contrario obtendría un error de variable no definida.
Y tuve problemas a la hora de configurar el hecho con comillas y sin espacios.
Esto funcionó:
set_fact: flag="failed"
Esto arrojó errores:
set_fact: flag = failed
Puede envolver todas las tareas que pueden fallar en el bloque y usar ignore_errors: yes
con ese bloque.
tasks:
- name: ls
command: ls -la
- name: pwd
command: pwd
- block:
- name: ls non-existing txt file
command: ls -la no_file.txt
- name: ls non-existing pic
command: ls -la no_pic.jpg
ignore_errors: yes
Lea más sobre el manejo de errores en bloques here .
Utilice el módulo de Fail .
- Use ignore_errors con cada tarea que necesite ignorar en caso de errores.
- Establezca una marca (por ejemplo, resultado = falso) siempre que haya una falla en la ejecución de alguna tarea
- Al final del libro de jugadas, verifique si la bandera está activada y, en función de eso, falla la ejecución
- fail: msg="The execution has failed because of errors." when: flag == "failed"
Actualizar:
Utilice el registro para almacenar el resultado de una tarea como la que se muestra en su ejemplo. Luego, usa una tarea como esta:
- name: Set flag
set_fact: flag = failed
when: "''FAILED'' in command_result.stderr"