【问题标题】:How to use nested variables in jinja2 templates如何在 jinja2 模板中使用嵌套变量
【发布时间】:2019-10-10 20:41:07
【问题描述】:

如何在 jinja 模板中使用项目的嵌套变量?我正在运行 ansible 来为网络交换机生成配置。

试图让if语句基于bgp_peer_version,

我有以下变量文件

 ---
 switches:
   - ansible_hostname: Core1
     bgp_neighbors:
       - bgp_peer_version: both
         bgp_peer_ipv4: 10.1.1.1
         bgp_peer_ipv6: 2001::1
         bgp_vrf:
       - bgp_peer_version: v4
         bgp_peer_ipv4: 10.1.1.2
         bgp_peer_ipv6: 
         bgp_vrf:

   - ansible_hostname: Core2
     bgp_neighbors:
       - bgp_peer_version: 'both'
         bgp_peer_ipv4: 10.1.1.2
         bgp_peer_ipv6: 2001::1
         bgp_vrf:
       - bgp_peer_version: 'v4'
         bgp_peer_ipv4: 10.1.1.2
         bgp_peer_ipv6:
         bgp_vrf: 

到目前为止有以下代码

{% if item[bgp_peer_version] == "v4" %}
BGP Peer
IPv4 address {{ bgp_peer_ipv4 }}
{% else %}
BGP Peer
IPv4 address {{ bgp_peer_ipv64 }}
IPv6 address {{ bgp_peer_ipv6 }}
{% endif %}

我正在尝试构建一个模板,该模板使用每个交换机的 bgp 邻居中的变量。我正在寻找第一个模板的输出。 模板 1 输出

BGP 对等体 IPv4 地址 10.1.1.1 IPv6 地址 2001::1 BGP对等体 IPv4 地址 10.1.1.1

模板 2 输出

BGP 对等体 IPv4 地址 10.1.1.2 IPv6 地址 2001::2 BGP对等体 IPv4 地址 10.1.1.1

【问题讨论】:

    标签: ansible jinja2


    【解决方案1】:

    问:“如何在 jinja 模板中使用嵌套变量(项目的)?”

    A:这可能是你要找的吗?

    {% for item1 in switches %}
    {% for item in item1 %}
    {% if item[bgp_peer_version] == "v4" %}
    result is V4
    {% else %}
    result if both
    {% endif %}
    {% endfor %}
    {% endfor %}
    

    【讨论】:

    • 编辑问题,将其设为mcve,添加预期结果,正确格式化并删除此评论。
    猜你喜欢
    • 1970-01-01
    • 2015-12-08
    • 2017-04-25
    • 1970-01-01
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2016-07-18
    相关资源
    最近更新 更多