python实现错误自动跳出、割接脚本自动生成等功能
//by Chaos
谢绝转载
编写自动化配置程序为CR-MSE链路扩容中,涉及几个功能:
错误代码跳出
割接脚本自动生成
错误代码跳出
链路扩容涉及脚本编写其实只是其中的一部分内容,主要的工作是大量的检查工作:割接前涉及IPv4、IPv6地址是否被占、端口下是否有垃圾配置、端口配置IP地址后是否能够ping通、端口光功率等。割接后涉及端口、流量、协议等检查。
每项检查出现问题时,跳出程序,并给出相应的错误原因。
try ... except
由于自动化配置中可能涉及很多异常情况,需要及时跳出。
当 Python 检测到一个错误时,解释器就无法继续执行下去,于是抛出异常。
异常的情况包括语法错误、缩进问题等等。
所以,在一段程序中,为了能够让程序健壮,用try ... except来处理异常,其语法格式如下:
except子句:用来捕捉指定的异常,一旦捕捉到,就执行与之对应的except_statements,即用来处理异常的程序语句。
raise(触发异常)
使用raise语句自己触发异常
Exception是异常的类型(例如,NumeError)参数标准异常任意一种
自定义异常 MyException,继承Exception
如链路扩容场景中,端口分配IPv4已经被使用,则进入异常,跳出程序
if "addresss occupied" in result:
raise MyException("addresss occupied ")
if IPv4_Ping_Query !="FIND":
result+="设备 "+DEVICE_IP+" Ipv4 ping Abnormal "
if IPv6_Ping_Query !="FIND":
result+="设备 "+DEVICE_IP+" Ipv6 ping Abnormal "
if "Abnormal" in result:
raise MyException("ping Abnormal ")
else:
result+="设备 "+DEVICE_IP+' IPv4 address and IPv6 address both ping normal'
割接脚本自动生成
链路扩容涉及脚本编写中参数较多,考虑后续的延续性。
将模板不固化在程序里,通过文件的形式编写。
风险操作牵头人员制定脚本模板,风险操作人员填写参数表。程序读取文件,自动将脚本中的参数替换为实际值以完成割接脚本自动编写。
如下面简单的例子:
CR_MSE_Link_preconfig_template.txt 为一个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
风险操作人员在界面中填写参数
参数通过网管传给后台,后台将参数自动填入形成割接脚本。
自动生成脚本如下:
生成脚本.png
脚本生成首先将txt文档打开,按行处理,每行中将模板参数进行替换,替换采用 format_map() 和 vars() 。
其他注意点:
1、设备链路扩容程序编写,涉及参数较多。
所以参数在程序间传递采用字典形式,减少函数参数个数。
传递参数-字典: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、模块化开发
目前功能已抽离出模块的如下:
登陆模块:自动登录设备,跨平台不区分WIN、LINUX。入参不涉及设备类型,设备登录后获取设备类型
接口模块:和其他设备传递Jason格式参数
密码库模块:根据密码文件,形成密码字典
命令查询模块:根据设备类型、命令类型(如IPv4 路由查询)获取设备命令
命令发送模块:设备发送命令,获取回显
关键字检索模块:回显中检索关键字,进行判断
模板命令自动生成模块:读取txt文件模板,填入相关参数,形成割接命令脚本
PING测试:检测是否可以PING通
IP地址冲突检测:检查IPv4/IPv6地址是否已被占用
端口配置查询:检查端口下是否已有配置
后续需要开发形成模块化功能,部分功能已经具备,需要抽离出形成原子能力
协议状态查询模块:核实设备端口协议是否正常
EXCEL读取模块:读取EXCEL文件进行处理
邮件发送模块:定期发送邮件
多任务模块:同时进行多任务,单任务出现问题具备自动跳出并报错能力
割接前后验证模块:割接前后采集比对能力
...
4、开发过程中需要进一步的进行抽象,减少重复代码
5、进一步完善开发文档,参考其他省份经验
参考文档
Exception和Raise的异常处理
python 自定义异常
字符串中插入变量
Python3 - 字符串中的变量替换--这篇是一个系列教材中的一篇