Gérer les échecs de commande
Dans cette étape, vous apprendrez à gérer les échecs de commande lors de l'exécution de commandes shell à l'aide du module Shell. Vous allez gérer les cas où la commande shell retourne un code de sortie non nul, indiquant un échec.
Tout d'abord, complétez le fichier /home/labex/project/handle_command_failure.yml
.
Ajoutez le contenu suivant au fichier de playbook :
- name: Handle Command Failure
hosts: localhost
gather_facts: false
tasks:
- name: Execute a failing command
shell: failing-command
register: failing_command_output
ignore_errors: yes
- name: Handle command failure
debug:
msg: "The command failed. Performing fallback action."
when: failing_command_output.failed
hosts: localhost
: L'hôte cible pour l'exécution de ce playbook Ansible est localhost
.
shell: failing-command
: Cette ligne utilise le module shell pour exécuter la commande failing-command
. La sortie de cette commande sera capturée et stockée dans la variable failing_command_output
. Étant donné que le script failing-command
n'existe pas, cette commande doit échouer.
ignore_errors: yes
: Cette ligne indique à Ansible d'ignorer toutes les erreurs qui se produisent lors de l'exécution de la commande failing-command
. Cela permet au playbook de continuer à s'exécuter même si la commande échoue.
debug
: Ce module utilise le module debug
pour afficher un message indiquant "The command failed. Performing fallback action." Ce message n'est affiché que lorsque la condition failing_command_output.failed
est remplie, indiquant que l'exécution de la commande précédente a échoué.
En résumé, le playbook tente d'exécuter une commande qui devrait échouer, ignore toutes les erreurs qui se produisent lors de son exécution, puis affiche un message indiquant que la commande a échoué et qu'une action de secours sera entreprise en fonction de l'état d'échec de la commande.
Ensuite, affichez la sortie de la commande dans le playbook Ansible.
ansible-playbook /home/labex/project/handle_command_failure.yml
Exemple de sortie :
[WARNING]: No inventory was parsed, only implicit localhost is available
[WARNING]: provided hosts list is empty, only localhost is available. Note that
the implicit localhost does not match 'all'
PLAY [Handle Command Failure] **************************************************
TASK [Execute a failing command] ***********************************************
fatal: [localhost]: FAILED! => {"changed": true, "cmd": "failing-command", "delta": "0:00:00.009169", "end": "2024-03-08 13:46:22.701946", "msg": "non-zero return code", "rc": 127, "start": "2024-03-08 13:46:22.692777", "stderr": "/bin/sh: line 1: failing-command: command not found", "stderr_lines": ["/bin/sh: line 1: failing-command: command not found"], "stdout": "", "stdout_lines": []}
...ignoring
TASK [Handle command failure] **************************************************
ok: [localhost] => {
"msg": "The command failed. Performing fallback action."
}
PLAY RECAP *********************************************************************
localhost : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
La présence de "msg": "The command failed. Performing fallback action."
indique que l'exécution de la commande failing-command
a échoué.