Ansible 如何使用jinja2获取名为var的var值

Ansible 如何使用jinja2获取名为var的var值,ansible,jinja2,ansible-template,Ansible,Jinja2,Ansible Template,我正在使用ansible模板一个jinja2文件 IP:{{ ansible_eth0.ipv4.address }} IP:{{ ansible_docker0.ipv4.address }} IP:{{ ansible_{{ ka_interface }}.ipv4.address }} 网络适配器有一个名为ka_接口的变量 但您将在第三个变量中得到错误 (IP:{{ansible}{{ka_interface}}.ipv4.address}}) 似乎jinja2模板中的var可以嵌套。不

我正在使用ansible模板一个jinja2文件

IP:{{ ansible_eth0.ipv4.address }}
IP:{{ ansible_docker0.ipv4.address }}
IP:{{ ansible_{{ ka_interface }}.ipv4.address }}
网络适配器有一个名为ka_接口的变量

但您将在第三个变量中得到错误
(IP:{{ansible}{{ka_interface}}.ipv4.address}})


似乎jinja2模板中的var可以嵌套。

不可能用jinja2语法构造动态变量

但是,您可以通过内置的
vars
hash对象访问任何播放绑定变量:

{{ vars['ansible_' + ka_interface]['ipv4']['address] }}

编辑:固定哈希语法

不可能使用Jinja2语法构造动态变量

但是,您可以通过内置的
vars
hash对象访问任何播放绑定变量:

{{ vars['ansible_' + ka_interface]['ipv4']['address] }}

编辑:固定哈希语法

遵循Chris Lam的建议, 它起作用了

-名称:测试
shell:echo{{vars['ansible\'+kau接口]['ipv4']['address']}
标签:测试

听从Chris Lam的建议, 它起作用了

-名称:测试
shell:echo{{vars['ansible\'+kau接口]['ipv4']['address']}
标签:测试

致命:[k8sprod5->localhost]:失败!=>{“changed”:false,“failed”:true,“msg”:“AnsibleError:模板化字符串时模板错误:应为标记“打印语句结束”,获得“{”。字符串:subjectAltName=DNS:{inventory\u hostname}},DNS:{{ansible\u nodename}”,DNS:kubernetes,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.cluster.local,IP:10.96.0.1,IP:{{k8s_-api_-vip},IP:{{ansible_-default_-ipv4.address}\nIP:{{ansible_-eth0.ipv4.address}\nIP:{ansible_-docker0.ipv4.address}\n}请将代码以文本形式粘贴到您的问题中,然后突出显示并按Ctrl+K。这允许我们将代码复制并粘贴到我们的IDE中,并帮助识别问题。请阅读以了解需要包含哪些代码总计:[k8sprod5->localhost]:失败!=>{“更改”:false,“失败”:true,“msg”:AnsibleError:template error在模板化字符串时出错:应为标记'end of print statement',获得“{”.string:subjectAltName=DNS:{inventory_hostname}},DNS:{{ansible_nodename},DNS:kubernetes,DNS:kubernetes.default.svc,DNS:kubernetes.default.svc.cluster.local,IP:10.96.0.1,IP:{k8s\U api\U vip},IP:{{ansible_default_ipv4.address}\nIP:{{ansible_eth0.ipv4.address}\nIP:{{ansible_docker0.ipv4.address}\n{{{ansible_{kau interface}.ipv4.address}\n\n}请将代码以文本形式粘贴到您的问题中,然后突出显示并按Ctrl+K这允许我们将代码复制并粘贴到我们的IDE中,并帮助识别问题。请阅读以了解您需要包括哪些代码-名称:test1 shell:echo{{ansible_eth0.ipv4.address}}标记:test-名称:test2 shell:echo{vars['ansible\'+ka\'u interface+'.ipv4.address']}}标记:testfatal:[k8sprod4]:失败!=>{“失败”:true,“msg”:字段“args”有一个无效值,该值似乎包含一个未定义的变量。错误是:“dict object”没有属性u'ansible_eth0.ipv4.address”\n\n错误似乎出现在“/usr/local/lvzj/github/ansible kubeadm/roles/glusterfs/tasks/main.yml”:第48行第3列,但可能\n位于文件的其他位置,具体取决于确切的语法问题。\n\n出现问题的行似乎是:\n\n\n-name:test2\n^here\n“}抱歉,我没有注意到错误的语法。更新了我的答案。-name:test1 shell:echo{{ansible\u eth0.ipv4.address}标记:test-name:test2 shell:echo{vars['ansible\u+ka\u interface+'.ipv4.address']}标记:testfatal:[k8sprod4]:FAILED!=>{“FAILED”:true,“msg”:字段“args”有一个无效值,该值似乎包含一个未定义的变量。错误是:“dict object”没有属性u'ansible_eth0.ipv4.address”\n\n错误似乎出现在“/usr/local/lvzj/github/ansible kubeadm/roles/glusterfs/tasks/main.yml”:第48行第3列,但可能\n位于文件的其他位置,具体取决于确切的语法问题。\n\n有问题的行似乎是:\n\n\n-name:test2\n^here\n“}对不起,我没有注意到错误的语法。更新了我的答案。不是复制答案,而是将Chris的解决方案标记为“已接受”(在答案旁边打勾),而不是复制答案,将Chris的解决方案标记为“已接受”(在答案旁边打勾)