【问题标题】:Jinja2 For Loop over a YAML List of DictionariesJinja2 For 循环 YAML 字典列表
【发布时间】:2019-03-20 02:43:23
【问题描述】:

我是 Jinja2 的新手,我遇到了一个无论我怎么尝试都无法解决的问题。我正在尝试使用 Jinja2 模板和我创建的一些变量文件为设备创建配置文件。当我为我的 YAML 变量文件指定字典列表时,我似乎根本无法让它工作。

模板:

{% for id in VLANS %}
vlan {{ id.id }}
  name {{ id.name }}
  vn-segment {{ id.vni }}
{% endfor %}

变量文件:

VLANS:
  - id: 9
    name: "VLAN9"
    vni: 109
  - id: 10
    name: "VLAN10"
    vni: 110
  - id: 11
    name: "VLAN11"
    vni: 111
  - id: 12
    name: "VLAN12"
    vni: 112

【问题讨论】:

  • 看起来不错。你能分享你得到的错误或输出文件吗?也可能有助于分享您的游戏中的模板任务

标签: templates ansible jinja2 nexus


【解决方案1】:

看起来不错。下面的戏

    - name: Template
      template:
        src: template.j2
        dest: test.txt

给予

    shell> cat test.txt 
    vlan 9
      name VLAN9
      vn-segment 109
    vlan 10
      name VLAN10
      vn-segment 110
    vlan 11
      name VLAN11
      vn-segment 111
    vlan 12
      name VLAN12
      vn-segment 112 

带模板

    shell> cat template.j2
    {% for item in VLANS %}
    vlan {{ item.id }}
      name {{ item.name }}
      vn-segment {{ item.vni }}
    {% endfor %}

【讨论】:

  • 我的问题是我的脚本中有一个 VLAN 位于更远的位置,我没有为其指定 VNI,因为它没有参与我的 VXLAN EVPN 结构。看到您使用 item 而不是 id 对我有很大帮助,因为我有很多关于 Jinja 的知识,谢谢!我的模板任务与您的完全相同,但我之前在 Ansible 中收到的错误如下:“msg”:“AnsibleUndefinedVariable: 'dict object' has no attribute 'vni'” 我将尝试创建一个 if对于没有定义 vni 的任何 VLAN,我的 for 循环中的语句。再次感谢!!
  • 如何处理未定义变量的简单选项是default filter。示例:item.vni|default('NOT DEFINED')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-05
  • 1970-01-01
  • 1970-01-01
  • 2021-06-30
  • 2022-11-17
  • 2021-07-06
相关资源
最近更新 更多