Обработка ошибок сценария
В этом шаге вы научитесь обрабатывать ошибки сценария при выполнении сценариев с использованием модуля Script. Вы будете обрабатывать ситуации, когда сценарий возвращает ненулевой статус выхода, что указывает на ошибку.
Сначала измените существующий файл playbook, удалив все содержимое и добавив следующее содержимое в файл playbook:
- hosts: localhost
tasks:
- name: Выполнить неработающий сценарий
script: /home/labex/project/failing_script.sh
register: failing_script_output
ignore_errors: yes
- name: Обработать ошибку сценария
debug:
msg: "Сценарий не выполнен. Выполняется резервное действие."
when: failing_script_output.failed
script
: Это фактическая команда, которую задача будет выполнять.
register
: Это регистрирует вывод сценария в переменную "failing_script_output" для последующего использования в playbook.
ignore_errors
: Этот параметр установлен в yes
, чтобы позволить Ansible продолжать выполнение последующих задач, даже если эта задача сценария завершилась с ошибкой. Ошибка будет записана в переменную failing_script_output.
debug
: Это модуль Ansible, используемый для вывода отладочной информации.
msg
: Этот параметр для модуля debug выводит сообщение, указывающее на то, что сценарий не выполнен. Эта задача будет выполняться только тогда, когда предыдущая задача (failing_script_output) завершилась с ошибкой.
when
: Это условие гарантирует, что эта задача будет выполняться только тогда, когда сценарий в первой задаче завершится с ошибкой. Если сценарий выполнится успешно, эта задача будет пропущена.
Кратко говоря, этот playbook пытается выполнить сценарий, который может завершиться с ошибкой. Если сценарий завершается с ошибкой, playbook обрабатывает ошибку, выводя отладочное сообщение и выполняя резервное действие. Параметр ignore_errors: yes
позволяет playbook продолжать работу, даже если сценарий завершается с ошибкой, а условие when: failing_script_output.failed
гарантирует, что задача обработки будет выполнена только при необходимости.
Затем создайте файл неработающего сценария с именем /home/labex/project/failing_script.sh
с таким содержимым:
#!/bin/bash
exit 1
Убедитесь, что файл сценария является исполняемым (chmod +x failing_script.sh
) и поместите файл сценария в директорию /home/labex/project/
, указанную в playbook.
Наконец, запустите playbook и обратите внимание, что неработающий сценарий выполняется, но игнорируется из-за ignore_errors: yes
.
chmod +x failing_script.sh
ansible-playbook script-module-playbook.yaml
Playbook выведет отладочное сообщение, указывающее на ошибку и выполняющее резервное действие.
Пример вывода:
...
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": "Сценарий не выполнен. Выполняется резервное действие."
}
PLAY RECAP *********************************************************************
localhost : ok=3 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=1
"msg": "Сценарий не выполнен. Выполняется резервное действие."
указывает, что сценарий failing_script.sh
не выполнен.