如何让Ansible正确解析嵌套变量(变量内引用其他变量)
问题核心原因
你遇到的报错本质是Jinja2 模板语法不允许双大括号{{ }}嵌套,在{{ }}内部直接引用变量名即可,不需要额外加模板定界符。
正确实现方案
分两种需求场景对应写法:
1. 动态访问字典foo的键
直接在方括号内写变量名即可,不需要额外加定界符:
- ansible.builtin.debug: msg: "{{ foo[key] }}"
2. 动态拼接变量名获取foo_bar的值
需要先把固定前缀和变量值拼接成完整的变量名字符串,再从vars全局变量字典中取值:
- ansible.builtin.debug: msg: "{{ vars['foo_' ~ key] }}"
其中~是Jinja2的字符串拼接运算符,也可以用lookup方式实现:{{ lookup('vars', 'foo_' ~ key) }}
之前写法报错的原因
{{ foo[{{ key }}] }}:双大括号嵌套违反Jinja2语法,模板解析时识别到第二个{直接抛出语法错误{{ foo_{{ key }} }}:同样是双大括号嵌套问题,且变量名不能直接在模板定界符内拼接{{ foo['{{ key }}'] }}:把{{ key }}当成了字面量字符串,相当于查找foo字典中键名为"{{ key }}"的元素,自然不存在
两种正确写法运行后均会输出你预期的baz值。
内容的提问来源于stack exchange,提问作者β.εηοιτ.βε
相关产品推荐
相关产品推荐

