Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ansible 具有Jinja2的复变结构_Ansible_Jinja2_Ansible Template - Fatal编程技术网

Ansible 具有Jinja2的复变结构

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中的jinja2模板找出一个复杂的变量结构。我用dictsort和“if”循环尝试了不同的解决方案,但没有看到任何进展。任何帮助都将不胜感激

我正在尝试根据
ansible\u主机名打印
virtual\u ro\u id
。主机名为server1.dc1.comserver2.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。我已经在本地进行了测试,并且成功了:)