Ansible 处理程序读取本地事实
Ansible handler read local fact
我有一个 Ansible 剧本,可以在一组服务器中安装数量可变的应用程序。要安装应用程序,许多顺序任务必须 运行,并且由于可能有多个应用程序,我使用 with_items:
循环执行它们
我还注册了本地事实中的任何更改,如果在应用程序 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 }}"
处理程序 我需要以下方面的帮助。它正在跳过 "Restart application" 任务:
- name: Restart application
debug: var=myapps_toberestarted_{{ item.appName }}
with_items: "{{ deployApp }}"
when: myapps_toberestarted_{{ item.appName }} == 'true'
最后是我的 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" }
true
/false
(在任务结果的 changed
变量中注册,因此也在 item.changed
中)是布尔值而不是字符串,因此您可以定义条件在处理程序中这样:
when: myapps_toberestarted_{{ item.appName }}
使用 == 'true'
时,您将其与始终给出否定结果的字符串进行比较。
我有一个 Ansible 剧本,可以在一组服务器中安装数量可变的应用程序。要安装应用程序,许多顺序任务必须 运行,并且由于可能有多个应用程序,我使用 with_items:
我还注册了本地事实中的任何更改,如果在应用程序 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 }}"
处理程序 我需要以下方面的帮助。它正在跳过 "Restart application" 任务:
- name: Restart application
debug: var=myapps_toberestarted_{{ item.appName }}
with_items: "{{ deployApp }}"
when: myapps_toberestarted_{{ item.appName }} == 'true'
最后是我的 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" }
true
/false
(在任务结果的 changed
变量中注册,因此也在 item.changed
中)是布尔值而不是字符串,因此您可以定义条件在处理程序中这样:
when: myapps_toberestarted_{{ item.appName }}
使用 == 'true'
时,您将其与始终给出否定结果的字符串进行比较。