@ -8,20 +8,27 @@ Blocks allow for logical grouping of tasks and in play error handling. Most of w
:emphasize-lines: 3
:caption: Block example
tasks:
- name: Install Apache
block:
- yum: name={{ item }} state=installed
loop:
- yum:
name: "{{ item }}"
state: installed
with_items:
- httpd
- memcached
- template: src=templates/src.j2 dest=/etc/foo.conf
- service: name=bar state=started enabled=True
- template:
src: templates/src.j2
dest: /etc/foo.conf
- service:
name: bar
state: started
enabled: True
when: ansible_distribution == 'CentOS'
become: true
become_user: root
In the example above, each of the 3 tasks will be executed after appending the `when` condition from the block
and evaluating it in the task's context. Also they inherit the privilege escalation directives enabling "become to root"
for all the enclosed tasks.
@ -38,22 +45,27 @@ Error Handling
Blocks also introduce the ability to handle errors in a way similar to exceptions in most programming languages.
.. code-block :: YAML
:emphasize-lines: 3, 7,11
:emphasize-lines: 3, 9,15
:caption: Block error handling example
tasks:
- name: Attempt and gracefull roll back demo
block:
- debug: msg='I execute normally'
- debug:
msg: 'I execute normally'
- command: /bin/false
- debug: msg='I never execute, due to the above task failing'
- debug:
msg: 'I never execute, due to the above task failing'
rescue:
- debug: msg='I caught an error'
- debug:
msg: 'I caught an error'
- command: /bin/false
- debug: msg='I also never execute :-('
- debug:
msg: 'I also never execute :-('
always:
- debug: msg="this always executes"
- debug:
msg: "this always executes"
The tasks in the `` block `` would execute normally, if there is any error the `` rescue `` section would get executed
with whatever you need to do to recover from the previous error. The `` always `` section runs no matter what previous
@ -64,13 +76,15 @@ error did or did not occur in the ``block`` and ``rescue`` sections. It should b
Another example is how to run handlers after an error occurred :
.. code-block :: YAML
:emphasize-lines: 5,9
:emphasize-lines: 6,10
:caption: Block run handlers in error handling
tasks:
- name: Attempt and gracefull roll back demo
block:
- debug: msg='I execute normally'
- debug:
msg: 'I execute normally'
notify: run me even after an error
- command: /bin/false
rescue:
@ -78,7 +92,8 @@ Another example is how to run handlers after an error occurred :
meta: flush_handlers
handlers:
- name: run me even after an error
debug: msg='this handler runs even on error'
debug:
msg: 'this handler runs even on error'
.. seealso ::