ansible - tower - Abortar la ejecución de la tarea restante si falla cierta condición
execute ansible yaml (3)
Quiero abortar la ejecución de la tarea restante si falla alguna condición. y mostrar el mensaje de error adecuado.
Entonces, en lugar de omitir la tarea restante, quiero mostrar un mensaje de error y detener la ejecución de un libro de jugabilidad ansible.
Digamos que estoy ejecutando debajo del comando
$ ansible-playbook playbook.yml -e "param1=value1 param2=value"
Mi libro de jugadas se parece a esto:
playbook.yml: -
---
- hosts: local
user: roop
gather_facts: no
vars: {param1: "", param2: ""}
tasks:
#check whether param1 defined
- name: ''Check for valid param1''
shell: echo {{ param1 }}
register: isValidParam1
when: param1 !=""
#check if param1 is null or invalid
- name: ''check if param1 is null or invalid''
debug: msg="Please enter correct param1"
when: param1 == ""
#check whether param2 defined
- name: ''Check for valid param2''
shell: echo {{ param2 }}
register: isValidParam2
when: param2 != ""
#check if param2 is null or invalid
- name: ''check if param2 is null or invalid''
debug: msg="Please enter correct param2"
when: param2 == ""
#check params is valid and defined
- name: ''Check for valid params''
shell: echo "param1={{ param1 }} param2={{ param2 }}
register: validParams
when: isValidParam1 is defined and isValidParam2 is defined
#check if params are invalid then abort below all tasks.
- name: ''check if validParams is null or invalid''
debug: msg="Please enter correct Params"
when: validParams is not defined
# based on validParams, and different value of param1 more than
10 task executing.
Como he mencionado en mi último comentario de tarea. Estoy ejecutando más de 10 tareas basadas en validParams
y param1
valor diferente. Lo que necesito aquí si validParams
no está definido, aborta toda la ejecución y muestre los mensajes de error.
¿Hay alguna manera eficiente de hacer esto? Por favor sugiéreme
Ansible> = 2.0 tiene una función de bloque que le permite agrupar tareas de forma lógica. Esto le permite aplicar un when a un grupo de tareas.
La principal diferencia entre esto y los módulos de falla o afirmación es que la tarea no está marcada como fallida; sólo se ha saltado. Si esto es mejor depende de su caso de uso. Por ejemplo, tengo algunas tareas que escriben en un registro que luego se analiza en busca de fallos; es más fácil hacer esto si solo se registran las condiciones de falla "reales".
Código de ejemplo:
- block:
# task 1
# task 2
# task 3
when: "param1 is defined or param2 is defined"
# otherwise output a message
- block:
debug: msg="Missing params"
when: "param1 is not defined or param2 is not defined"
Así que en Ansible 2.2+ está el módulo meta: http://docs.ansible.com/ansible/latest/meta_module.html
Asi que
meta: end_play
detiene el libro de jugadas con un estado que no falla
Puede usar assert http://docs.ansible.com/assert_module.html o fallar en http://docs.ansible.com/fail_module.html
Estará de acuerdo con algo como esto
#check if params are invalid then abort below all tasks.
- name: ''check parm is null or invalid''
fail: msg="Please enter correct Params"
when: "param1 is not defined or param2 is not defined " ## whatever condition you want