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

Ansible中如何通过命令行变量组合访问字典值

动态通过变量指定字典名与键名访问Ansible字典值

问题背景

配置文件中定义如下字典:

foo:
  key1: value1
  key2: value2
  key3: value3
# …

启动playbook时通过命令行传入变量:

--extra-vars "k1=key1 k2=key2 dict_name=foo"

尝试通过拼接dict_name和k1的方式访问对应值时,仅得到字面字符串foo.key1,无法获取实际的value1。

解决方法

1. 使用vars lookup插件(推荐方案)

通过vars lookup插件先根据变量名获取对应的字典,再通过键名取值:

- debug:
    msg: "{{ lookup('vars', dict_name)[k1] }}"

执行后会输出msg: value1,完全匹配需求。

2. 借助hostvars访问主机变量

如果目标字典属于主机变量范畴,可通过以下方式访问:

- debug:
    msg: "{{ hostvars[inventory_hostname][dict_name][k1] }}"

3. 先缓存目标字典再复用

如果后续需要多次使用该字典,可先将其存入变量:

- set_fact:
    target_dict: "{{ lookup('vars', dict_name) }}"
- debug:
    msg: "{{ target_dict[k1] }}"

原理说明

直接拼接字符串{{ dict_name ~ '.' ~ k1 }}只会生成字符串字面量,Ansible不会自动将其解析为变量引用。而lookup('vars', dict_name)会根据dict_name的值(此处为foo),动态找到对应的字典变量,之后再通过k1的值(此处为key1)获取对应的值。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 04:18:18