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

Ansible Jinja2如何获取嵌套字典的第n个值?

问题与解决方案

需求

当cluster_input.user_input的值为1时,将vcenter_cluster设置为cluster_info.clusters中K8S对应的集群数据。

当前Playbook代码

- set_fact:
    vcenter_cluster: "{{ cluster_info.clusters.values[cluster_input.user_input] }}"   

- debug:
    var:  vcenter_cluster

目标数据结构(cluster_info.clusters)

{
    "DMZ": {
        "datacenter": "dc"
    },
    "K8S": {
        "datacenter": "dc"
    },
    "Win": {
        "datacenter": "dc"
    }
}

解决方案

直接用values[索引]取值的方式不够可控,更稳妥的做法是先提取字典的键为有序列表,通过索引拿到目标键后,再从字典中获取对应值:

分步写法(更清晰)

- set_fact:
    # 将字典的键转为列表,顺序为 ["DMZ", "K8S", "Win"]
    cluster_keys: "{{ cluster_info.clusters.keys() | list }}"
- set_fact:
    # 把输入转为整数类型,通过索引取目标键,再获取对应集群数据
    vcenter_cluster: "{{ cluster_info.clusters[cluster_keys[cluster_input.user_input | int]] }}"

- debug:
    var: vcenter_cluster

合并写法(更简洁)

- set_fact:
    vcenter_cluster: "{{ cluster_info.clusters[(cluster_info.clusters.keys() | list)[cluster_input.user_input | int]] }}"

- debug:
    var: vcenter_cluster

当cluster_input.user_input为1时,会通过索引取到K8S键,最终vcenter_cluster被设置为{"datacenter": "dc"}。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 17:13:28