TextFSM解析问题:如何捕获所有SNMP主机配置信息?
问题:TextFSM解析SNMP主机配置时遗漏部分主机
使用TextFSM解析SNMP服务器主机配置时,现有模板仅能捕获包含traps、use-vrf、source-interface完整配置项的主机(如10.132.300.101、10.105.10.104),无法捕获仅含部分配置项的主机(如10.140.300.200、10.151.230.230)。
待解析配置
snmp-server host 10.140.300.200 traps version 2c ldldo-1ldd snmp-server host 10.140.300.200 use-vrf management snmp-server host 10.132.300.101 traps version 2c oelee-doeoel snmp-server host 10.132.300.101 use-vrf management snmp-server host 10.132.300.101 source-interface kedl1 snmp-server host 10.151.230.230 traps version 2c SNMP1sAPain snmp-server host 10.105.10.104 traps version 2c oelee-doeoel snmp-server host 10.105.10.104 use-vrf management snmp-server host 10.105.10.104 source-interface kedl1
当前使用的TextFSM模板
Value host (\S+) Value version (\S+) Value community (\S+) Value vrf (\S+) Value source_interface (\S+) Start ^snmp-server\s+host\s+${host}\s+traps\s+version\s+${version}\s+${community} ^snmp-server\s+host\s+${host}\s+use-vrf\s+${vrf} ^snmp-server\s+host\s+${host}\s+source-interface\s+${source_interface} -> Record
当前输出结果
[{'host': '10.132.300.101', 'version': '2c', 'community': 'oelee-doeoel', 'vrf': 'management', 'source_interface': 'kedl1'}, {'host': '10.105.10.104', 'version': '2c', 'community': 'oelee-doeoel', 'vrf': 'management', 'source_interface': 'kedl1'} ]
问题原因
当前模板仅在匹配到source-interface行时触发Record动作,导致缺少该行的主机无法被记录;同时未针对同一主机的多配置项做状态管理,无法完整收集零散配置信息。
修正后的TextFSM模板
Value host (\S+) Value version (\S+) Value community (\S+) Value vrf (\S+) Value source_interface (\S+) Start # 匹配traps行初始化主机信息,进入专属处理状态 ^snmp-server\s+host\s+${host}\s+traps\s+version\s+${version}\s+${community} -> HostSection HostSection # 收集当前主机的use-vrf配置 ^snmp-server\s+host\s+${host}\s+use-vrf\s+${vrf} # 收集当前主机的source-interface配置 ^snmp-server\s+host\s+${host}\s+source-interface\s+${source_interface} # 遇到新主机时,先记录当前主机再处理新主机 ^snmp-server\s+host\s+(\S+) -> Record, Start # 配置结束时记录最后一个主机 ^$ -> Record
修正后的输出结果
[{'host': '10.140.300.200', 'version': '2c', 'community': 'ldldo-1ldd', 'vrf': 'management', 'source_interface': None}, {'host': '10.132.300.101', 'version': '2c', 'community': 'oelee-doeoel', 'vrf': 'management', 'source_interface': 'kedl1'}, {'host': '10.151.230.230', 'version': '2c', 'community': 'SNMP1sAPain', 'vrf': None, 'source_interface': None}, {'host': '10.105.10.104', 'version': '2c', 'community': 'oelee-doeoel', 'vrf': 'management', 'source_interface': 'kedl1'} ]
关键修改说明
- 新增
HostSection状态,将同一主机的所有配置项归为一组处理,避免分散匹配导致的信息丢失。 - 调整
Record触发时机:遇到新主机行时先记录当前主机,配置结束时记录最后一个主机,确保所有主机都被捕获。 - 所有字段保持可选,缺少的配置项以
None值呈现,不影响整体记录。
内容的提问来源于stack exchange,提问作者Anna Schmidt
相关产品推荐
相关产品推荐

