如何在Ansible中用CLI变量值作为host_vars变量名取值?
在Ansible中通过变量值引用另一个变量的属性
当然可以实现这个需求,Ansible提供了两种常用的方式来间接引用目标变量:
方法1:使用vars内置变量
vars包含当前作用域内的所有变量,你可以通过变量名的字符串索引它,进而获取对应变量的属性。针对你的场景,正确写法如下:
{{ vars[thing]['does'] }}
方法2:使用hostvars变量
如果变量定义在host_vars中,也可以通过hostvars引用,用inventory_hostname指代当前主机:
{{ hostvars[inventory_hostname][thing]['does'] }}
完整Playbook示例
- name: 测试变量间接引用 hosts: all tasks: - name: 输出目标变量的does属性 debug: msg: "当前thing的does属性值是: {{ vars[thing]['does'] }}"
运行时传入参数:
ansible-playbook your_playbook.yml -e="thing=this"
为什么之前的写法无效?
{{ thing['does'] }}:thing是你传入的字符串"this",字符串本身没有does属性,所以无法得到预期结果。{{ {{ thing }}['does'] }}:这种嵌套模板写法不符合Ansible语法规则,属于语法错误。
内容的提问来源于stack exchange,提问作者stevieb
相关产品推荐
相关产品推荐

