You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Python TTP解析器兼容解析单文件中Nokia SR VPLS混合配置

单TTP模板兼容两种诺基亚SR EVPN配置实现方案

完全可以通过单份TTP模板同时覆盖两种配置场景,无需拆分多套模板,核心利用TTP的可选匹配、默认值赋值、并行规则匹配能力即可实现兼容。

两种配置核心差异对齐

先明确两类配置的非对齐点,所有差异点全部做可选匹配处理即可:

  • bgp配置段差异:场景1无嵌套子配置,场景2嵌套route-distinguisher、route-target出入方向参数
  • bgp-evpn下mpls配置段差异:
    • 场景1:无mpls参考标识,auto-bind-tunnel为单行格式auto-bind-tunnel resolution any,无control-word配置
    • 场景2:携带mpls参考标识,auto-bind-tunnel为嵌套块结构,包含resolution-filter隧道类型过滤列表、resolution参数,额外配置control-word

具体模板调整方法

1. bgp段配置可选嵌套匹配

不要将rd、rt参数设置为必匹配项,通过可选group+默认值配置,适配空bgp段场景,模板片段参考:

<group name="vpls_service">
 service vpls {{ service_id }} {{ service_name }}
  <group name="bgp" set="rd=None, rt_import=[], rt_export=[]">
   bgp
    route-distinguisher {{ rd }}
    route-target import {{ rt_import | joinmatches }}
    route-target export {{ rt_export | joinmatches }}
   exit
  </group>

上述配置中,当bgp段无任何子配置时,TTP会自动给rd、rt_import、rt_export字段赋预设的默认值,不会出现匹配失败的问题。

2. mpls段非通用参数设为可选

将mpls参考标识、control-word两个仅场景2存在的参数加可选标记?,同时配置和设备默认行为一致的默认值:

<group name="bgp_evpn">
   bgp-evpn
    evi {{ evi_id }}
    <group name="mpls">
     mpls {{ mpls_ref? | default(None) }}
      no shutdown {{ admin_status | set("up") }}
      control-word {{ cw_flag? | set("enabled") | default("disabled") }}
      <!-- 并行匹配两种格式的auto-bind-tunnel -->
      auto-bind-tunnel resolution {{ abt_res_simple? }}
      <group name="auto_bind_tunnel" set="resolution=None, res_filter=[]">
       auto-bind-tunnel
        resolution {{ resolution }}
        resolution-filter {{ res_filter | joinmatches }}
       exit
      </group>
     exit
    </group>
   exit
  </group>
 exit
</group>

3. auto-bind-tunnel双格式兼容处理

上述模板中对auto-bind-tunnel写了两个并行的匹配规则,TTP会根据实际配置结构自动命中对应规则:

  • 遇到单行格式配置时,会将resolution的值存入abt_res_simple字段
  • 遇到嵌套块格式配置时,会进入auto_bind_tunnel嵌套组,分别解析resolution和resolution-filter参数

可以通过TTP内置宏做解析后字段归一化,避免输出字段分裂,宏参考:

<macro>
def normalize_abt(data):
    for svc in data:
        mpls_sec = svc.get("bgp_evpn", {}).get("mpls", {})
        # 归一化单行格式的auto-bind-tunnel字段
        if mpls_sec.get("abt_res_simple"):
            abt_sec = mpls_sec.setdefault("auto_bind_tunnel", {})
            abt_sec["resolution"] = mpls_sec.pop("abt_res_simple")
            abt_sec["res_filter"] = []
    return data
</macro>

验证要点

  • 测试时将两种格式的配置混放在同一份测试文件中执行解析,确认无匹配遗漏、无字段缺失
  • 多值参数(route-target、resolution-filter)使用joinmatches过滤器时,确认无值场景下输出空列表、多值场景下正确输出列表
  • 所有可选参数的默认值需要和诺基亚SR设备的默认配置行为对齐,比如无control-word配置时默认值为disabled,避免解析结果和实际设备行为不一致

内容的提问来源于stack exchange,提问作者H.Sheng

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 15:42:10