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"?

20
demandé sur Illusionist 2016-08-10 17:38:03

3 réponses

Utiliser Fail module.

  1. utilisez ignore_errors avec toutes les tâches que vous devez ignorer en cas d'erreurs.
  2. définir un drapeau (say, result = false) chaque fois qu'il y a un échec dans l'exécution d'une tâche
  3. 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"
16
répondu clever_bassi 2016-08-11 14:47:57

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.

7
répondu Olga 2018-08-09 03:46:25

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 
1
répondu dank 2016-10-11 19:30:13