Is it possible to have "post tasks" in a role? i.e tasks defined in a role, that would run at the end of the play?
For example, I have a common
role, which most other roles depend on. The common
role provides some basic stuff to avoid repetition, such as tweaks to yum config, etc.
I notice that playbooks have post_tasks
. I was wondering if it is possible to define post tasks in roles themselves?
Update:
Quoting the Ansible documentation:
Handlers: Running Operations On Change
…
These ‘notify’ actions are triggered at the end of each block of tasks
in a playbook, and will only be triggered once even if notified by
multiple different tasks.…
Roles are described later on. It’s worthwhile to point out that
handlers are automatically processed between ‘pre_tasks’, ‘roles’,
‘tasks’, and ‘post_tasks’ sections.…
Evidently this part of the documentation is either misleading, or down right lying (=there is an error in it). It appears that handlers are fired at the end of each play, between the tasks
and post_tasks
, as this following simple test shows:
- name: Handlers test
hosts: all
gather_facts: no
roles:
- some-role
# some-role depends on common
tasks:
- name: This a task
shell: /bin/true
post_tasks:
- name: This is a post task
shell: /bin/true
And the common role:
# tasks/main.yml
- name: Registering handler
shell: /bin/true
notify: this is a handler
#handlers/main.yml
- name: this is a handler
shell: /bin/true
(Since nobody provided an answer I can't accept one, but didn't feel right answering my own question with tips from the comments…)
Best Answer
This behavior is caused by a bug in Ansible 1.9.x, it's currently tracked here: https://github.com/ansible/ansible/issues/12575