■ 廣東 吳丹
筆者在前一篇文章《自動構建網絡基礎資料文檔》(見本刊2018年第1期)專注于從網絡設備配置或者命令執行結果中提取數據,用以構建網絡基礎資料的腳本技術,其中涉及了正則表達式、TextFSM庫、寫入CSV/Excel文件等內容。通過這些技術可以自行編寫提取數據的模板,靈活獲得基礎數據。
然而這種從配置文件到網絡基礎資料文檔的技術只是單向的技術,也就是數據是單向地從網絡設備配置文件流向網絡基礎資料文檔。在網絡管理員日常工作中,更經常要做的工作是修改網絡設備配置,以前的配置工作都是網絡管理員手工進行,手工配置網絡設備的工作方式有些不足,比如配置工作完全依賴于網絡管理員,經驗難以推廣,而且都是重復性工作,輸入命令可能有誤或有缺失等,現在希望通過腳本來解決配置問題。
使用腳本來自動生成配置文檔有以下好處:
1.把有經驗的網絡管理員的經驗以腳本形式積累下來,自動形成網絡知識庫。
2.把網絡配置修改的驗證工作提前到真正實施前,并通過對比以前的設計方案,減少可能遇到的問題。
3.減少實施過程中因輸入而產生的錯誤。
4.通過腳本可以實現配置的全過程跟蹤,有利于事故后的審計。
5.可以把網絡配置和網絡基礎數據庫關聯起來。
6.加快網絡方案文檔的制作。
以上六點益處,筆者是深有體會的,據筆者的經驗,使用該文中的腳本和網絡升級方案的框架,結合一個稍微完善的基礎數據庫,能在兩個小時內完成大約30-50臺設備的網絡設備升級方案,并出具每一臺設備的具體修改配置文檔,在沒有使用這個腳本前,這項工作大約需要8-20小時。由此可見,腳本工具是能在一定程度上提高工作效率的。以下將詳細介紹自動生成網絡設備配置命令腳本的思路。
本文要介紹的內容是自動生成網絡設備配置命令,結合前面介紹的內容,需要實現的目標是網絡管理員在網絡規劃時,在網絡基礎資料文本中直接修改Excel或者CSV文本對應的內容,然后通過腳本結合Excel/CSV的數據內容自動生成網絡設備相關配置。從數據流向看,這種方式實現了數據是從網絡基礎資料文檔流向網絡設備配置文件,把前一篇文章和本文結合起來,即可實現“數據”在網絡設備配置文件和網絡基礎資料文檔中的雙向流動,從而提升網絡管理員的工作效率。
從前面需求和分析看,這是一個由數據生成不同文本的項目,類似于數據庫和HTML文件的關系。因此借鑒網頁技術中的MVC模型和解決方案,很容易推導出自動生成網絡配置文檔的解決方案。
在本文中,把本次需要變更的設備參數和現行的設備參數間差異當作“數據”,把模板類中的控制語句當作MVC模型中的“Controller”,把生成的變更配置文件當作視圖“View”,那么通過應用MVC的工作原理就可以通過把“數據”輸入“Controller”中,最后產生變更方案。以下將使用Jinja2模板技術來實現以上功能。
Jinja2是一個流行的Python模板引擎技術,它具有如下特點:強大的HTML轉義語句;模板繼承技術;可配置的靈活語法。
基于以上特點,本文將結合Jinja2模板技術設計自動生成網絡設備配置變更項目的流程:
1.制作Jinja2模板,模板盡可能小,以便后面可以根據需要組合成較大的模塊。
2.制作設備參數變更的數據。
3.用Jinja2引擎讀取模塊文件,然后把參數變更數據傳遞給模板,最后模板引擎將數據渲染成配置文件。

根據給定的模板文件生成單個設備的配置文件,
可以是整個配置文件的片段,
然后多個片段可以組合成完整的配置文件。

初始化IOSDeviceText的參數


IOSDeviceText類是一個基礎類,它主要是通過jinja2的模板把Data中的數據生成網絡配置命令的片段,并把結果保存在ResultText屬性中。

組裝函數,把模板文件和數據結合起來。
tplFileName:模板文件名,字符串
deviceHostName :設備名稱,為哪個設備生成配置文件,字符串
data:傳遞給模板文件的數據,list()類型

遍歷組裝好的target生成配置文件,并保存到文件中,文件名為設備名稱

# 根據設備名稱,為每個設備初始化保存配置文件的results[tn]

TargetText是一個核心類,它主要是把每臺設備的相關數據傳給基礎類 IOSDeviceText,由IOS DeviceText生成配置命令片段,然后由MakeIt方案進行片段組裝,把組裝后的配置文檔保存在文件中,文件名是機器的hostname,因此需要保持每臺設備的hostname是存在并唯一的,如果沒有設備hostname,也必須為它分配一個唯一標識符,建議由網絡管理員分配統一、有意義的hostname。
有了以上基礎類,只需要提供相應的數據和制定模板,就可以生成配置文件。以下給出一個例子:





通過上面的例子可以看到,調用數據和模板并生成對應的文件并不困難,在jinja_result_text目錄下已經生成 gm、sd、nh、zz 這些文件,而這些文件保存的就是各個網絡設備配置或者升級命令。
在本文和前一篇文章《自動構建網絡基礎資料文檔》的基礎上,既可以實現從網絡配置文件上提取數據,把半結構化的文檔轉化為結構化的數據,也可以實現結構化的數據生成網絡配置命令,從而能極大地提供網絡管理員的工作效率。