Ansible Игнорировать ошибки в задачах и сбой в конце игровой книги, если у каких-либо задач были ошибки
Я изучаю Ansible. У меня есть учебник для очистки ресурсов, и я хочу, чтобы в плейер-плейере игнорировались все ошибки и продолжались до конца, а затем завершались в конце, если были ошибки.
Я могу игнорировать ошибки с помощью
ignore_errors: yes
Если бы это была одна из задач, я мог бы сделать что-то вроде (от непонятной ошибки)
- name: this command prints FAILED when it fails
command: /usr/bin/example-command -x -y -z
register: command_result
ignore_errors: True
- name: fail the play if the previous command did not succeed
fail: msg="the command failed"
when: "'FAILED' in command_result.stderr"
Как я могу потерпеть неудачу в конце? У меня есть несколько задач, каково было бы мое условие "Когда"?
Ответы
Ответ 1
Используйте Fail.
- Используйте ignore_errors с каждой задачей, которую вам нужно игнорировать в случае ошибок.
- Установите флаг (скажем, result = false) всякий раз, когда происходит сбой при выполнении любой задачи
- В конце игровой книги проверьте, установлен ли флаг, и в зависимости от этого не выполняется выполнение
- fail: msg="The execution has failed because of errors."
when: flag == "failed"
Обновление:
Используйте регистр, чтобы сохранить результат задачи, как показано в примере. Затем используйте следующую задачу:
- name: Set flag
set_fact: flag = failed
when: "'FAILED' in command_result.stderr"
Ответ 2
Вы можете обернуть все задачи, которые могут сбой в блоке, и использовать ignore_errors: yes
с этим блоком.
tasks:
- name: ls
command: ls -la
- name: pwd
command: pwd
- block:
- name: ls non-existing txt file
command: ls -la no_file.txt
- name: ls non-existing pic
command: ls -la no_pic.jpg
ignore_errors: yes
Подробнее о ошибке в блоках.
Ответ 3
Модуль сбоев отлично работает! Спасибо.
Мне нужно было определить свой факт перед его проверкой, иначе я бы получил ошибку переменной undefined.
И у меня были проблемы при настройке факта с помощью кавычек и без пробелов.
Это сработало:
set_fact: flag="failed"
Это забросило ошибки:
set_fact: flag = failed