Jinja2 的复杂变量结构
Complex Variable Structure with Jinja2
我试图在 Ansible 中使用 jinja2 模板找出一个复杂的变量结构。我已经在 "for" 循环中尝试了使用 dictsort 和 "if" 循环的不同解决方案,但我没有看到任何进展。任何帮助将不胜感激。
我正在尝试根据 ansible_hostname
打印 virtual_ro_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
任务
- debug:
var: datacenters[mydomain][myhost][0]['virtual_ro_id']
vars:
myhost: "{{ inventory_hostname.split('.').0 }}"
mydomain: "{{ inventory_hostname.split('.').1 }}"
给予
ok: [server1.dc1.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "60"
}
ok: [server2.dc1.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "60"
}
ok: [server1.dc2.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "61"
}
ok: [server2.dc2.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "61"
}
这可能是您要找的东西吗?
我试图在 Ansible 中使用 jinja2 模板找出一个复杂的变量结构。我已经在 "for" 循环中尝试了使用 dictsort 和 "if" 循环的不同解决方案,但我没有看到任何进展。任何帮助将不胜感激。
我正在尝试根据 ansible_hostname
打印 virtual_ro_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
任务
- debug:
var: datacenters[mydomain][myhost][0]['virtual_ro_id']
vars:
myhost: "{{ inventory_hostname.split('.').0 }}"
mydomain: "{{ inventory_hostname.split('.').1 }}"
给予
ok: [server1.dc1.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "60"
}
ok: [server2.dc1.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "60"
}
ok: [server1.dc2.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "61"
}
ok: [server2.dc2.com] => {
"datacenters[mydomain][myhost][0]['virtual_ro_id']": "61"
}
这可能是您要找的东西吗?