Ansible处理程序读取本地事实

Ansible处理程序读取本地事实,ansible,ansible-facts,ansible-handlers,Ansible,Ansible Facts,Ansible Handlers,我有一个Ansible playbook,可以在一组服务器中安装不同数量的应用程序。要安装应用程序,必须运行许多顺序任务,并且由于可能有多个应用程序,我使用和\u项循环它们: 我还以这样一种方式注册本地事实中的任何更改:如果在应用程序a上执行了三个任务,则会标记应用程序a 我和处理程序有问题。它应该读取这些本地事实并重新启动任何已标记的应用程序,但我无法实现这一点。我的处理程序只是跳过,但debug显示带有标志的本地事实 我的剧本与此类似: --- - name: Ensure the appl

我有一个Ansible playbook,可以在一组服务器中安装不同数量的应用程序。要安装应用程序,必须运行许多顺序任务,并且由于可能有多个应用程序,我使用
和\u项循环它们:

我还以这样一种方式注册本地事实中的任何更改:如果在应用程序a上执行了三个任务,则会标记应用程序a

我和处理程序有问题。它应该读取这些本地事实并重新启动任何已标记的应用程序,但我无法实现这一点。我的处理程序只是跳过,但debug显示带有标志的本地事实

我的剧本与此类似:

---
- 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 }}"
处理程序我需要以下方面的帮助。它正在跳过“重新启动应用程序”任务:

最后是我的
组变量

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
变量,因此也在
项中。changed
)是布尔值而不是字符串,因此您可以通过以下方式在处理程序中定义条件:

when: myapps_toberestarted_{{ item.appName }}

使用
==“true”
将其与一个字符串进行比较,该字符串将始终给出一个否定的结果。

您是对的,谢谢。现在,它的工作如预期。实际上,我还添加了一个默认值,以避免其他未修改的应用程序出错,因此当:myapps_toberestreated_u{{item.appName}}默认值([])时,本地事实未设置为
,这防止了类似这样的错误:
计算条件时出错
变量未定义

when: myapps_toberestarted_{{ item.appName }}