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

7x50 SR路由器MPLS接口TextFSM模板解析问题求助

7x50 SR路由器MPLS接口表TextFSM模板问题排查与解决

问题背景

解析7x50 SR路由器MPLS接口表CLI输出时,需要捕获包括Admin Groups和SRLG Groups在内的所有信息,并将这两组数据存储为列表。但原模板无法处理组值跨多行的场景,导致两组数据互相污染,出现错误的合并结果。

期望输出

[    ...,    {        "NAME": "SR1",        "IFNAME": "toSR3                              ",        "PORTID": "1/1/c1/1:0",        "ADMINSTATE": "Up",        "IPV4OPERATIONALSTATE": "Up",        "IPV6OPERATIONALSTATE": "Down",        "METRIC": "None",        "ADMINGROUPS": [            "Red",            "Blue"        ],        "SRLGGROUPS": [            "One",            "Three",            "Two"        ]    }]

实际错误输出

[    ...,    {        "NAME": "SR1",        "IFNAME": "toSR3                              ",        "PORTID": "1/1/c1/1:0",        "ADMINSTATE": "Up",        "IPV4OPERATIONALSTATE": "Up",        "IPV6OPERATIONALSTATE": "Down",        "METRIC": "None",        "ADMINGROUPS": [            "Red",            "Blue",            "Three",            "Two"        ],        "SRLGGROUPS": [            "Blue",            "One",            "Three",            "Two"        ]    }]

CLI输入示例

System Name            : SR1

===============================================================================

MPLS Interfaces

===============================================================================

Interface                           Port-id           Adm  Opr(V4/V6) TE-
                                                                    metric
-------------------------------------------------------------------------------

system                              system            Up   Up/Down    None
  Admin Groups                      None
  SRLG Groups                       None
toSR2                               1/1/c3/1          Up   Up/Down    None
  Admin Groups                      red
  SRLG Groups                       seven
toSR3                               1/1/c1/1:0        Up   Up/Down    None
  Admin Groups                      Red
                                    Blue
  SRLG Groups                       One
                                    Three
                                    Two
-------------------------------------------------------------------------------

Interfaces : 3

===============================================================================

原模板问题分析

原模板未区分Admin Groups和SRLG Groups的捕获状态,匹配额外组值的正则表达式是通用的,导致跨多行的组值被错误地同时添加到两个列表中,造成数据污染。

原模板代码:

Value Filldown NAME (\S+)
Value Required IFNAME (.*)
Value PORTID (\S+)
Value ADMINSTATE (Up|Down)
Value IPV4OPERATIONALSTATE (Up|Down)
Value IPV6OPERATIONALSTATE (Up|Down)
Value METRIC (\S+)
Value List ADMINGROUPS (\S+)
Value List SRLGGROUPS (\S+)

Start
  ^System Name            : ${NAME}
  ^MPLS Interfaces$$ -> MplsInterfaces

MplsInterfaces
  ^\S -> Continue.Record
  ^${IFNAME}\s+${PORTID}\s+${ADMINSTATE}\s+${IPV4OPERATIONALSTATE}/${IPV6OPERATIONALSTATE}\s+${METRIC}$$
  ^\s+Admin Groups\s+${ADMINGROUPS}$$
  ^\s+${ADMINGROUPS}$$ -> Continue
  ^\s+SRLG Groups\s+${SRLGGROUPS}$$
  ^\s+${SRLGGROUPS}$$

EOF

解决方案:状态转换式TextFSM模板

通过状态转换明确区分不同组的捕获阶段,解决跨多行组值的匹配问题:

Value Filldown NAME (\S+)
Value Required IFNAME (\S+)
Value PORTID (\S+)
Value ADMINSTATE (Up|Down)
Value IPV4OPERATIONALSTATE (Up|Down)
Value IPV6OPERATIONALSTATE (Up|Down)
Value METRIC (\S+)
Value List ADMINGROUPS (\S+)
Value List SRLGGROUPS (\S+)

Start
  ^System Name            : ${NAME}
  ^MPLS Interfaces$$ -> MplsInterfaces

MplsInterfaces
  ^${IFNAME}\s+${PORTID}\s+${ADMINSTATE}\s+${IPV4OPERATIONALSTATE}/${IPV6OPERATIONALSTATE}\s+${METRIC}$$
  ^\s+Admin Groups\s+${ADMINGROUPS} -> AdminGroups

AdminGroups
  ^\s+${ADMINGROUPS}$$
  ^\s+SRLG Groups\s+${SRLGGROUPS} -> SrlgGroups

SrlgGroups
  ^\s+${SRLGGROUPS}$$
  ^\S+\s+\S+\s+(Up|Down)\s+(Up|Down)/(Up|Down)\s+\S+$$ -> Continue.Record
  ^${IFNAME}\s+${PORTID}\s+${ADMINSTATE}\s+${IPV4OPERATIONALSTATE}/${IPV6OPERATIONALSTATE}\s+${METRIC}$$ -> MplsInterfaces
  ^-+ -> Record
  ^=+ -> End

模板工作原理

  1. 状态逐级转换:依次进入MplsInterfaces(捕获接口基础信息)→AdminGroups(捕获Admin Groups跨多行值)→SrlgGroups(捕获SRLG Groups跨多行值)状态,明确区分当前捕获的对象,避免数据混淆。
  2. 接口分隔处理:核心逻辑是在SrlgGroups状态中识别下一个接口行:
    • 第一行匹配接口行格式,先记录当前接口的完整数据,同时保留当前行供后续解析;
    • 第二行正式捕获接口行并切换回MplsInterfaces状态,开始处理下一个接口。
  3. 收尾逻辑:匹配分隔线^-+时记录最后一个接口数据,匹配等号线^=+时结束解析,避免捕获无关的CLI内容。

内容的提问来源于stack exchange,提问作者user1326

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 13:14:52