Manejar Fallos de Comandos
En este paso, aprenderás cómo manejar los fallos de comandos cuando ejecutas comandos de shell utilizando el módulo Shell. Manejarás casos en los que el comando de shell devuelve un código de salida distinto de cero, lo que indica un fallo.
Primero, completa el archivo /home/labex/project/handle_command_failure.yml
.
Agrega el siguiente contenido al archivo del 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
: El host objetivo para ejecutar este playbook de Ansible es localhost
.
shell: failing-command
: Esta línea utiliza el módulo shell para ejecutar el comando failing-command
. La salida de este comando se capturará y almacenará en la variable failing_command_output
. Dado que el script failing-command
no existe, este comando debe fallar.
ignore_errors: yes
: Esta línea instruye a Ansible a ignorar cualquier error que ocurra durante la ejecución del comando failing-command
. Esto permite que el playbook continúe ejecutándose incluso si el comando falla.
debug
: Este módulo utiliza el módulo debug
para mostrar un mensaje que dice "The command failed. Performing fallback action." Este mensaje solo se mostrará cuando se cumpla la condición failing_command_output.failed
, lo que indica que la ejecución del comando anterior falló.
En resumen, el playbook intenta ejecutar un comando que se espera que falle, ignora cualquier error que ocurra durante su ejecución y luego muestra un mensaje que indica que el comando falló y se tomará una acción de respaldo según el estado de fallo del comando.
Luego, muestra la salida del comando en el playbook de Ansible.
ansible-playbook /home/labex/project/handle_command_failure.yml
Ejemplo de salida:
[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 presencia de "msg": "The command failed. Performing fallback action."
indica que la ejecución del comando failing-command
falló.