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
相关产品推荐
相关产品推荐

