Ansible 回路和复杂条件下的Jinja2

Ansible 回路和复杂条件下的Jinja2,ansible,yaml,jinja2,Ansible,Yaml,Jinja2,以下是yaml模板: static_routes: - network: 1.1.1.0 mask: 255.255.255.0 next_hop: 19.19.3.10 - network: 7.7.32.0 mask: 255.255.255.0 next_hop: 7.7.2.1 - network: 172.16.110.0 mask: 255.255.255.248 intf: FastE

以下是yaml模板:

 static_routes:
    - network: 1.1.1.0
      mask: 255.255.255.0
      next_hop: 19.19.3.10
    - network: 7.7.32.0
      mask: 255.255.255.0
      next_hop: 7.7.2.1
    - network: 172.16.110.0
      mask: 255.255.255.248
      intf: FastEthernet0/1.1
      next_hop: 172.16.110.3
    - network: 172.16.120.0
      mask: 255.255.255.248
      intf: FastEthernet0/1.2
      next_hop: 172.16.120.3
    - network: 150.1.7.4
      mask: 255.255.255.255
      intf: FastEthernet0/0.1
      next_hop: 19.19.3.10
      vrf: Site-1
      glob: global
    - network: 150.1.7.4
      mask: 255.255.255.255
      next_hop: 19.19.3.10
      vrf: Site-1
    - network: 150.1.7.4
      mask: 255.255.255.255
      next_hop: 19.19.3.10
      intf: FastEthernet0/0.1
      glob: global
      vrf: Site-2
    - network: 150.1.7.4
      mask: 255.255.255.255
      next_hop: 19.19.3.10
      vrf: Site-2
Jinja2模板(注意重复的if语句,并想知道是否有一种方法可以将其组合在一个模板中以获得下面所需的输出)

最终输出如下所示:

ip route 1.1.1.0 255.255.255.0 19.19.3.10
ip route 7.7.32.0 255.255.255.0 7.7.2.1
ip route 172.16.110.0 255.255.255.248 FastEthernet0/1.1 172.16.110.3
ip route 172.16.120.0 255.255.255.248 FastEthernet0/1.2 172.16.120.3
ip route vrf Site-1 150.1.7.4 255.255.255.255 FastEthernet0/0.1 19.19.3.10 global
ip route vrf Site-1 150.1.7.4 255.255.255.255 19.19.3.10
ip route vrf Site-2 150.1.7.4 255.255.255.255 FastEthernet0/0.1 19.19.3.10 global
ip route vrf Site-2 150.1.7.4 255.255.255.255 19.19.3.10

这段代码可以工作,但是想知道是否有一种方法可以简化这种场景的Jinja2条件

如果您不介意额外的空间:

{% for r in static_routes %}
ip route {{ r.vrf | default('') }} {{ r.network }} {{ r.mask }} {{ r.intf | default('') }} {{ r.next_hop }} {{ r.glob | default('') }}
{% endfor %}
用于:

{% for r in static_routes %}
ip route {{ r.vrf | default('') }} {{ r.network }} {{ r.mask }} {{ r.intf | default('') }} {{ r.next_hop }} {{ r.glob | default('') }}
{% endfor %}
ip route  1.1.1.0 255.255.255.0  19.19.3.10
ip route  7.7.32.0 255.255.255.0  7.7.2.1
ip route  172.16.110.0 255.255.255.248 FastEthernet0/1.1 172.16.110.3
ip route  172.16.120.0 255.255.255.248 FastEthernet0/1.2 172.16.120.3
ip route Site-1 150.1.7.4 255.255.255.255 FastEthernet0/0.1 19.19.3.10 global
ip route Site-1 150.1.7.4 255.255.255.255  19.19.3.10
ip route Site-2 150.1.7.4 255.255.255.255 FastEthernet0/0.1 19.19.3.10 global
ip route Site-2 150.1.7.4 255.255.255.255  19.19.3.10