基于Python TextFSM模塊的網絡設備自動化運維方法
本文將給大家介紹一種主流的基于CLI命令行登錄的自動化運維實踐案例,希望能夠給大家帶來幫助。

本文作者:kevinwoo
銳捷網絡技術服務部互聯網服務中心
隨著云計算和SDN技術的發展,數據中心規模越來越大,而網絡架構逐漸向“去堆疊”、“去框”式發展,這就意味著需要維護的交換機數量在成倍的增長。隨著網絡維護規模越來越大,運維人員壓力也成倍增加,依靠傳統的人工維護已不太現實,工具化、自動化運維勢在必行。這就需要運維人員具備一定編程能力,從而通過軟件代替傳統的人工維護。網絡自動化運維理念結合軟件開發領域DevOps理念而產生的NetDevOps概念已逐漸被網絡運維界所接受。
網絡自動化運維,首先要實現網絡設備與自動化運維平臺對接,即通過代碼實現登錄網絡設備并獲取信息。目前常見連接設備的方法有模擬傳統的Telnet/SSH命令登錄、NETCONF、gRPC、OpenFlow協議對接等等。
為了跟上SDN的發展趨勢,各個傳統網絡設備廠商已逐漸開放API接口,比較有代表性的是NETCONF和YANG模型對網絡設備的配置和信息輸出的數據結構化定義。目前銳捷數據中心交換機產品已全面支持NETCONF協議,可適用于和SDN控制器或運維平臺的南向接口對接。而面對網絡工程師在操作網絡設備時習慣于使用CLI命令行的現狀,又有什么樣的案例實踐呢?
本文將給大家介紹一種主流的基于CLI命令行登錄的自動化運維實踐案例,希望能夠給大家帶來幫助。
基于CLI的自動化運維帶來的問題
CLI(Command-Line Interface)是傳統網絡工程師最熟悉的與網絡設備“溝通”的方式,工程師最初學習網絡課程就是要熟悉各類協議的命令行配置、調試。工程師在日常工作中需要結合命令行輸出結果進行排錯,甚至在網絡割接和變更的場景中,需要將變更的操作步驟細化到每一條命令。相比NETCONF等API接口,CLI命令行通常支持的內容更加豐富、靈活。所以在實現網絡自動化運維的過程中,基于CLI的自動化是容易被傳統網絡工程師所接受和執行的。
隨著Python語言在近些年的快速發展,涌現了一批基于Python的優秀開源模塊,比如Ansible、Paramiko、Netmiko、Pexpect等。網絡工程師現在可以編寫簡短的Python腳本就能調用這些模塊實現批量登錄設備執行腳本,但是隨之而來的另一個頭痛的問題是傳統的命令行輸出結果通常是按照適合人類閱讀的方式來呈現的。比如“show”命令的輸出結果包含了大量的空格、縮進、換行等,而且很多命令還存在上下文關聯性。這些命令行輸出結果通常無法被計算機很好地識別,計算機更擅長識別XML、JSON、YAML等結構化數據類型,所以網工在編寫Python腳本時不得不寫一堆正則表達式去“摳”關鍵參數,然而使用復雜的正則表達式又進一步導致代碼可維護性較差。
下面以交換機最基礎的查看VLAN命令為例進行說明。如下圖所示是通過“show vlan”命令的輸出結果,對于同一個VLAN可能會存在多個端口同時放行的情況。關聯的接口數量超過一定數量時,輸出的結果將會拆分成多行顯示,此時,VLAN信息只在第一行顯示,后續幾行內容需要與第一行進行關聯匹配才能得到正確的輸出信息。此時如果需要讀取某個VLAN關聯的所有端口號列表,使用傳統的正則表達式就需要多次調用正則表達式并配合循環邏輯判斷才能實現,整個過程非常繁瑣。

Python常規的數據類型主要是列表或字典格式,如果有工具能夠將設備的上面的輸出結果直接轉化為Python適配的數據類型(如下圖),那么就可以直接使用Python進行處理。

下面就要隆重介紹一下本文標題中提到的TextFSM模塊,它就是用于結構化輸出文本的一個神奇工具。
TextFSM模塊介紹
TextFSM是Google開發的一種開源Python模塊,可以基于模板的狀態機來解析半格式化文本,從而實現對網絡設備CLI輸出信息進行結構化數據處理,最終將文本內容輸出為Python的字典或列表格式(或者是兩者組合)。
詳細內容可以訪問該模塊的GitHub:https://github.com/google/textfsm。
例如,上文中需要將“show vlan”命令的輸出結果進行解析,可以通過調用下面的TextFSM模板將命令輸出進行格式化:

