Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Filter 如何根据ansible/jinja2中属性的存在情况筛选列表?_Filter_Ansible_Jinja2 - Fatal编程技术网

Filter 如何根据ansible/jinja2中属性的存在情况筛选列表?

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

大家好

我有两个类似这样的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 ] | 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子句上,因为如果主机停机或无法访问,则前面的任务无法为主机填充此变量。