=====Действия в случае ошибки.=====
Рассмотрим 2 варианта:
* Мы, в любом случае, хотим выполнить чать задачь, даже если сценарий прекратит работу из-за ошибки.
* Мы хотим выполнить определенное действие, если сценарий прекратит работу из-за ошибки.
** Это возможно реализовать с помощью block + rescue/always. **
====Примеры.====
а) Выполнять задачу после rescue, если основной сценарий выполнился с ошибкой:
- name: Основной сценарий
block:
...
rescue:
- name: Выполнить, если произошла ошибка
debug:
msg: 'Show error'
б) Выполнять задачу после always независимо от результата выполнения основного сценария:
- name: Основной сценарий
block:
...
always:
- name: Выполнить в любом случае
command: rm -f /tmp/test
в) И то и другое:
- name: Основной сценарий
block:
...
rescue:
- name: Выполнить, если произошла ошибка
debug:
msg: 'Show error'
always:
- name: Выполнить в любом случае
command: rm -f /tmp/test
* в данном примере мы отобразим текст Show error только при наличии ошибки, а также выполним команду rm -f /tmp/test независимо от исхода работы сценария.
====any_errors_fatal====
Чтобы при ошибке выполнения на одном из серверов прекратилось выполнение на всех, нужно добавить any_errors_fatal: true перед блоком задач
- name: test-playbook
hosts: servers
any_errors_fatal: true
tasks:
- name: Создание файла
file:
dest: /home/file.txt
state: touch
owner: root
group: root
mode: 0644
====ignore_errors====
При запуске playbook, если на одном из серверов какая-либо задаче не выполнилась, то все последующие задачи на этом сервере не будут выполнены, чтобы этого не произошло нужно добавить флаг ignore_errors: yes, тогда если в этой задаче произойдет ошибка последующие все равно будут выполняться.
---
- name: test-playbook
hosts: servers
tasks:
- name: Создание файла
file:
dest: /home/file.txt
state: touch
owner: root
group: root
mode: 0644
ignore_errors: yes
==== failed_when ====
Вы можете использовать ключевое слово error_when для управления поведением задачи
Пример:
---
- name: Test ansible
hosts: all
become: yes
tasks:
- name: Tasks number1
yum: name=treeee state=present
ignore_errors: yes
- name: Tasks number2
shell: echo Hellow world
register: results
failed_when: "'world' in results.stdout"
- debug:
var: results
- name: Tasks number3
shell: echo Privet Man!
...