Python使用TextFSM 解析H3C交換機的LLDP信息

1.經過SSH來登陸交換機,而後執行display lldp neighbor-information list
2.使用textfsm解析交換機返回的結果,結果是以下格式:python

[對端設備名, 本地端口號, 對端端口號]

 

3.代碼
a.textfsm解析規則模板文件(h3c_lldp_list.yaml):git

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代碼文件:github

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.代碼執行後輸出的結果:ide

交換機執行命令返回的結果:
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官方文檔google

相關文章
相關標籤/搜索