如何在Jinja2模板中使用嵌套变量

时间:2019-10-10 20:41:07

标签: ansible jinja2

如何在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

1 个答案:

答案 0 :(得分:0)

  

Q:“如何在Jinja模板中使用(某项的)嵌套变量?”

A:这可能是您要寻找的东西吗?

aggdata <- mtcars[, "carb"]
for(i in compratelist){
    print(i)
    data = mtcars %>% group_by(carb) %>% summarise(
    eval(parse(text = paste0(i,"_mean = weighted.mean(eval(parse(text = ", i,")),wt, na.rm = TRUE)")))
    )
    colnames(data)[2] <- i
    data <- as.data.frame(data)
    aggdata <- left_join(aggdata, data,  by = "carb")
  }