I would like to notify a handler in my role by doing something like this:
- name: Notify handler
notify: my_handler
when: this_thing_is_true|bool
But Ansible just whines:
ERROR! no module/action detected in task.
I have tried various wedges, such as:
- name: Notify handler
meta: noop
notify: my_handler
when: this_thing_is_true|bool
But that similarly whines:
[WARNING]: noop task does not support when conditional
Any suggestions?
@β.εηοιτ.βε shows a solution that prefers debug
, but I think that the output from assert
is cleaner.
debug
code:
- name: with debug
debug: msg=''
changed_when: true
when: something is changed
notify: 'do stuff'
assert
code:
- name: with assert
assert: { that: true, quiet: true }
changed_when: true
when: something is changed
notify: 'do stuff'
debug
output:
TASK [mytask : with debug] ***************************************************** changed: [server] => { "msg": "" } RUNNING HANDLER [mytask : do stuff] ******************************************** changed: [server]
assert
output (seems cleaner):
TASK [mytask : with assert] **************************************************** changed: [server] RUNNING HANDLER [myhandlers : do stuff] **************************************** changed: [server]
Please mind that running a task is not enough for an handler to be notified, you also need a task that creates a changed result.
You can achieve a change result on any task with the help of the changed_when
option in Ansible.
Then, doing a simple debug
could be an option.
The other ideas I had, but that did not really made sense in the end:
pause
: but you cannot pause for less than a secondassert
: but it feels silly to assert the same condition that you also need to put in the changed_that
to notify the handler. You can still assert: that: true
but it feels equally silly.fail
task with a failed_when: false
.command: 'true'
is maybe less silly, compared to the above, but I am not totally convinced, stillGiven the playbook:
- hosts: local
gather_facts: no
vars:
this_thing_is_true: true
tasks:
- debug:
msg: 'Notifying handlers'
# var: this_thing_is_true
# ^-- might be an alternative option to msg:
changed_when: this_thing_is_true
notify:
- me
handlers:
- name: me
debug:
msg: 'I have been notified'
Gives the recap:
PLAY [local] *******************************************************************
TASK [debug] *******************************************************************
changed: [local] => {
"msg": "Notifying handlers"
}
RUNNING HANDLER [me] ***********************************************************
ok: [local] => {
"msg": "I have been notified"
}
PLAY RECAP *********************************************************************
local : ok=2 changed=1 unreachable=0 failed=0 skipped=0 rescued=0 ignored=0
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With