为什么我的Ansible处理程序没有解雇?

时间:2016-08-08 19:09:18

标签: ansible ansible-playbook

我有一个安装tomcat的playbook,然后部署一些Web应用程序。 Web应用程序部署任务通知处理程序重新启动tomcat。但处理程序永远不会触发。我正在使用一个处理程序来管理tomcat服务,因为我从文档中了解到,即使多次调用,处理程序也应该只触发一次。我错过了一些明显的东西吗

这是剧本:

---
- 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

这是部署网络应用的角色之一:

---
- 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"

这是处理程序:

  - 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" 

3 个答案:

答案 0 :(得分:5)

使用 Range("X2").Select ActiveCell.FormulaR1C1 = "1" 时,添加static: yes应解决此问题。

Ansible >= 2.1

看一下这个Github issue,链接的google groups thread也可能包含有价值的信息。

修改

正如@rhythmicdevil所指出的那样documentation注意到:

  

您无法通知在include中定义的处理程序。从Ansible 2.1开始,这确实有效,但是include必须是静态的。

答案 1 :(得分:3)

这可能不是重点,但我会添加这个,因为问题标题相当宽,这是我在谷歌搜索时发现的问题,下面是我遇到的特定问题的解决方案。

在相应任务中注册更改时,请考虑处理程序。即使您以最高的详细程度运行游戏,也会有 NO 条目,这样就可以解决这个问题。

RUNNING HANDLER [base : somehandler ] *********************** 
Unchanged:  Skipping

当它们在更改后被触发时,它将在所有任务完成后执行。

由于任务通知了你,无论他们是否真的做了什么,而且处理程序保持安静,这确实很有用。

例如,如果您有一个任务 A ,那么您已经运行了几次,直到它按预期运行。

然后连接处理程序 B 以重新启动服务,除非您擦除操作 A 正在执行或更改任务,否则不会发生任何事情。

只要任务 A 未注册任何更改,它就不会触发处理程序 B

无论如何,这是ansible 2.2.1的行为。

答案 2 :(得分:0)

您可以添加任务和post_tasks部分,而不是handlers,希望它适合您:

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