求助:如何用for循环实现{{routemapnumber}}每次递增5的配置
实现路由映射编号每次递增5的方案
从你给出的模板代码(使用{{...}}语法,看起来像是Jinja2/Ansible模板)来看,要让{{routemapnumber}}从5开始,每次递增5,这里有两种可行的实现方式:
方式一:手动维护计数器
如果你的路由映射条目是固定的,直接初始化一个变量,每次使用后手动加5即可,语法简单直观:
{% set routemapnumber = 5 %} route-map RDS_FILTER permit {{ routemapnumber }} match ip address {{ item.aclnumber }} set ip next-hop verify-availability 10.4.21.157 1 track {{ item.slanumber }} set ip next-hop 192.168.2.58 {% set routemapnumber = routemapnumber + 5 %} route-map RDS_FILTER permit {{ routemapnumber }} match ip address 109 set ip next-hop verify-availability 10.4.21.157 1 track 1 set ip next-hop 192.168.2.58 {% set routemapnumber = routemapnumber + 5 %} route-map RDS_FILTER permit {{ routemapnumber }} match ip address 108 {% set routemapnumber = routemapnumber + 5 %} route-map RDS_FILTER permit {{ routemapnumber }} match ip address 107 set ip next-hop 192.168.0.2 {% set routemapnumber = routemapnumber + 5 %} route-map RDS_FILTER permit {{ routemapnumber }}
方式二:使用带步长的for循环(更适合动态条目)
如果你的路由映射条目是动态生成的(比如从列表/变量中读取),用for循环配合计数器会更优雅。假设你把所有路由映射的配置内容存在一个名为route_entries的列表里:
{% for entry in route_entries %} route-map RDS_FILTER permit {{ 5 + loop.index0 * 5 }} {{ entry.config }} {% endfor %}
对应的列表定义(以Ansible的YAML为例)可以是这样:
route_entries: - config: "match ip address {{ item.aclnumber }} set ip next-hop verify-availability 10.4.21.157 1 track {{ item.slanumber }} set ip next-hop 192.168.2.58" - config: "match ip address 109 set ip next-hop verify-availability 10.4.21.157 1 track 1 set ip next-hop 192.168.2.58" - config: "match ip address 108" - config: "match ip address 107 set ip next-hop 192.168.0.2" - config: ""
关键说明:
loop.index0是Jinja2的内置变量,从0开始计数,所以5 + loop.index0 *5会依次生成5、10、15...刚好符合你的需求。- 如果习惯从1开始计数,也可以用
loop.index,公式改成5 + (loop.index -1)*5,结果是一样的。 - 固定条目用方式一最直接,动态条目推荐方式二,后续增删条目时不需要手动调整计数器。
内容的提问来源于stack exchange,提问作者techkid
相关产品推荐
相关产品推荐

