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

Ansible遍历嵌套列表成员并保留所属团队名称的最优方法

你当前选用的subelements过滤器就是这个场景的最优实现,它是Ansible官方为「遍历父级列表的同时迭代每个父元素的嵌套子列表、且保留父级上下文」设计的标准方案。

你现在的代码问题出在变量取值不对:subelements过滤器返回的每一个循环项item是二元数组:

  • item.0 是当前迭代的父级host完整对象,可以从这里拿到团队名称item.0.team.name
  • item.1 是当前迭代的team.members里的单个成员对象,成员账号、密码都存在这里

最简正确写法

- name: 'create users'
  nislab.ctfd.ctfd_user:
    url: '{{ url }}'
    ctfd_api_key: '{{ ctfd_api_key }}'
    name: '{{ item.1.name }}'
    password: '{{ item.1.password }}'
    state: '{{ state }}'
    # 如需关联团队直接取父级属性即可
    # team: '{{ item.0.team.name }}'
  loop: "{{ hosts | subelements('team.members') }}"

高可读性优化写法

如果后续要频繁引用父级属性,可以用loop_control给循环项起别名降低理解成本:

- name: 'create users'
  nislab.ctfd.ctfd_user:
    url: '{{ url }}'
    ctfd_api_key: '{{ ctfd_api_key }}'
    name: '{{ member.name }}'
    password: '{{ member.password }}'
    team: '{{ host_info.team.name }}'
    state: '{{ state }}'
  loop: "{{ hosts | subelements('team.members') }}"
  loop_control:
    loop_var: item_pair
  vars:
    host_info: "{{ item_pair.0 }}"
    member: "{{ item_pair.1 }}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:54:02