美文网首页
python实现错误自动跳出、割接脚本自动生成等功能

python实现错误自动跳出、割接脚本自动生成等功能

作者: python开发运维小队 | 来源:发表于2020-05-23 17:30 被阅读0次

    //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 - 字符串中的变量替换--这篇是一个系列教材中的一篇

    相关文章

      网友评论

          本文标题:python实现错误自动跳出、割接脚本自动生成等功能

          本文链接:https://www.haomeiwen.com/subject/jdklahtx.html