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官方文档