Filter 如何根据ansible/jinja2中属性的存在情况筛选列表?
大家好 我有两个类似这样的ansible任务,运行在清单文件中的“workernodes”组上:Filter 如何根据ansible/jinja2中属性的存在情况筛选列表?,filter,ansible,jinja2,Filter,Ansible,Jinja2,大家好 我有两个类似这样的ansible任务,运行在清单文件中的“workernodes”组上: - name: count remote files find: paths: "{{ data_path }}" register: exported_files - name: sum up number of remote files set_fact: sum_of_exported_files: "{{ groups[ workernodes ] | ma
- name: count remote files
find:
paths: "{{ data_path }}"
register: exported_files
- name: sum up number of remote files
set_fact:
sum_of_exported_files: "{{ groups[ workernodes ] | map('extract', hostvars, 'exported_files') | map(attribute='matched') | sum }}"
run_once: yes
只要所有节点都可用,这就可以正常工作。但是如果find任务计数没有在任何workernodes上运行,那么我在sum-up任务中会出错。此节点上没有导出的_文件变量,因此映射到属性失败
如何筛选extarcted hostvars列表中导出的_files属性的存在
请启发我
谢谢。添加此
何时:
子句如何:
when: groups[ workernodes ] | map('extract', hostvars, 'exported_files')|list|first|length > 0"
大家好
最后我自己找到了(非常简单的)答案:
sum_of_exported_files: "{{ groups[ workernodes ] | map('extract', hostvars, 'exported_files') | select("defined") | map(attribute='matched') | select("number") | sum }}"
感谢isabellema帮助我仔细思考。错误发生在
|map(attribute='matched')
或|sum
上吗?它发生在map子句上,因为如果主机停机或无法访问,则前面的任务无法为主机填充此变量。