如何基于inventory_hostname获取Ansible嵌套变量的值?
解决Ansible中用inventory_hostname获取嵌套变量值的问题
问题核心是点语法无法动态引用变量作为键名,你需要用方括号语法实现动态键的查找:
正确写法示例
方法1:直接引用变量(推荐,更简洁)
xyz已是当前play的vars变量,无需使用lookup插件,直接用方括号传入inventory_hostname变量即可:
- name: Test hosts: server1 gather_facts: false vars: xyz: server1: - abc: 7 tasks: - debug: msg: "{{ xyz[inventory_hostname] }}"
方法2:结合lookup插件使用
如果一定要通过lookup('vars','xyz')获取变量,同样需要搭配方括号语法:
- name: Test hosts: server1 gather_facts: false vars: xyz: server1: - abc: 7 tasks: - debug: msg: "{{ lookup('vars','xyz')[inventory_hostname] }}"
原写法失效原因
你之前用的lookup('vars','xyz').inventory_hostname,会把inventory_hostname当成字面量键名去查找,也就是试图找xyz里键为"inventory_hostname"的内容,而非变量inventory_hostname的实际值(即server1)。方括号语法会先解析变量值,再用该值作为键去匹配嵌套内容。
内容的提问来源于stack exchange,提问作者Vijesh
相关产品推荐
相关产品推荐

