Why are the Ansible handlers not firing

ansibleansible-playbook

I have a playbook that installs tomcat and then deploys some web applications. The web application deploy task(s) notifies a handler to restart tomcat. But the handler never fires. I am using a handler to manage the tomcat service because I understand from the docs that handlers should only fire once even if called multiple times. Am I missing something obvious?

This is the playbook:

---
- hosts: all
  become: true
  become_user: root
  roles:
  - role: common
  - role: nginx
  - role: tomcat
  - role: launchpad
  - role: manager
  - role: reporting
  handlers:
  - include: /tomcat/handlers/etitomcat_service_ctrl.yml

This is one of the roles that deploys the web app:

---
- name: Remove the current installation of LaunchPad
  file: path={{etitomcat_path}}/webapps/{{launchpad_module}} state=absent

- name: Remove the current war file for {{launchpad_module}}
  file: path={{etitomcat_path}}/webapps/{{launchpad_module}}.war state=absent     

- name: Download the latest snapshot of LaunchPad and deploy it to {{etitomcat_path}}
  get_url: url={{launchpad_source_url}} dest={{etitomcat_path}}/webapps/{{launchpad_module}}.war mode=0744 owner={{etitomcat_user}} group={{etitomcat_group}} force=yes
  notify: "restart_eti_tomcat"

This is the handler:

  - name: "Restart ETI Tomcat"
    service: name=etitomcat state=restarted
    become: true
    become_user: root
    listen: "restart_eti_tomcat"

  - name: "Start ETI Tomcat"
    service: name=etitomcat state=started
    become: true
    become_user: root
    listen: "start_eti_tomcat"

  - name: "Stop ETI Tomcat"
    service: name=etitomcat state=stopped
    become: true
    become_user: root
    listen: "stop_eti_tomcat" 

Best Answer

Adding static: yes should resolve this issue when using Ansible >= 2.1.

handlers:
- include: /tomcat/handlers/etitomcat_service_ctrl.yml
  static: yes

Take a look at this Github issue, the linked google groups thread might contain valuable information as well.

edit

As pointed out by @rhythmicdevil the documentation notes:

You cannot notify a handler that is defined inside of an include. As of Ansible 2.1, this does work, however the include must be static.

Related Topic