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"
}

这可能是您要找的东西吗?