Je souhaite interrompre l'exécution de la tâche restante si certaines conditions échouent. et afficher le message d'erreur approprié.
Donc, au lieu de sauter la tâche restante, je veux afficher un message d'erreur et arrêter l'exécution du playbook ansible.
Disons que je cours sous la commande
$ ansible-playbook playbook.yml -e "param1=value1 param2=value"
Mon playbook ressemble à ceci: -
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.
Comme je l'ai mentionné dans mon dernier commentaire de tâche. J'exécute plus de 10 tâches basées sur validParams
et param1
valeur différente. Ce dont j'ai besoin ici si validParams
n'est pas défini, alors abandonnez toute exécution et affichez les messages d'erreur.
Existe-t-il un moyen efficace de le faire? Veuillez me suggérer.
Vous pouvez utiliser assert http://docs.ansible.com/assert_module.html ou fail http://docs.ansible.com/fail_module.html
Il ira de pair avec quelque chose comme ça
#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
Donc, dans Ansible 2.2+, il y a le méta-module: http://docs.ansible.com/ansible/latest/meta_module.html
Alors
meta: end_play
arrête le playbook avec un statut non défaillant
Ansible> = 2.0 a une fonctionnalité de blocage qui vous permet de grouper logiquement les tâches. Cela vous permet d'appliquer un lorsque à un groupe de tâches.
La principale différence entre cela et les modules échouent ou assert est que le la tâche n'est pas marquée comme ayant échoué; c'est juste sauté. Que ce soit mieux dépend de votre cas d'utilisation. Par exemple, j'ai certaines tâches qui écrivent dans un journal qui est ensuite analysé pour les échecs; il est plus facile de le faire si seules des conditions de défaillance "réelles" sont enregistrées.
Exemple de code:
- 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"