Hello,

Say I have a playbook a bit like this:

- hosts: some_group
  roles:
    - {
        role: app,
        }

- hosts: all
  roles:
    - {
        role: configure,
        }

That second role "configure" does something that will require the
apache2 service on hosts in some_group to be reloaded. However there
will be multiple other roles that depend on the things that the
"configure" role does, and it won't always be apache2 that needs to
be reloaded. It may be some other software that needs to be
reloaded.

Therefore, I don't think it's correct to put a handler in
roles/configure/handlers/main.yml, because I don't know ahead of
time every possible thing that should be reloaded.

The "app" role does know what needs to be reloaded, so it seems like
the handler should be in roles/app/handlers/main.yml and notified
from the task in roles/configure/tasks/….

Also, as I do not know the exact services that will require
reloading, it seems like I should in fact use "listen:" on the
handler. The idea being that multiple different roles will register
listeners on that event and then they can all fire to reload what
needs reloading.

I put a handler in roles/app/handlers/main.yml like:

- name: Graceful reload apache2
  listen: App config has changed
  command: /usr/sbin/apache2ctl graceful

When the corresponding notify fires, I get the error that no such
handler exists.

If I put the above handler in the same role as where it is notified
from, i.e. in roles/configure/handlers/main.yml, or add it to the
playbook like:

- hosts: all
  roles:
    - {
        role: configure,
        }
  handlers:
    - name Graceful reload apache2
      listen: App config has changed
      command: /usr/sbin/apache2ctl graceful

Then it works.

That's not going to work for me though, because I need other roles
to manage software that will also want to be reloaded when "App
config has changed".

I thought that handlers were a global namespace, and the "app" role
comes first so why is its handler not being made available to the
tasks in the "configure" role?

Is there a better pattern for what I am trying to do?

Version 2.7.4.

Thanks,
Andy

-- 
You received this message because you are subscribed to the Google Groups 
"Ansible Project" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to ansible-project+unsubscr...@googlegroups.com.
To post to this group, send email to ansible-project@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/ansible-project/20181208155204.GV4569%40bitfolk.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to