A recap there are 2 main use of Blocks in Ansible. The first write-up can be found at Grouping Tasks with Block in Ansible
- Apply conditional logic to all the tasks within the block. In such a way, the logic only need to be declared once
- Apply Error handling especially when recovering from an error condition.
Today, we will deal with Point 2 in this blog entry
According to Ansible Documentation found at https://docs.ansible.com/ansible/latest/playbook_guide/playbooks_blocks.html
Rescue blocks specify tasks to run when an earlier task in a block fails. This approach is similar to exception handling in many programming languages. Ansible only runs rescue blocks after a task returns a ‘failed’ state. Bad task definitions and unreachable hosts will not trigger the rescue block.
Here is my simple example for implementation
- name: Check current Timezone
command: timedatectl show --property=Timezone --value
register: timezone_output
changed_when: false
- name: Configure Timezone to Asia/Singapore
command: timedatectl set-timezone Asia/Singapore
when: timezone_output.stdout != "Asia/Singapore"
- name: Install and Configure Chrony Service Block
block:
- name: Install Chrony package
dnf:
name: chrony
state: present
- name: Configure Chrony servers
lineinfile:
path: /etc/chrony.conf
line: "server sg.pool.ntp.org iburst"
insertafter: '^#.*server 3.centos.pool.ntp.org iburst'
state: present
- name: Enable Chrony service
service:
name: chronyd
state: started
enabled: yes
rescue:
- name: Print when Errors
debug:
msg: 'Something failed at Chrony Setup'
when:
- ansible_os_family == "RedHat"
- ansible_distribution_major_version == "8"


