在Ansible中为多个任务定义一个通知块

时间:2017-01-12 12:32:44

标签: ansible

是否可以为多个任务定义一个notify块?

在下一个代码段notify: restart tomcat中定义了3次,但我只想定义它一次并且#34;应用"到任务列表

- name : template context.xml
  template:
    src: context.xml.j2
    dest: /usr/share/tomcat/conf/context.xml
    group: tomcat
    mode: 0664
  notify: restart tomcat

- name : copy server.xml
  copy:
    src: server.xml
    dest: /etc/tomcat/server.xml
    group: tomcat
    mode: 0664
  notify: restart tomcat

- name : copy atomikos-integration-extension
  copy:
    src: atomikos-integration-extension-3.7.1-20120529.jar
    dest: /usr/share/tomcat/ext-libs/
    group: tomcat
    mode: 0664
  notify: restart tomcat

3 个答案:

答案 0 :(得分:9)

不,你不能。

Notify设置触发器以根据任务的状态运行指定的处理程序。任务块没有"状态"在Ansible中,因此您无法为块定义notify

此外,它不会在功能上改变任何东西,只影响视觉吸引力(我会通过模糊事物而不是简化来声称)。无论触发了多少任务,处理程序只运行一次。

答案 1 :(得分:0)

从 Ansible v2.11 (https://github.com/ansible/ansible/blame/stable-2.11/changelogs/CHANGELOG-v2.11.rst#L599) 开始

现在可以在块上设置通知,并且 import_tasks https://github.com/ansible/ansible/pull/73572/commits/899f39800cb74e0e38010aba30087672819b2097

所以,用块包装你的任务并在块上设置通知!

答案 2 :(得分:-3)

如果您想特别想要一个处理程序用于三个任务,那么这是一个小的解决方法。

  

在你的主要角色

- include: role2.yml
  

在角色2中

- name : template context.xml
  template:
    src: context.xml.j2
    dest: /usr/share/tomcat/conf/context.xml
    group: tomcat
    mode: 0664

- name : copy server.xml
  copy:
    src: server.xml
    dest: /etc/tomcat/server.xml
    group: tomcat
    mode: 0664

- name : copy atomikos-integration-extension
  copy:
    src: atomikos-integration-extension-3.7.1-20120529.jar
    dest: /usr/share/tomcat/ext-libs/
    group: tomcat
    mode: 0664

- name: running handler for above tasks
  debug: msg='running handler for all three'
  notify: restart tomcat