■ 廣東 吳丹
筆者在前一篇文章《自動構(gòu)建網(wǎng)絡(luò)基礎(chǔ)資料文檔》(見本刊2018年第1期)專注于從網(wǎng)絡(luò)設(shè)備配置或者命令執(zhí)行結(jié)果中提取數(shù)據(jù),用以構(gòu)建網(wǎng)絡(luò)基礎(chǔ)資料的腳本技術(shù),其中涉及了正則表達(dá)式、TextFSM庫、寫入CSV/Excel文件等內(nèi)容。通過這些技術(shù)可以自行編寫提取數(shù)據(jù)的模板,靈活獲得基礎(chǔ)數(shù)據(jù)。
然而這種從配置文件到網(wǎng)絡(luò)基礎(chǔ)資料文檔的技術(shù)只是單向的技術(shù),也就是數(shù)據(jù)是單向地從網(wǎng)絡(luò)設(shè)備配置文件流向網(wǎng)絡(luò)基礎(chǔ)資料文檔。在網(wǎng)絡(luò)管理員日常工作中,更經(jīng)常要做的工作是修改網(wǎng)絡(luò)設(shè)備配置,以前的配置工作都是網(wǎng)絡(luò)管理員手工進(jìn)行,手工配置網(wǎng)絡(luò)設(shè)備的工作方式有些不足,比如配置工作完全依賴于網(wǎng)絡(luò)管理員,經(jīng)驗(yàn)難以推廣,而且都是重復(fù)性工作,輸入命令可能有誤或有缺失等,現(xiàn)在希望通過腳本來解決配置問題。
使用腳本來自動生成配置文檔有以下好處:
1.把有經(jīng)驗(yàn)的網(wǎng)絡(luò)管理員的經(jīng)驗(yàn)以腳本形式積累下來,自動形成網(wǎng)絡(luò)知識庫。
2.把網(wǎng)絡(luò)配置修改的驗(yàn)證工作提前到真正實(shí)施前,并通過對比以前的設(shè)計(jì)方案,減少可能遇到的問題。
3.減少實(shí)施過程中因輸入而產(chǎn)生的錯誤。
4.通過腳本可以實(shí)現(xiàn)配置的全過程跟蹤,有利于事故后的審計(jì)。
5.可以把網(wǎng)絡(luò)配置和網(wǎng)絡(luò)基礎(chǔ)數(shù)據(jù)庫關(guān)聯(lián)起來。
6.加快網(wǎng)絡(luò)方案文檔的制作。
以上六點(diǎn)益處,筆者是深有體會的,據(jù)筆者的經(jīng)驗(yàn),使用該文中的腳本和網(wǎng)絡(luò)升級方案的框架,結(jié)合一個稍微完善的基礎(chǔ)數(shù)據(jù)庫,能在兩個小時內(nèi)完成大約30-50臺設(shè)備的網(wǎng)絡(luò)設(shè)備升級方案,并出具每一臺設(shè)備的具體修改配置文檔,在沒有使用這個腳本前,這項(xiàng)工作大約需要8-20小時。由此可見,腳本工具是能在一定程度上提高工作效率的。以下將詳細(xì)介紹自動生成網(wǎng)絡(luò)設(shè)備配置命令腳本的思路。
本文要介紹的內(nèi)容是自動生成網(wǎng)絡(luò)設(shè)備配置命令,結(jié)合前面介紹的內(nèi)容,需要實(shí)現(xiàn)的目標(biāo)是網(wǎng)絡(luò)管理員在網(wǎng)絡(luò)規(guī)劃時,在網(wǎng)絡(luò)基礎(chǔ)資料文本中直接修改Excel或者CSV文本對應(yīng)的內(nèi)容,然后通過腳本結(jié)合Excel/CSV的數(shù)據(jù)內(nèi)容自動生成網(wǎng)絡(luò)設(shè)備相關(guān)配置。從數(shù)據(jù)流向看,這種方式實(shí)現(xiàn)了數(shù)據(jù)是從網(wǎng)絡(luò)基礎(chǔ)資料文檔流向網(wǎng)絡(luò)設(shè)備配置文件,把前一篇文章和本文結(jié)合起來,即可實(shí)現(xiàn)“數(shù)據(jù)”在網(wǎng)絡(luò)設(shè)備配置文件和網(wǎng)絡(luò)基礎(chǔ)資料文檔中的雙向流動,從而提升網(wǎng)絡(luò)管理員的工作效率。
從前面需求和分析看,這是一個由數(shù)據(jù)生成不同文本的項(xiàng)目,類似于數(shù)據(jù)庫和HTML文件的關(guān)系。因此借鑒網(wǎng)頁技術(shù)中的MVC模型和解決方案,很容易推導(dǎo)出自動生成網(wǎng)絡(luò)配置文檔的解決方案。
在本文中,把本次需要變更的設(shè)備參數(shù)和現(xiàn)行的設(shè)備參數(shù)間差異當(dāng)作“數(shù)據(jù)”,把模板類中的控制語句當(dāng)作MVC模型中的“Controller”,把生成的變更配置文件當(dāng)作視圖“View”,那么通過應(yīng)用MVC的工作原理就可以通過把“數(shù)據(jù)”輸入“Controller”中,最后產(chǎn)生變更方案。以下將使用Jinja2模板技術(shù)來實(shí)現(xiàn)以上功能。
Jinja2是一個流行的Python模板引擎技術(shù),它具有如下特點(diǎn):強(qiáng)大的HTML轉(zhuǎn)義語句;模板繼承技術(shù);可配置的靈活語法。
基于以上特點(diǎn),本文將結(jié)合Jinja2模板技術(shù)設(shè)計(jì)自動生成網(wǎng)絡(luò)設(shè)備配置變更項(xiàng)目的流程:
1.制作Jinja2模板,模板盡可能小,以便后面可以根據(jù)需要組合成較大的模塊。
2.制作設(shè)備參數(shù)變更的數(shù)據(jù)。
3.用Jinja2引擎讀取模塊文件,然后把參數(shù)變更數(shù)據(jù)傳遞給模板,最后模板引擎將數(shù)據(jù)渲染成配置文件。
根據(jù)給定的模板文件生成單個設(shè)備的配置文件,
可以是整個配置文件的片段,
然后多個片段可以組合成完整的配置文件。
初始化IOSDeviceText的參數(shù)
IOSDeviceText類是一個基礎(chǔ)類,它主要是通過jinja2的模板把Data中的數(shù)據(jù)生成網(wǎng)絡(luò)配置命令的片段,并把結(jié)果保存在ResultText屬性中。
組裝函數(shù),把模板文件和數(shù)據(jù)結(jié)合起來。
tplFileName:模板文件名,字符串
deviceHostName :設(shè)備名稱,為哪個設(shè)備生成配置文件,字符串
data:傳遞給模板文件的數(shù)據(jù),list()類型
遍歷組裝好的target生成配置文件,并保存到文件中,文件名為設(shè)備名稱
# 根據(jù)設(shè)備名稱,為每個設(shè)備初始化保存配置文件的results[tn]
TargetText是一個核心類,它主要是把每臺設(shè)備的相關(guān)數(shù)據(jù)傳給基礎(chǔ)類 IOSDeviceText,由IOS DeviceText生成配置命令片段,然后由MakeIt方案進(jìn)行片段組裝,把組裝后的配置文檔保存在文件中,文件名是機(jī)器的hostname,因此需要保持每臺設(shè)備的hostname是存在并唯一的,如果沒有設(shè)備hostname,也必須為它分配一個唯一標(biāo)識符,建議由網(wǎng)絡(luò)管理員分配統(tǒng)一、有意義的hostname。
有了以上基礎(chǔ)類,只需要提供相應(yīng)的數(shù)據(jù)和制定模板,就可以生成配置文件。以下給出一個例子:
通過上面的例子可以看到,調(diào)用數(shù)據(jù)和模板并生成對應(yīng)的文件并不困難,在jinja_result_text目錄下已經(jīng)生成 gm、sd、nh、zz 這些文件,而這些文件保存的就是各個網(wǎng)絡(luò)設(shè)備配置或者升級命令。
在本文和前一篇文章《自動構(gòu)建網(wǎng)絡(luò)基礎(chǔ)資料文檔》的基礎(chǔ)上,既可以實(shí)現(xiàn)從網(wǎng)絡(luò)配置文件上提取數(shù)據(jù),把半結(jié)構(gòu)化的文檔轉(zhuǎn)化為結(jié)構(gòu)化的數(shù)據(jù),也可以實(shí)現(xiàn)結(jié)構(gòu)化的數(shù)據(jù)生成網(wǎng)絡(luò)配置命令,從而能極大地提供網(wǎng)絡(luò)管理員的工作效率。