Python使用TextFSM 解析H3C交换机的LLDP信息

1.通过SSH来登录交换机,然后执行display lldp neighbor-information list
2.使用textfsm解析交换机返回的结果,结果是如下格式:

[对端设备名, 本地端口号, 对端端口号]

 

3.代码
a.textfsm解析规则模板文件(h3c_lldp_list.yaml):

Value device_id (\S+)
Value local_intf (\w+[\/|\d]{3})
Value remote_inft (\w+[\/|\d]{3})

Start
  ^System Name          Local Interface Chassis ID      Port ID
  ^${device_id}\s+${local_intf}\s+\S+\s+${remote_inft} -> Record

EOF

b.需要执行的python代码文件:

from netmiko import ConnectHandler
import textfsm

### 使用netmiko SSH登录交换机 ###
h3c_device = {
    'device_type': 'hp_comware',
    'ip': '172.16.1.102',
    'username': 'admin',
    'password': 'admin',
}

connect = ConnectHandler(**h3c_device)
lldp_output = connect.send_command('display lldp neighbor-information list')
print('交换机执行命令返回的结果:')
print(lldp_output)
print('--------------------------------------------')

### 使用TextFSM解析交换机的输出文本 ###

# textfsm读取 匹配规则模板h3c_lldp_list.yaml
fsm = textfsm.TextFSM(open('h3c_lldp_list.yaml'))
# 将交换机的LLDP输出信息 传给textfsm进行解析
fsm_results = fsm.ParseText(lldp_output)
print('textfsm解析结果:')
print(fsm_results)

 

4.代码执行后输出的结果:

交换机执行命令返回的结果:
Chassis ID : * -- -- Nearest nontpmr bridge neighbor
             # -- -- Nearest customer bridge neighbor
             Default -- -- Nearest bridge neighbor
System Name          Local Interface Chassis ID      Port ID
sw1                  GE1/0           7425-8ae3-e836  GigabitEthernet1/0         
sw3                  GE2/0           7425-8ae3-5b88  GigabitEthernet1/0         
--------------------------------------------
textfsm解析结果:
[['sw1', 'GE1/0', 'GigabitEthernet1/0'], ['sw3', 'GE2/0', 'GigabitEthernet1/0']]

Process finished with exit code 0

 

5.参考
Python netmiko 管理 network devices 简例
TextFSM官方文档

上一篇:多厂商***系列之十四:H3C_***+实验【4个企业常用类型】


下一篇:websocket初识