背景:
我們在使用python輸出網路某些狀態查詢的時候會發現查詢的配置會全部輸出,但是大部分都是對於我們來說是無用的資訊,那麼如何提取我們想要的關鍵資訊呢,答案就是使用TextFSM
首先我們先檢視TextFSM的Github首頁,裡面有各式各樣的模板,但是簡單看下來就會發現以Cisco的裝置模板為主,關於華為的模板只有一下四種。
https://github。com/networktocode/ntc-templates/tree/master/ntc_templates/templates
github。com
圖示
華為的TextFSM模板
1、display_interface_brief
2、display_lldp_neighbor
3、display_temperature
4、dis_version
透過命名即可看出。那麼如果我們想篩選其他命令輸出的結果關鍵字的話就只能透過自己自定義一份模板來使用了。
正文:如何構建一份TextFSM模板
一、TextFSM主體大概分為三個部分
1、Value值 (自定義,內容為命令輸出後我們想要篩選的關鍵字,預設為全大寫)
2、start (正則開始的地方)
3、正則匹配規則
4、EOF (相當於^。* -> Record,結束使用)
二、注意事項:
1、Start語句後面必須以正則表示式^開頭
2、^ 後的$是用來呼叫前面設定好的Value並匹配該變數
3、Start下一行的^前面必須空兩格
三、知識點
1、\d+用來匹配數字,+代表貪婪匹配
2、\w+用來匹配數字+字母,+代表貪婪匹配
3、\s這個特殊序列用來匹配空格字元
四、Value的格式如下
Value [option[,option。。。]] name regex
options可以為空,可選的如下,簡單入門我們可以先空出來,後續根據自己實際情況去看
1、Filldown 如果本條記錄這個值未被識別,用前一個值的值來填充本條記錄這個欄位的值。
2、Key 每條記錄的這個欄位需要全域性唯一
3、Required 這條記錄的這個欄位必須被識別出來才有效被記錄
4、List 這個欄位是列表值(比如allow vlan等 portchannel member)
5、Fillup Filldown的逆操作。
實操部分
1、案例
例如我們想要篩選華為display lldp neighbor brief 內關鍵字 Local Intf、Neighbor Dev、 Neighbor Intf、 Exptime(s)
程式碼部分:
Value LOCAL_INTF (\S+) #對應Local Intf
Value NEIGHBOR_DEV (\S+) #Neighbor Dev
Value NEIGHBOR_INTF (\S+) #Neighbor Intf
Value EXPTIMES (\d+) #Exptime
Start
^${LOCAL_INTF}\s+${NEIGHBOR_DEV}\s+${NEIGHBOR_INTF}\s+${EXPTIMES}\s+ -> Record
EOF
下面又要介紹一個神器
初學階段如果我們使用python程式碼來除錯正則匹配是否正確費時費力,可以透過下面的網址來做測試自己的正則是否成功
http://textfsm。nornir。tech/
textfsm。nornir。tech
透過這個網站就可以快速的學習入門TextFSM模組了
後續:
當我們篩選出我們想要的值後可以透過openpyxl將資料寫入表格,做一些自動化巡檢啦,快去動手做吧。