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

如何在Ansible循环中将subelements生成的item.1转为item?

解决Ansible中subelements循环的item.1转item及附件筛选问题

方法一:通过include_tasks传递变量重命名

直接在调用子任务时,将item.1(附件信息)赋值给子任务内使用的item变量,同时可按需保留页面信息:

主任务代码:

- name: 调用S3对象信息查询任务
  include_tasks: get_s3_object_info.yml
  loop: "{{ var.json.results | subelements('children.attachment.results') }}"
  vars:
    item: "{{ item.1 }}"  # 将附件信息重命名为子任务中的item
    page_info: "{{ item.0 }}"  # 可选:保留页面信息,子任务中可通过page_info访问页面标题等

子任务get_s3_object_info.yml代码:

- name: 查询S3对象信息
  amazon.aws.s3_object_info:
    region: "{{ region }}"
    bucket_name: "{{ bucket }}"
    object_name: "file/path/{{ item.title }}"
  register: s3_object_result
# 后续可直接使用item.history访问附件的历史属性

方法二:预处理数据生成扁平的附件列表

通过json_query过滤器直接提取所有附件信息(可同时保留关联页面信息),生成独立的附件列表后循环:

- name: 提取所有附件及关联页面信息
  set_fact:
    all_attachments: >-
      {{ var.json.results | json_query('[].{page_title: title, attachments: children.attachment.results}') |
         json_query('[].attachments[] | [].{page_title: @.^.page_title, title: title, history: history}') }}

- name: 调用S3对象信息查询任务
  include_tasks: get_s3_object_info.yml
  loop: "{{ all_attachments }}"

子任务中直接使用{{ item.title }}、{{ item.history }},若需要页面标题则用{{ item.page_title }}。

方法三:简化循环对象(丢失页面信息)

如果不需要页面信息,可通过map('last')过滤器直接提取subelements结果中的附件部分:

- name: 调用S3对象信息查询任务
  include_tasks: get_s3_object_info.yml
  loop: "{{ var.json.results | subelements('children.attachment.results') | map('last') | list }}"

子任务中直接使用{{ item.title }}和{{ item.history }}即可。


附件类型筛选

如果你的Confluence API返回数据中包含附件类型标识(比如type: attachment字段),可通过json_query筛选出仅附件类型的项:

假设数据结构中每个子项带有type字段,筛选代码示例:

- name: 筛选仅附件类型的子项
  set_fact:
    filtered_attachments: >-
      {{ var.json.results | json_query('[].children.*[?type==`attachment`].results[]') | flatten }}

若当前数据已明确是children.attachment下的结果,说明已经是附件类型,无需额外筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:52:58