Notifying handler only once

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.