【问题标题】:Iterate over a YAML object using Jinja template使用 Jinja 模板迭代 YAML 对象
【发布时间】:2022-11-21 13:50:30
【问题描述】:

我有一个包含以下内容的 yaml 文件

interfaces:
   'loopback:local':
        -address: 0.0.0.0
         prefix: 24
         area: 192.168.1.2
         grp: testint
         intname: global
        -address: 0.0.0.0
         prefix: 24
         area: 192.168.1.3
         grp: prodint
         intname: global2

我的神社模板看起来像这样

{% for intf in interfaces %}
  {{ intf }}

  {% for key,value in intf.items() %}
       {{ key }}
       {{ value }}
  {% endfor %}
{% endfor %}

当我尝试访问对象中的元素时,我收到一条错误消息,提示未找到任何元素

【问题讨论】:

  • 请向我们展示您用于呈现此模板的代码。
  • 我确实粘贴了我的神社模板的内容。
  • 您的 YAML 开头无效:-address: 0.0.0.0 破折号和密钥之间缺少一个空格。
  • “我确实粘贴了我的 jinja 模板的内容。”那不是我要求的。我们需要查看您用来呈现此模板的代码——Python 代码或 Ansible 剧本等,以便我们知道您如何阅读 YAML 以及如何将值传递给模板。
  • 我没有将此代码用作 Ansible 剧本或 Python 代码的一部分。这将传递给不同的工具。

标签: yaml jinja2


【解决方案1】:

更有可能你应该尝试这样的事情:

变量:

interfaces:
  - loopback_local:
    - address: 0.0.0.0
      prefix: 24
      area: 192.168.1.2
      grp: testint
      intname: global
    - address: 0.0.0.0
      prefix: 24
      area: 192.168.1.3
      grp: prodint
      intname: global2

jinjafile

{% for intf in interfaces %}
  {% for i in intf.loopback_local %}
    {% for key,value in i.items() %}
       {{ key }}:{{ value }}
    {% endfor %}
  {% endfor %}
{% endfor %}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-10
    • 2017-07-25
    • 1970-01-01
    • 2018-04-05
    • 1970-01-01
    • 2014-10-18
    • 2019-09-02
    • 1970-01-01
    相关资源
    最近更新 更多