0
我有一个Ansible操作手册在一组服务器中安装可变数量的应用程序。安装的应用程序,一些顺序任务必须运行,并且因为可能有多个应用程序,我遍历他们with_items:
Ansible处理器读取本地事实
我也以这样一种方式,如果三个任务都登记在一个地域的实际情况的任何变化在应用程序A上执行,应用程序A被标记。
我遇到处理程序问题。它应该读取这些本地事实并重新启动任何已被标记的应用程序,但我无法实现此目的。我的处理程序只是跳过,但调试显示标志的本地事实。
我剧本与此类似:
---
- name: Ensure the application's jar file exists
copy:
src: '{{ item.appName }}/{{ item.jarName }}'
dest: '{{ AppsRootFolder }}/{{ item.appName }}/{{ item.jarName }}'
register: task
with_items: '{{ deployApp }}'
notify: Restart application
- name: Registering App for later restart
set_fact:
myapps_toberestarted_{{ item.item.appName }}: "{{ item.changed }}"
with_items: "{{ task.results }}"
when: "{{ item.changed }}"
- name: Ensure the application's conf file exists
template:
src: '{{ item.confName }}.j2'
dest: '{{ AppsRootFolder }}/{{ item.appName }}/{{ item.confName }}'
register: task
with_items: '{{ deployApp }}'
notify: Restart application
- name: Registering App for later restart
set_fact:
myapps_toberestarted_{{ item.item.appName }}: "{{ item.changed }}"
with_items: "{{ task.results }}"
when: "{{ item.changed }}"
的处理器我需要帮助如下。它跳过 “重新启动应用程序” 任务:
- name: Restart application
debug: var=myapps_toberestarted_{{ item.appName }}
with_items: "{{ deployApp }}"
when: myapps_toberestarted_{{ item.appName }} == 'true'
而且finaly我group_vars
AppsRootFolder: /opt/Apps
deployApp:
- { appName: "API", jarName: "api.jar", confName: "api.conf" }
- { appName: "Demo", jarName: "demo.jar", confName: "demo.conf" }
- { appName: "Another", jarName: "another.jar", confName: "another.conf" }
你说得对,谢谢。现在它按预期工作。实际上,我还添加了一个默认设置,以避免其他应用程序未被修改的错误,因此,本地事实未设置**'when:myapps_toberestarted _ {{item.appName}} |默认([])'**这可以防止像这样的错误:'在评估条件'var时出错是未定义的' – felichas