Gérer l'échec d'un script
Dans cette étape, vous allez apprendre à gérer l'échec d'un script lors de son exécution à l'aide du module Script. Vous allez gérer les cas où le script renvoie un statut de sortie non nul, indiquant un échec.
Tout d'abord, modifiez le fichier de playbook existant en supprimant tout le contenu et en ajoutant le contenu suivant au fichier de playbook :
- hosts: localhost
tasks:
- name: Exécuter un script qui échoue
script: /home/labex/project/failing_script.sh
register: failing_script_output
ignore_errors: yes
- name: Gérer l'échec du script
debug:
msg: "Le script a échoué. Exécution d'une action de secours."
when: failing_script_output.failed
script
: C'est la commande réelle que la tâche exécutera.
register
: Cela enregistre la sortie du script dans la variable "failing_script_output" pour une utilisation ultérieure dans le playbook.
ignore_errors
: Ce paramètre est défini sur yes
pour permettre à Ansible de continuer à exécuter les tâches suivantes même si cette tâche de script échoue. L'échec sera enregistré dans la variable failing_script_output.
debug
: C'est le module Ansible utilisé pour afficher des informations de débogage.
msg
: Ce paramètre du module debug affiche un message indiquant que le script a échoué. Cette tâche ne sera exécutée que lorsque la tâche précédente (failing_script_output) a échoué.
when
: Cette condition assure que cette tâche n'est exécutée que lorsque le script dans la première tâche a échoué. Si le script réussit, cette tâche sera ignorée.
En résumé, ce playbook tente d'exécuter un script qui peut échouer. Si le script échoue, le playbook gère l'échec en affichant un message de débogage et en exécutant une action de secours. Le paramètre ignore_errors: yes
permet au playbook de continuer même si le script échoue, et la condition when: failing_script_output.failed
assure que la tâche de gestion n'est exécutée que lorsqu'elle est nécessaire.
Ensuite, créez un fichier de script qui échoue appelé /home/labex/project/failing_script.sh
avec le contenu suivant :
#!/bin/bash
exit 1
Assurez-vous que le fichier de script est exécutable (chmod +x failing_script.sh
) et placez le fichier de script dans le répertoire /home/labex/project/
spécifié dans le playbook.
Enfin, exécutez le playbook et observez que le script qui échoue est exécuté mais ignoré en raison de ignore_errors: yes
.
chmod +x failing_script.sh
ansible-playbook script-module-playbook.yaml
Le playbook affichera un message de débogage indiquant l'échec et exécutera une action de secours.
Exemple de sortie :
...
PLAY [localhost] ***************************************************************
TASK [Gathering Facts] *********************************************************
ok: [localhost]
TASK [Execute a failing script] ************************************************
fatal: [localhost]: FAILED! => {"changed": true, "msg": "non-zero return code", "rc": 1, "stderr": "", "stderr_lines": [], "stdout": "", "stdout_lines": []}
...ignoring
TASK [Handle script failure] ***************************************************
ok: [localhost] => {
"msg": "Le script a échoué. Exécution d'une action de secours."
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
Le "msg": "Le script a échoué. Exécution d'une action de secours."
indique que le script failing_script.sh
a échoué lors de son exécution.