Is there a way to have multiple plays call a “notify” handler, but have the handler run only once, at the end of all plays?
For example, say I have site.yml:
- include webservers.yml
- include database.yml
And in both webservers.yml and database.yml, I have a role that calls:
notify: update load balancer
If I put an “update load balancer” handler in some common role included by both webservers.yml and database.yml, it gets called at the end of each of those two plays. I only want it to happen once, at the end of both plays.
And if I put the handler inside site.yml, it can’t be found by the included plays.
Thanks.
Hi,
I’ve posted a similar message earlier: https://groups.google.com/forum/#!topic/ansible-project/8FqZwqqyyeU
But haven’t got any replies to it.
And here is a bit earlier ticket with Michael’s answer: https://github.com/ansible/ansible/issues/5634
If you find the way to solve your issue please let us know here, as I’m interested in that too.
Thanks,
Timur
I would like the same thing. I think Ansible needs a global handler and global notify. This would support the frequently used unix conf.d/ idiom. Right now the way I do it is with a role called “end” that does the restart. You lose idempotency because it always runs (it has to due to no global notify) but it works.
-Aaron
It’s very unlikely that we are going to add a handler that spans plays, due to the way plays are modelled.
However, there are some tricks/patterns where you could create a “handler needs to run” file on the remote host, check for it with stat, and signal a handler in a final play, if you were using more than one play.