You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Jinja2过滤器扁平化Ansible结果并提取所有子元素?

Ansible中用Jinja2过滤器合并嵌套列表

针对你需要合并多个嵌套子列表的需求,用Jinja2的map和flatten两个过滤器就能搞定,不需要嵌套循环。

先看你的示例数据场景

对于你给出的results数组,要提取所有元素中c的子元素并合并成一个列表,过滤器写法如下:

{{ results | map(attribute='c') | flatten }}
  • map(attribute='c'):遍历results里的每个字典,把每个字典的c字段(也就是子列表)提取出来,得到一个包含多个子列表的新列表
  • flatten:把这个嵌套的列表结构“拍平”,变成一个包含所有子元素的单层列表

再适配你的实际find模块场景

你的oldLogs.results里,每个元素是find模块返回的结果,其中files字段存储了对应路径下找到的文件列表。要把所有路径下的文件合并成一个列表,修改后的debug任务如下:

- name: print files
  debug:
    msg: "{{ oldLogs.results | map(attribute='files') | flatten }}"

如果还需要提取文件的具体属性(比如文件路径),可以再加一层map过滤器:

- name: print file paths
  debug:
    msg: "{{ oldLogs.results | map(attribute='files') | flatten | map(attribute='path') | list }}"

内容的提问来源于stack exchange,提问作者ataraxis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.21 12:48:25