Ansible 具有Jinja2的复变结构
我正试图用Ansible中的jinja2模板找出一个复杂的变量结构。我用dictsort和“if”循环尝试了不同的解决方案,但没有看到任何进展。任何帮助都将不胜感激 我正在尝试根据Ansible 具有Jinja2的复变结构,ansible,jinja2,ansible-template,Ansible,Jinja2,Ansible Template,我正试图用Ansible中的jinja2模板找出一个复杂的变量结构。我用dictsort和“if”循环尝试了不同的解决方案,但没有看到任何进展。任何帮助都将不胜感激 我正在尝试根据ansible\u主机名打印virtual\u ro\u id。主机名为server1.dc1.com和server2.dc1.com,与dc2相同。下面给出了var文件 datacenters: dc1: server1: - virtual_ro_id: "60" server2:
ansible\u主机名打印virtual\u ro\u id
。主机名为server1.dc1.com和server2.dc1.com,与dc2相同。下面给出了var文件
datacenters:
dc1:
server1:
- virtual_ro_id: "60"
server2:
- virtual_ro_id: "60"
dc2:
server1:
- virtual_ro_id: "61"
server2:
- virtual_ro_id: "61"
我的模板语法如下所示:
{% for dc in lookup('dict', datacenters) %}
{% set dc_name=ansible_fqdn.split(.)[1] %}
{% if 'dc' == dc_name %}
ID: {{ dc.ansible_hostname.virtual_ro_id }}
{% endif %}
{% endfor %}
我通常得到语法错误或者模板没有得到值。提前感谢。鉴于库存
shell> cat hosts
server1.dc1.com
server2.dc1.com
server1.dc2.com
server2.dc2.com
任务
-调试:
var:datacenters[mydomain][myhost][0]['virtual\u ro\u id']
变量:
myhost:“{{inventory_hostname.split('.').0}”
mydomain:“{{inventory_hostname.split('.').1}”
给予
ok:[server1.dc1.com]=>{
“数据中心[mydomain][myhost][0]['virtual_ro_id']”:“60”
}
确定:[server2.dc1.com]=>{
“数据中心[mydomain][myhost][0]['virtual_ro_id']”:“60”
}
确定:[server1.dc2.com]=>{
“数据中心[mydomain][myhost][0]['virtual_ro__id']”:“61”
}
确定:[server2.dc2.com]=>{
“数据中心[mydomain][myhost][0]['virtual_ro__id']”:“61”
}
这可能就是你想要的吗?非常感谢你的回复@vladimir botka。我已经在本地进行了测试,并且成功了:)