web-dev-qa-db-fra.com

Ansible Ignorer les erreurs dans les tâches et échouer à la fin du livre de jeu si des tâches comportaient des erreurs

J'apprends Ansible. J'ai un livre de lecture pour nettoyer les ressources, et je veux qu'il ignore toutes les erreurs et continue jusqu'à la fin, puis échoue à la fin s'il y a des erreurs.

Je peux ignorer les erreurs avec

  ignore_errors: yes

Si c’était une tâche, je pourrais faire quelque chose comme:

- 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, quelle serait ma condition "quand"?

36
Illusionist

Utilisez le module Fail .

  1. Utilisez ignore_errors avec toutes les tâches à ignorer en cas d'erreur.
  2. Définir un indicateur (par exemple, résultat = faux) en cas d'échec de l'exécution d'une tâche
  3. À la fin du livre de jeu, vérifiez si flag est activé et, en conséquence, échoue lors de l'exécution.
- fail: msg="The execution has failed because of errors."
  when: flag == "failed"

Mise à jour:

Utilisez register pour stocker le résultat d'une tâche telle que celle que vous avez montrée dans votre exemple. Ensuite, utilisez une tâche comme celle-ci:

- name: Set flag
  set_fact: flag = failed
  when: "'FAILED' in command_result.stderr"
25
clever_bassi

Vous pouvez envelopper toutes les tâches pouvant échouer dans un 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 .

14
Olga

Le module d'échec fonctionne très bien! Merci.

Je devais définir mon fait avant de le vérifier, sinon j'obtiendrais une erreur de variable non définie.

Et j'ai eu des problèmes en réglant le fait avec des guillemets et sans espaces.

Cela a fonctionné:

set_fact: flag="failed"

Cela a jeté des erreurs:

set_fact: flag = failed 
1
dank