亚洲精品88-玩弄人妻少妇500系列-xx69国产-久久久久午夜-9l蝌蚪porny中文自拍-97视频免费看-懂色av蜜臂av粉嫩av-av无码一区二区大桥久未-免费a一级-caoporn国产精品免费公开-亚洲精品成人福利网站app-蜜桃av噜噜一区二区三区策驰-亚洲а∨无码2019在线观看-亚洲欧美国产va在线播放-亚洲精选91

告別運維內耗 全域協同提效 丨 銳捷網絡運維保障經驗分享會
預約直播
無感準入 人物統管 丨 RG-SAM+5.X 新一代高校AI認證平臺發布
預約直播
產品
< 返回主菜單
產品中心
產品
解決方案
< 返回主菜單
解決方案中心
行業
返回主菜單
選擇區域/語言

2025銳捷官網
用戶體驗調研

馬上參與

基于Python TextFSM模塊的網絡設備自動化運維方法

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

  • 發布時間:2021-03-04

  • 點擊量:

  • 點贊:

分享至

我想評論

本文作者: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

相關推薦:

相關標簽:

點贊

更多技術博文

任何需要,請聯系我們

返回頂部

收起
文檔AI助手
文檔評價
該資料是否解決了您的問題?
您對當前頁面的滿意度如何?
不咋滴
非常好
您滿意的原因是(多選)?
您不滿意的原因是(多選)?
您是否還有其他問題或建議?
為了快速解決并回復您的問題,您可以留下聯系方式
郵箱
手機號
感謝您的反饋!
請選擇服務項目
關閉咨詢頁
售前咨詢 售前咨詢
售前咨詢
售后服務 售后服務
售后服務
意見反饋 意見反饋
意見反饋
更多聯系方式
主站蜘蛛池模板: 公妇借种乱h中文字幕| 靠逼视频免费看| 免费看黄视频| 精品国产一级久久| 久久av在线播放| 午夜噜噜噜| 91亚洲精品在线| 在线观看成人| 好爽又高潮了毛片| 精品黄网| 91网址在线| 韩国精品一区二区| 亚洲一视频| 国产福利99| 91视频污在线观看| 大黄专集在线观看| 久久婷婷国产综合| 处破女av一区二区| 小辣椒福利视频导航| 深夜在线| 国产成人无码性教育视频| 夫妻性生活黄色一级片| 甜性涩爱韩国| 中出少妇| www.av小说.com| 欧美亚洲精品一区| 一级淫片试看30分钟| 久操电影网| 日本 国产 欧美| 99久久久无码国产精品不卡| 国产免费av观看| 欧美日韩一区二| 免费精品无码AV片在线观看黄| 亚洲第三十七页| 一个男的操一个女的| 男人操女人的网站| 91嫩草影视| 国产精品久久福利| 国内激情视频| 亚洲第一在线| 女人和男人操| 超碰人人乐| 国产三级三级三级| 狠狠干成人| 欧美大片1688网站| 日韩精品系列| 啪啪的视频| 成人动漫在线观看| 少妇一二三| 女的高潮流时喷水图片大全| 麻豆视频在线观看免费网站| 珍藏艳照36p| 欧美视频五区| 九色视频在线播放| 天堂资源中文字幕| 莫妮卡裸全乳无删减电影情事| 毛片动态图| 成人免费福利视频| 永久免费看黄| 成人午夜视频在线播放| 插插小说| 日韩久久一级片| 九草在线观看| 好色老师| 成人精品久久| 少妇高清精品毛片在线视频| 色午夜av| 亚洲电影一区二区三区| 那里有黄色网址| 99色婷婷| 亚洲第一视频网站| 久激情内射婷内射蜜桃| 色吧av色av| 男女啪啪无遮挡| 能免费看黄色的网站| 91精品久久久久久粉嫩| 九九综合九九| 色综合久久99| 天堂8在线天堂资源bt| 国产一区二区三区在线观看| 欧美精品黑人| 美女尿尿网站| 少妇精品无码一区二区三区| 这里只有精品在线观看视频| 成人123| 欧美老司机| 狠狠操在线播放| 黄网站在线免费| 欧美视频免费| 亚洲影院中文字幕| 久久99色| 欧美一区二区区| 午夜伦伦电影理论片费看| 偷拍视频一区| av亚洲男人天堂| 亚洲乱人伦| 日韩在线不卡视频| 草美女视频| 影音先锋成人资源网|