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

如何将Ansible中复杂的列表字典变量转换为简单列表

解决Ansible嵌套字典转用户/权限格式列表的问题

方案1:在Loop中直接转换

无需提前生成完整列表,通过dict2items+subelements过滤器直接展开嵌套结构,再拼接字符串:

- task: user printing access
  vars:
    useraccess:
      superdude:
        - lpr
        - lpc
        - lpadmin
      nonprivuser:
        - lpr
  loop: "{{ useraccess | dict2items | subelements('value') }}"
  debug:
    msg: "{{ item.0.key }}/{{ item.1 }}"
  • dict2items:将原字典转换为包含key(用户名)和value(权限列表)的字典列表
  • subelements('value'):遍历每个用户的权限列表,把单个权限拆分为独立条目,此时item结构为[用户信息字典, 单个权限]
  • item.0.key提取用户名,item.1提取对应权限,拼接成用户名/权限格式

方案2:提前生成目标列表再Loop

如果需要先得到你期望的格式列表,可通过Jinja2模板生成:

- task: user printing access
  vars:
    useraccess:
      superdude:
        - lpr
        - lpc
        - lpadmin
      nonprivuser:
        - lpr
    formatted_useraccess: >-
      {% set result = [] %}
      {% for username, perms in useraccess.items() %}
        {% for perm in perms %}
          {% do result.append(username ~ '/' ~ perm) %}
        {% endfor %}
      {% endfor %}
      {{ result }}
  loop: "{{ formatted_useraccess }}"
  debug:
    msg: "{{ item }}"

这段代码会先遍历原字典的每个用户和对应权限,拼接成目标格式后存入formatted_useraccess,之后直接循环该列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 13:55:04