Обработка ошибок при выполнении команды
На этом шаге вы научитесь обрабатывать ошибки при выполнении команд оболочки с использованием модуля Shell. Вы научитесь обрабатывать случаи, когда команда оболочки возвращает ненулевой статус выхода, что указывает на ошибку.
Сначала заполните файл /home/labex/project/handle_command_failure.yml
.
Добавьте следующее содержимое в файл плейбука:
- 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
: Целевой хост для выполнения этого Ansible-плейбука - localhost
.
shell: failing-command
: Эта строка использует модуль shell для выполнения команды failing-command
. Вывод этой команды будет захвачен и сохранен в переменной failing_command_output
. Поскольку скрипт failing-command
не существует, эта команда обязательно завершится с ошибкой.
ignore_errors: yes
: Эта строка информирует Ansible игнорировать любые ошибки, возникающие при выполнении команды failing-command
. Это позволяет плейбуку продолжить выполнение, даже если команда завершилась с ошибкой.
debug
: Этот модуль использует модуль debug
для вывода сообщения "The command failed. Performing fallback action." Это сообщение выводится только в том случае, если условие failing_command_output.failed
выполняется, что означает, что предыдущая команда завершилась с ошибкой.
В общем, плейбук пытается выполнить команду, которая должна завершиться с ошибкой, игнорирует любые ошибки, возникающие при ее выполнении, и затем выводит сообщение, указывающее, что команда завершилась с ошибкой, и будет предпринято резервное действие на основе статуса ошибки команды.
Затем отобразите вывод команды в Ansible-плейбуке.
ansible-playbook /home/labex/project/handle_command_failure.yml
Пример вывода:
[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
Присутствие "msg": "The command failed. Performing fallback action."
указывает, что выполнение команды failing-command
завершилось с ошибкой.