如何编写Cisco交换机show platform命令的TextFSM模板合并多段输出数据
问题原因
- 未给交换机编号字段设置
Key属性:TextFSM的Key属性可以将相同字段值的多行数据合并为同一条记录,你的场景中硬件信息和角色信息分属两个不同的表格,需要用交换机编号作为关联主键合并数据,没有设置Key会导致硬件和角色信息被识别为独立的记录。 - 状态跳转逻辑错误:匹配到第一台交换机的硬件信息后直接跳转到Stack状态,导致第2、3台交换机的硬件信息没有被捕获,对应字段为空。
- 角色行未捕获交换机编号:原角色行的匹配规则没有提取交换机编号,无法将角色、优先级、状态和对应编号的硬件信息关联。
- 缺少无关行处理规则:中间的堆叠MAC地址、表头等无关行没有匹配规则,会导致解析流程异常。
修改后的TextFSM模板
Value Key SWITCH ([1-8]) Value PORTS (\d+) Value MODEL (\S+) Value SERIAL (\S+) Value MAC ([0-9a-f]{4}\.[0-9a-f]{4}\.[0-9a-f]{4}) Value HARDWARE (\S+) Value VERSION (\S+) Value ROLE (Active|Standby|Member) Value PRIORITY ([1-9]|1[0-5]) Value STATE (\S+) Start # 匹配硬件表行,捕获硬件字段,继续处理后续行 ^\s*${SWITCH}\s+${PORTS}\s+${MODEL}\s+${SERIAL}\s+${MAC}\s+${HARDWARE}\s+${VERSION}\s*$ -> Continue # 匹配角色表行,捕获角色相关字段,匹配完成后合并记录输出 ^[* ]?${SWITCH}\s+${ROLE}\s+${PRIORITY}\s+${STATE}\s*$ -> Record # 跳过所有无关行(表头、分割线、堆叠MAC信息等) ^.* -> Continue
模板说明
- 给
SWITCH字段添加Key属性,作为合并硬件和角色信息的关联主键,相同交换机编号的多行数据会自动合并为一条完整记录 - 去掉了错误的状态跳转逻辑,所有行都在Start状态处理,确保所有硬件行都能被捕获
- 角色行的匹配规则增加了对交换机编号的捕获,同时兼容编号前的
*标记(代表主用交换机) - 最后一行规则匹配所有未明确匹配的无关行,避免解析中断
内容的提问来源于stack exchange,提问作者Tes3awy
相关产品推荐
相关产品推荐

