是否可以为多个任务定义一个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
答案 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