python實(shí)現(xiàn)錯(cuò)誤自動(dòng)跳出、割接腳本自動(dòng)生成等功能

//by Chaos
謝絕轉(zhuǎn)載
編寫自動(dòng)化配置程序?yàn)镃R-MSE鏈路擴(kuò)容中,涉及幾個(gè)功能:
錯(cuò)誤代碼跳出
割接腳本自動(dòng)生成

錯(cuò)誤代碼跳出

鏈路擴(kuò)容涉及腳本編寫其實(shí)只是其中的一部分內(nèi)容,主要的工作是大量的檢查工作:割接前涉及IPv4、IPv6地址是否被占、端口下是否有垃圾配置、端口配置IP地址后是否能夠ping通、端口光功率等。割接后涉及端口、流量、協(xié)議等檢查。
每項(xiàng)檢查出現(xiàn)問題時(shí),跳出程序,并給出相應(yīng)的錯(cuò)誤原因。

try ... except
由于自動(dòng)化配置中可能涉及很多異常情況,需要及時(shí)跳出。
當(dāng) Python 檢測(cè)到一個(gè)錯(cuò)誤時(shí),解釋器就無(wú)法繼續(xù)執(zhí)行下去,于是拋出異常。
異常的情況包括語(yǔ)法錯(cuò)誤、縮進(jìn)問題等等。
所以,在一段程序中,為了能夠讓程序健壯,用try ... except來(lái)處理異常,其語(yǔ)法格式如下:
except子句:用來(lái)捕捉指定的異常,一旦捕捉到,就執(zhí)行與之對(duì)應(yīng)的except_statements,即用來(lái)處理異常的程序語(yǔ)句。
raise(觸發(fā)異常)
使用raise語(yǔ)句自己觸發(fā)異常
Exception是異常的類型(例如,NumeError)參數(shù)標(biāo)準(zhǔn)異常任意一種
自定義異常 MyException,繼承Exception
如鏈路擴(kuò)容場(chǎng)景中,端口分配IPv4已經(jīng)被使用,則進(jìn)入異常,跳出程序

 if "addresss occupied" in result:
            raise MyException("addresss occupied ")
    if IPv4_Ping_Query !="FIND":
        result+="設(shè)備 "+DEVICE_IP+" Ipv4 ping Abnormal "
    if IPv6_Ping_Query !="FIND":
        result+="設(shè)備 "+DEVICE_IP+" Ipv6 ping Abnormal "

    if "Abnormal" in result:
        raise MyException("ping Abnormal ")
    else:
        result+="設(shè)備 "+DEVICE_IP+' IPv4 address and IPv6 address both ping normal'

割接腳本自動(dòng)生成

鏈路擴(kuò)容涉及腳本編寫中參數(shù)較多,考慮后續(xù)的延續(xù)性。
將模板不固化在程序里,通過(guò)文件的形式編寫。
風(fēng)險(xiǎn)操作牽頭人員制定腳本模板,風(fēng)險(xiǎn)操作人員填寫參數(shù)表。程序讀取文件,自動(dòng)將腳本中的參數(shù)替換為實(shí)際值以完成割接腳本自動(dòng)編寫。
如下面簡(jiǎn)單的例子:

CR_MSE_Link_preconfig_template.txt 為一個(gè)txt文檔
device:{DEVICE_IP}
CONFIGURATION--------------
interface {Port}
description {identification}:{Peer}:({Optical}){Peer_Port}::processing
ip address {Ipv4} 255.255.255.252
ipv6 enable
ipv6 address {Ipv6}/127
undo shutdown


風(fēng)險(xiǎn)操作人員在界面中填寫參數(shù)
參數(shù)通過(guò)網(wǎng)管傳給后臺(tái),后臺(tái)將參數(shù)自動(dòng)填入形成割接腳本。
自動(dòng)生成腳本如下:


生成腳本.png

腳本生成首先將txt文檔打開,按行處理,每行中將模板參數(shù)進(jìn)行替換,替換采用 format_map() 和 vars() 。

其他注意點(diǎn):

1、設(shè)備鏈路擴(kuò)容程序編寫,涉及參數(shù)較多。
所以參數(shù)在程序間傳遞采用字典形式,減少函數(shù)參數(shù)個(gè)數(shù)。

傳遞參數(shù)-字典:Link_Parameter
Result_IP1=IP_Adress_detect(Link_Parameter['CR1_Ip'], Link_Parameter['CR1_IPv4'], Link_Parameter['CR1_IPv6'])

2、字符串split
Keyword="Red Yellow Blue"
Keyword_num = Keyword.split(" ") 和Keyword_num = Keyword.split()的差異性

3、模塊化開發(fā)
目前功能已抽離出模塊的如下:

登陸模塊:自動(dòng)登錄設(shè)備,跨平臺(tái)不區(qū)分WIN、LINUX。入?yún)⒉簧婕霸O(shè)備類型,設(shè)備登錄后獲取設(shè)備類型
接口模塊:和其他設(shè)備傳遞Jason格式參數(shù)
密碼庫(kù)模塊:根據(jù)密碼文件,形成密碼字典
命令查詢模塊:根據(jù)設(shè)備類型、命令類型(如IPv4 路由查詢)獲取設(shè)備命令
命令發(fā)送模塊:設(shè)備發(fā)送命令,獲取回顯
關(guān)鍵字檢索模塊:回顯中檢索關(guān)鍵字,進(jìn)行判斷
模板命令自動(dòng)生成模塊:讀取txt文件模板,填入相關(guān)參數(shù),形成割接命令腳本
PING測(cè)試:檢測(cè)是否可以PING通
IP地址沖突檢測(cè):檢查IPv4/IPv6地址是否已被占用
端口配置查詢:檢查端口下是否已有配置

后續(xù)需要開發(fā)形成模塊化功能,部分功能已經(jīng)具備,需要抽離出形成原子能力

協(xié)議狀態(tài)查詢模塊:核實(shí)設(shè)備端口協(xié)議是否正常
EXCEL讀取模塊:讀取EXCEL文件進(jìn)行處理
郵件發(fā)送模塊:定期發(fā)送郵件
多任務(wù)模塊:同時(shí)進(jìn)行多任務(wù),單任務(wù)出現(xiàn)問題具備自動(dòng)跳出并報(bào)錯(cuò)能力
割接前后驗(yàn)證模塊:割接前后采集比對(duì)能力
...

4、開發(fā)過(guò)程中需要進(jìn)一步的進(jìn)行抽象,減少重復(fù)代碼
5、進(jìn)一步完善開發(fā)文檔,參考其他省份經(jīng)驗(yàn)

參考文檔

Exception和Raise的異常處理
python 自定義異常
字符串中插入變量
Python3 - 字符串中的變量替換--這篇是一個(gè)系列教材中的一篇

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容