Impossible ignorer les erreurs dans les tâches et échouer à la fin du playbook si des tâches ont des erreurs
je suis en train d'apprendre Ansible. J'ai un playbook pour nettoyer les ressources, et je veux que le playbook ignore chaque erreur et continue jusqu'à la fin , et puis échouer à la fin s'il y avait des erreurs.
je peux ignorer les erreurs avec
ignore_errors: yes
si c'était une tâche, je pourrais faire quelque chose comme ( à partir d'une capture d'erreur possible)
- 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"
Comment puis-je échouer à la fin ? J'ai plusieurs tâches, ce serait mon "Lorsque l'état"?
3 réponses
Utiliser Fail module.
- utilisez ignore_errors avec toutes les tâches que vous devez ignorer en cas d'erreurs.
- définir un drapeau (say, result = false) chaque fois qu'il y a un échec dans l'exécution d'une tâche
- a la fin du playbook, vérifiez si le drapeau est activé, et en fonction de cela, échouez l'exécution
- fail: msg="The execution has failed because of errors." when: flag == "failed"
mise à Jour:
utilise le registre pour stocker le résultat d'une tâche comme vous l'avez montré dans votre exemple. Ensuite, utilisez une tâche comme ceci:
- name: Set flag
set_fact: flag = failed
when: "'FAILED' in command_result.stderr"
Vous pouvez envelopper toutes les tâches qui peut échouer dans le bloc, et utiliser ignore_errors: yes
avec ce bloc.
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
en savoir plus sur la gestion des erreurs dans les blocs ici.
le module Fail fonctionne très bien! Grâce.
j'ai dû définir mon fait avant de le vérifier, sinon j'aurais une erreur de variable non définie.
et j'ai eu des problèmes quand je réglais le fait avec des citations et sans espaces.
Cela a fonctionné:
set_fact: flag="failed"
cela a lancé des erreurs:
set_fact: flag = failed