ruijie-templates模塊介紹
雖然有了TextFSM模塊能夠做到結構化解析文本信息,但是每個廠家的CLI輸出內容差異較大,需要每條命令都有相應的模板來適配,導致運維人員還需要投入大量時間去編寫相應的模板。ntc-templates模塊就是為了解決這個痛點誕生的。ntc-templates模塊是由networktocode團隊開發的Python模塊,該模塊基于TextFSM開發,它內置了將近400個TextFSM模板,可以適配主流廠商的CLI輸出結果。
詳細可參考該模塊的GitHub主頁:
https://github.com/networktocode/ntc-templates
ntc-templates模塊內置了index文件,將各類廠商平臺和show命令映射到相應的TextFSM模板文件,每個廠商的不同命令都對應著一個獨立的模板。我們在ntc-templates模塊的基礎上,開發了基于銳捷數據中心交換機產品的模板庫:ruijie-templates。ruijie-templates模板庫是基于TextFSM規則開發,用于適配ntc-templates模塊,可以無縫銜接Netmiko模塊使用。ruijie-templates模塊可以將銳捷數據中心交換機CLI內容進行結構化輸出,輸出結果可以直接用于Python腳本使用。該模塊經過多個銳捷主流數據中心交換機版本測試,覆蓋RG-S6510、RG-S6520、RG-S6910、RG-S6920、RG-N18000-X系列[權5] 產品,目前已支持近50條常用命令解析,后續會逐步更新完善,敬請關注。目前ruijie-templates代碼已托管至GitHub:https://github.com/kevinkrabi/ruijie-templates
下面介紹一下ruijie-templates模塊使用方法。
ruijie-templates模塊使用方法
安裝方法
前置條件:安裝TextFSM庫和ntc-templates庫
方法一:將ruijie-templates并入ntc-templates模板庫(推薦)
方法二:獨立使用ruijie-templates庫,需要設置環境變量,相對復雜(不推薦)
推薦使用方法一將本模板庫合并入ntc-templates模塊使用,具體操作步驟如下:
下載模板庫
git clone git@github.com:kevinkrabi/ruijie-templates.git
模板文件導入ntc-templates
將templates目錄下的所有TextFSM文件導入ntc-templates庫的templates目錄。
以macOS為例:
cp*.textfsm Library/Frameworks/Python.framework/Versions/3.6/lib/Python3.6/site-packages/ntc_templates/templates//index
添加index信息
以macOS為例,index文件所在路徑為:
Library/Frameworks/Python.framework/Versions/3.6/lib/Python3.6/site-packages/ntc_templates/templates/index
找到index文件后用文本編輯軟件打開,將以下內容全部復制粘貼到原始文件末尾即可。
注意:由于ntc-templates模板庫匹配原則,為避免異常情況,以下index條目不建議調整順序!

案例一:使用Netmiko登錄設備獲取輸出信息
說明
該案例使用Netmiko模擬CLI自動化登錄一臺設備,讀取關鍵信息并輸出結果。
Netmiko是基于Paramiko開發的專門用于適配網絡設備的開源Python庫,Netmiko同時集成了TextFSM環境,目前最新版本Netmiko(3.3.3)已支持銳捷產品,device_type參數:ruijie_os
測試目標
使用Netmiko登錄設備,通過執行“show int count rate up”命令獲取設備輸出信息,并將結果以字典方式輸出。

實現代碼

注意關鍵字:device_type': 'ruijie_os',use_TextFSM=True
實現效果

案例二:使用ntc-teamplates將文本結構化輸出
說明
該案例使用ntc-templates模塊,對文本內容進行結構化輸出。
測試目標
以下圖中BGP路由表為例,需要對“show ip bgp”命令執行結果進行結構化輸出。

實現代碼

注意關鍵字:platform='ruijie_os'
實現效果

寫在最后
本文介紹了網絡自動化運維的問題和解決方案,并結合兩個案例介紹了ruijie-template模塊的功能以及使用方法,感興趣的讀者可以參考案例下載測試,當前的命令數量還不能滿足所有業務場景,如您有更好的建議和意見可以留言,希望這個模塊可以幫助到有這方面需求的朋友。
附錄
本文中介紹的相關模塊GitHub地址:
ruijie-template:https://github.com/kevinkrabi/ruijie-templates
TextFSM:https://github.com/google/textfsm
ntc-templates:https://github.com/networktocode/ntc-templates
Netmiko:https://github.com/ktbyers/Netmiko
相關推薦:
相關標簽:
點贊
更多技術博文
-
解密DeepSeek-V3推理網絡:MoE架構如何重構低時延、高吞吐需求?DeepSeek-V3發布推動分布式推理網絡架構升級,MoE模型引入大規模專家并行通信,推理流量特征顯著變化,Decode階段對網絡時度敏感。網絡需保障低時延與高吞吐,通過端網協同負載均衡與擁塞控制技術優化性能。高效運維實現故障快速定位與業務高可用,單軌雙平面與Shuffle多平面組網方案在低成本下滿足高性能推理需求,為大規模MoE模型部署提供核心網絡支撐。
-
#交換機
-
-
高密場景無線網絡新解法:銳捷Wi-Fi 7 AP 與 龍伯透鏡天線正式成團銳捷網絡在中國國際大學生創新大賽(2025)總決賽推出旗艦Wi-Fi 7無線AP RG-AP9520-RDX及龍伯透鏡天線組合,針對高密場景實現零卡頓、低時延和高并發網絡體驗。該方案通過多檔賦形天線和智能無線技術,有效解決干擾與覆蓋問題,適用于場館、辦公等高密度環境,提供穩定可靠的無線網絡解決方案。
-
#無線網
-
#Wi-Fi 7
-
#無線
-
#放裝式AP
-
-
打造“一云多用”的算力服務平臺:銳捷高職教一朵云2.0解決方案發布銳捷高職教一朵云2.0解決方案幫助學校構建統一云桌面算力平臺,支持教學、實訓、科研和AI等全場景應用,實現一云多用。通過資源池化和智能調度,提升資源利用效率,降低運維成本,覆蓋公共機房、專業實訓、教師辦公及AI教學等多場景需求,助力教育信息化從分散走向融合,推動規模化與個性化培養結合。
-
#云桌面
-
#高職教
-
-
醫院無線升級必看:“全院零漫游”六大謎題全解析銳捷網絡的全院零漫游方案是新一代醫療無線解決方案,專為智慧醫院設計,通過零漫游主機和天線入室技術實現全院覆蓋和移動零漫游體驗。方案支持業務擴展全適配,優化運維管理,確保內外網物理隔離安全,并便捷部署物聯網應用,幫助醫院提升網絡性能,支持舊設備利舊升級,降低成本。
-
#醫療
-
#醫院網絡
-
#無線
-