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