TTP解析华为import-route可选route-policy配置的模板编写方法
TTP解析华为VPN路由引入配置的正确模板
场景说明
使用TTP(Template Text Parser)解析华为设备配置时,待解析的ipv4-family vpn-instance配置段内容如下:
ipv4-family vpn-instance VPN1 import-route static import-route direct route-policy TESTE #
该段内的import-route配置存在两种格式:
- 仅指定要引入的路由协议类型
- 指定协议类型的同时,绑定对应的route-policy路由策略
需要解析输出结构化的import_routes列表,要求:
- 未绑定路由策略的条目,仅保留
protocol字段记录协议类型 - 绑定路由策略的条目,额外增加
rp字段存储路由策略名称
预期输出结构:
import_routes: [ { "protocol": "static" }, { "protocol": "direct", "rp": "TESTE", } ]
原有模板的问题
之前编写的TTP模板无法实现预期效果,原模板如下:
<group name="vpn_import_route*"> import-route {{ protocol }} import-route {{ protocol }} route-policy {{ rp }} </group>
失败原因是TTP行匹配时优先匹配更短的规则,带route-policy的行会被第一条规则命中,把direct route-policy TESTE整体赋值给protocol字段,无法拆分出路由策略参数。
可用模板方案
利用TTP的可选匹配语法,将route-policy相关配置段标记为可选匹配,直接指定输出列表名为import_routes即可,模板内容如下:
<group name="import_routes*"> import-route {{ protocol }} {{ _start_ }}route-policy {{ rp | _end_ }} </group>
语法说明:_start_和_end_包裹的内容为可选匹配段,行内存在该片段时自动提取rp字段,不存在时跳过该部分匹配,不会影响protocol字段的正常取值。
如果需要兼容行尾可能存在的其他多余配置字符,可以使用带忽略规则的版本:
<group name="import_routes*"> import-route {{ protocol }} {{ _start_ }}route-policy {{ rp }}{{ _end_ }} {{ re(".*") | ignore }} </group>
传入待解析配置后,该模板可直接输出符合要求的结构化解析结果。
内容的提问来源于stack exchange,提问作者Paulo Henrique Peres
相关产品推荐
相关产品推荐

