Manejar el fracaso del script
En este paso, aprenderá a manejar el fracaso del script cuando se ejecutan scripts utilizando el módulo de Script. Manejará los casos en los que el script devuelve un estado de salida no nulo, lo que indica un fracaso.
Primero, modifique el archivo de playbook existente eliminando todo el contenido y agregando el siguiente contenido al archivo de playbook:
- hosts: localhost
tasks:
- name: Ejecutar un script que falla
script: /home/labex/project/failing_script.sh
register: failing_script_output
ignore_errors: yes
- name: Manejar el fracaso del script
debug:
msg: "El script ha fallado. Realizando acción de recuperación."
when: failing_script_output.failed
script
: Este es el comando real que la tarea ejecutará.
register
: Esto registra la salida del script en la variable "failing_script_output" para su posterior uso en el playbook.
ignore_errors
: Este parámetro se establece en yes
para permitir que Ansible siga ejecutando las tareas subsiguientes incluso si esta tarea de script falla. El fracaso se registrará en la variable failing_script_output.
debug
: Este es el módulo de Ansible utilizado para imprimir información de depuración.
msg
: Este parámetro del módulo debug imprime un mensaje que indica que el script ha fallado. Esta tarea solo se ejecutará cuando la tarea anterior (failing_script_output) haya fallado.
when
: Esta condición asegura que esta tarea solo se ejecute cuando el script en la primera tarea ha fallado. Si el script tiene éxito, esta tarea se omitirá.
En resumen, este playbook intenta ejecutar un script que puede fallar. Si el script falla, el playbook maneja el fracaso imprimiendo un mensaje de depuración y realizando una acción de recuperación. El parámetro ignore_errors: yes
permite que el playbook siga ejecutándose incluso si el script falla, y la condición when: failing_script_output.failed
asegura que la tarea de manejo solo se ejecute cuando sea necesario.
Luego, cree un archivo de script que falla llamado /home/labex/project/failing_script.sh
con el siguiente contenido:
#!/bin/bash
exit 1
Asegúrese de que el archivo de script sea ejecutable (chmod +x failing_script.sh
) y coloque el archivo de script en el directorio /home/labex/project/
especificado en el playbook.
Finalmente, ejecute el playbook y observe que el script que falla se ejecuta pero se ignora debido a ignore_errors: yes
.
chmod +x failing_script.sh
ansible-playbook script-module-playbook.yaml
El playbook mostrará un mensaje de depuración que indica el fracaso y realiza una acción de recuperación.
Salida de ejemplo:
...
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": "El script ha fallado. Realizando acción de recuperación."
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
El "msg": "El script ha fallado. Realizando acción de recuperación."
indica que el script failing_script.sh
no se pudo ejecutar correctamente.