【问题标题】:Complex Variable Structure with Jinja2Jinja2 的复杂变量结构
【发布时间】:2020-03-23 19:33:42
【问题描述】:

我试图在 Ansible 中使用 jinja2 模板找出一个复杂的变量结构。我在“for”循环中使用 dictsort 和“if”循环尝试了不同的解决方案,但我没有看到任何进展。任何帮助将不胜感激。

我正在尝试根据ansible_hostname 打印virtual_ro_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 %}

我通常会收到语法错误或模板没有获取任何值。提前致谢。

【问题讨论】:

    标签: ansible jinja2 ansible-template


    【解决方案1】:

    鉴于库存

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

    这可能是您要找的吗?

    【讨论】:

    • 非常感谢您的回复@vladimir-botka。我已经在本地测试过它并且有效:)
    猜你喜欢
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多