在網(wǎng)管員日常工作中,修改網(wǎng)絡(luò)設(shè)備配置是一件很常見的工作,一般工作流程是網(wǎng)管員首先給出網(wǎng)絡(luò)配置修改方案,并通過測試環(huán)境驗證。
然后提交網(wǎng)絡(luò)維護修改申請,將經(jīng)過測試環(huán)境驗證的配置腳本化,使用該腳本進行自動升級,或者雙人上機操作變更。修改完成后,業(yè)務(wù)相關(guān)人員進行業(yè)務(wù)驗證。
最后由安全監(jiān)督崗位同事對網(wǎng)絡(luò)配置修改的相關(guān)方案、申請流程、業(yè)務(wù)驗證進行事后監(jiān)督。
雖然以上流程涉及到眾多的手工操作,但是如果能在這一流程中適當(dāng)使用一些自動化工具或者腳本,能極大地提高工作效率,減少操作失誤的風(fēng)險。
圖1 使用SHOW MASTER STATUS命令
下面筆者將會使用的一些網(wǎng)絡(luò)管理自動化腳本,希望能起到拋磚引玉作用。
本文主要解決從配置文件收集網(wǎng)絡(luò)基礎(chǔ)資料的問題。
從以上工作流程可以看到,修改了網(wǎng)絡(luò)設(shè)備的配置后是需要修改網(wǎng)絡(luò)基礎(chǔ)資料的。
比如,已經(jīng)把某一個端口從vlan 10更改為vlan 20,那么基礎(chǔ)資料中也應(yīng)該修改為20。
在沒有自動化腳本前,每次都是網(wǎng)管員手工對資料進行修改,這是一件重復(fù)而繁雜的工作。
如果能從網(wǎng)絡(luò)配置文件和網(wǎng)絡(luò)命令結(jié)果中自動抽取相關(guān)數(shù)據(jù)構(gòu)建網(wǎng)絡(luò)基礎(chǔ)資料文檔,這會極大地提高資料的準(zhǔn)確性,提升網(wǎng)管員的工作效率。
筆者單位有4個下屬單位,每級單位都有若干交換機和路由器,為自動化構(gòu)建這些設(shè)備的基礎(chǔ)資料文檔。
現(xiàn)建立5個文件夾,把本單位和管轄4個單位的設(shè)備配置文件保存在對應(yīng)文件夾中,同時建立一個文件夾來保存若干命令執(zhí)行的結(jié)果。
完成這些基礎(chǔ)性工作后,將設(shè)計一個小程序來自動分析這些文件,從而產(chǎn)生基礎(chǔ)資料文檔。
這個自動化分析程序的難點在于分析配置文件和命令執(zhí)行結(jié)果,而這些文件是半結(jié)構(gòu)化文檔,分析半結(jié)構(gòu)化文檔可以使用正則表達式。
但是,完全使用正則表達式要求極高的編程能力,并且分析這些文檔還涉及到狀態(tài)機原理。
能很好地把正則表達式和狀態(tài)機原理結(jié)合起來的工具有TextFSM庫。
這是一個由Google公司提供的開源Python庫,其依賴性小,易于安裝和部署,只需要提供獲取數(shù)據(jù)的模板文件和設(shè)備配置文件內(nèi)容就可以返回數(shù)據(jù)。
一般地,輸入的模板文件由正則表達式和狀態(tài)機組成,輸出的結(jié)果可以轉(zhuǎn)化為csv格式或者Excel格式。
通過上述分析,自動化程序的工作原理圖如圖1。整個流程分為4部分。
第一部分:
從配置YAML文件中讀取基本目錄、設(shè)備配置文件存放目錄、命令執(zhí)行結(jié)果文件存放目錄、模板文件存放目錄。
第二部分:
把設(shè)備配置文件讀取到IOSDevice類中,并按單位保存。
第三部分:
調(diào)用模板文件,根據(jù)提取數(shù)據(jù)的需要,按單位或者網(wǎng)絡(luò)設(shè)備來分析設(shè)備配置文件,提取相關(guān)數(shù)據(jù)。
第四部分:
根據(jù)需要,把提取出來的數(shù)據(jù)保存到CSV或者Excel文件。
初始化函數(shù),初始化時從setting_file中讀取配置文件,配置文件是yaml格式。
然后通過_getAllDevices函 數(shù) 把所有的配置文件讀取到IOSDevices對象中,以便供后面提取資料時使用。
Get Result From Temp late File主要功能是獲取單臺設(shè)備的數(shù)據(jù)。
Get All Result From Temp late File主要功能獲取多臺設(shè)備的數(shù)據(jù)。
它們都返回數(shù)據(jù)的名稱和相關(guān)數(shù)據(jù),然后通過Write To CSV函數(shù)保存數(shù)據(jù)。
如果需要保存為Excel格式,除了保存為CSV文件,然后在Excel中打開外,還可以使用Xlxs Writer這個庫直接把結(jié)果輸出到Excel文件中,其保存腳本參考如下:
接下來的重點就是模板文件了,以下的模板是獲取網(wǎng)絡(luò)設(shè)備端口的相關(guān)信息:
編寫模板主要由三部分組成:數(shù)據(jù)定義、狀態(tài)機/規(guī)則定義和匹配后的動作。
模板第一部分定義需要提取的數(shù)據(jù),以Value關(guān)鍵字開頭,后接數(shù)據(jù)的名稱。最后一部分為“數(shù)據(jù)類型”,定義格式為:Value[option[,option...]] name regex
模板第二部分以Start開頭,后接各項正則表達式,需要提取的數(shù)據(jù)需要使用${}修飾,這部分是結(jié)合正則表達式和狀態(tài)機的關(guān)鍵,其定義格式如下:stateName**^**rule **^**rule...。
第三部分是當(dāng)狀態(tài)機匹配后的動作,其定義格式如下 :^regex [-> action],多個action可以用'A.B C',如果沒有action,默認(rèn)是Next.NoRecord。
結(jié)合數(shù)據(jù)源的文本內(nèi)容,就可靈活編寫適當(dāng)?shù)哪0鍋硖崛∠嚓P(guān)數(shù)據(jù),最后組合以上技術(shù),調(diào)用以上類和函數(shù)
查看該目錄下,可以查看GM.csv文件,里面保存的就是自動提取出來的數(shù)據(jù)。