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

如何使用Ansible loop语句正确遍历多个字典列表?

解决Ansible遍历多字典列表的几种方案

你当前的写法会生成嵌套列表,导致item指向整个子列表而非单个用户字典,自然无法访问item.name这类属性。下面给你几种可行的解决办法,不止直接扁平化这一种:

方案1:直接在loop中合并列表

最简洁的方式是用列表加法直接合并两个列表,loop会遍历合并后的所有单个用户字典:

- name: Add several users
  ansible.builtin.user:
    name: "{{ item.name }}"
    state: present
    groups: "{{ item.groups }}"
  loop: "{{ my_team + your_team }}"

方案2:先定义合并后的变量再遍历

如果后续需要复用这个合并后的用户列表,或者涉及的列表数量较多时,先在变量段定义合并后的列表会更清晰:

vars:
  all_team_users: "{{ my_team + your_team }}"

- name: Add several users
  ansible.builtin.user:
    name: "{{ item.name }}"
    state: present
    groups: "{{ item.groups }}"
  loop: "{{ all_team_users }}"

方案3:用flatten过滤器扁平化嵌套列表

如果已经写成了嵌套列表的形式,也可以用flatten过滤器把嵌套结构展开成扁平列表:

- name: Add several users
  ansible.builtin.user:
    name: "{{ item.name }}"
    state: present
    groups: "{{ item.groups }}"
  loop: "{{ [my_team, your_team] | flatten }}"

总结

  • 若只是临时合并两个列表,方案1最直接高效;
  • 若需要复用合并结果或涉及列表数量多,方案2的可读性和可维护性更好;
  • 方案3适合补救已有的嵌套列表结构,属于兜底方案。

内容的提问来源于stack exchange,提问作者N. J

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:52:41