Ansible: Error Handling
Ansible stops executing on the host whenever it receives a non-zero return code from a command. We can handle these situations with the helps of settings and tools to behave as it we want.
Ignoring Errors Ansible stops executing commands on the host when it receives non-zero code, but we can ignore these errors and run the rest of the tasks as it is.
- name: I will cause an error
...configs
ignore_errors: yes
Failed when Ansible let you define the condition when you want explicitly fail when a certain condition is true.
- name: Fail task under certain condition true
command: ls/tmp/dir_not_exist
register: result
failed_when: result.rc == 0
Aborting on first error anyerrorsfatal finishes the fatal task on all hosts in the current batch, then stops executing on all hosts.
- hosts: somehosts
any_errors_fatal: true
tasks:
- block:
- include_tasks: sometask.yml
Handling errors with blocks Ansible let you control errors in a block with rescue and always section. In rescue, we can define tasks which we want to run when an earlier task in a block fails. You can also think of rescue as except and always as finally in other languages to handle errors.
task:
- name: tasks to be run
block:
- name: task 1
// code
- name: task 2
// code
- name: task 3
// code
rescue:
- name: Run when one of the above task fails
// code
always:
- name: Always run
// code
Ansible provide ignore, rescue, always, failed_when to easily handle the behavior of playbook when we face any errors. We can use these commands/settings to gracefully record errors and take specific action.
Cheers!