所选语种没有对应资源,请选择:

本站点使用Cookies,继续浏览表示您同意我们使用Cookies。Cookies和隐私政策>

提示

尊敬的用户,您的IE浏览器版本过低,为获取更好的浏览体验,请升级您的IE浏览器。

升级

CloudEngine 8800, 7800, 6800, 5800 V200R003C00 配置指南-设备管理

本文档介绍了设备管理的配置,具体包括查看设备状态、硬件管理、信息中心配置、NTP配置、以太时钟同步配置、故障管理配置、节能管理、性能管理、维护助手配置和OPS配置。
评分并提供意见反馈 :
华为采用机器翻译与人工审校相结合的方式将此文档翻译成不同语言,希望能帮助您更容易理解此文档的内容。 请注意:即使是最好的机器翻译,其准确度也不及专业翻译人员的水平。 华为对于翻译的准确性不承担任何责任,并建议您参考英文文档(已提供链接)。
配置通过Python脚本自动备份配置文件示例

配置通过Python脚本自动备份配置文件示例

组网需求

图10-6所示,远程服务器提供FTP Server功能,SwitchA与FTP Server之间路由可达。用户希望能够在修改并保存设备的配置后,设备可以自动将配置文件备份到FTP服务器,以减少手工备份的工作量。

说明:

使用FTP协议存在安全风险,建议使用SFTP进行文件传输。

图10-6 通过Python脚本备份文件至服务器示意图

配置思路

采用如下的思路配置:
  1. 编辑Python脚本,在脚本中实现获取设备当前配置文件并发送至FTP服务器的功能。

  2. 上传Python脚本至SwitchA并安装。

  3. 为了实现Python脚本的自动运行,将Python脚本关联至命令行维护助手,并设置该维护助手的触发条件为配置文件变更事件。

操作步骤

  1. 编辑Python脚本

    # 编辑Python脚本,文件名为backupconfig.py,具体脚本格式可参见backupconfig.py脚本示例。Python脚本中主要实现以下功能:
    1. 根据《RESTful API参考》中提供的API,获取设备当前运行的配置文件信息。

    2. 将当前运行的配置文件发送至FTP服务器。

  2. 上传Python脚本并安装

    # 假设Python脚本存放在FTP服务器上,通过FTP方式将Python脚本上传至SwitchA。

    <HUAWEI> system-view
    [~HUAWEI] sysname SwitchA
    [*HUAWEI] commit
    [~SwitchA] quit
    <SwitchA> ftp 192.168.20.1
    Trying 192.168.20.1 ...
    Press CTRL + K to abort
    Connected to 192.168.20.1.
    220 FTP Server ready.
    User(192.168.20.1:(none)):ftpuser
    331 Password required for ftpuser.
    Enter password:
    230 User ftpuser logged in.
    [ftp] binary
    200 Type set to I.
    [ftp] get backupconfig.py
    213 3659
    200 Port command successful.
    150 Opening data connection for backupconfig.py.
    \     100% [***********]
    226 File sent ok
    
    FTP: 3659 byte(s) received in 1.610 second(s) 2.219Kbyte(s)/sec.
    [ftp] bye
    221 Goodbye.
    

    # 在SwitchA上安装Python脚本。

    <SwitchA> ops install file backupconfig.py
    

    # 脚本安装后,用户可以先执行ops run python file-name命令手动运行脚本,再查看FTP服务器是否有备份的配置文件,以验证脚本是否能够成功实现备份功能。

  3. 配置命令行维护助手

    # 创建一个命令行维护助手,并设置触发条件为配置文件变更事件,该事件名为cfg_file_change。设置命令行维护助手的工作任务为执行backupconfig.py脚本。

    <SwitchA> system-view
    [~SwitchA] ops
    [~SwitchA-ops] assistant backup_config
    [*SwitchA-ops-assistant-backup_config] condition event feature configuration name cfg_file_change
    [*SwitchA-ops-assistant-backup_config] execute 1 python backupconfig.py
    [*SwitchA-ops-assistant-backup_config] commit
    [~SwitchA-ops-assistant-backup_config] return
    

  4. 检查配置结果

    # 查看维护助手配置。

    <SwitchA> display ops assistant verbose name backup_config
    Assistant information
      Name                 : backup_config
      State                : ready
      Type                 : command
      Default assistant    : no
     Running statistics
      Running times        : 0
      Queue size/(free)    : 10/(10)
      Skip for queue full  : 0
      Skip for delay       : 0
      Skip for suppression : 0
      Skip for error       : 0
     Execute information
      Task abstract        : backupconfig.py
     Trigger control
      Occurs threshold     : 1
      Period (s)           : 30
      Delay (s)            : 0
      Suppress max         : 0
      Hits in period       : 0
     Condition information
      Correlate expression :
      Condition tag        :
        Condition type     : event
        Subscribe result   : success
        Occurs threshold   : 0
        Period (s)         : 0
        Hits in period     : 0
    

    # 上述配置完成后,用户可以执行命令save保存配置,然后在FTP服务器查看配置文件是否备份成功。

backupconfig.py脚本示例

#!/usr/bin/env python

import traceback
import httplib
import string

class OPSConnection(object):
    """Make an OPS connection instance."""

    def __init__(self, host, port = 80):
        self.host = host
        self.port = port
        self.headers = {
            "Content-type": "text/xml",
            "Accept":       "text/xml"
            }
        self.conn = None

    def close(self):
        """Close the connection"""
        self.conn.close()

    def create(self, uri, req_data):
        """Create operation"""
        ret = self.rest_call("POST", uri, req_data)
        return ret

    def delete(self, uri, req_data):
        """Delete operation"""
        ret = self.rest_call("DELETE", uri, req_data)
        return ret

    def get(self, uri, req_data = None):
        """Get operation"""
        ret = self.rest_call("GET", uri, req_data)
        return ret

    def set(self, uri, req_data):
        """Set operation"""
        ret = self.rest_call("PUT", uri, req_data)
        return ret

    def rest_call(self, method, uri, req_data):
        """REST call"""
        print('|---------------------------------- request: ----------------------------------|')
        print('%s %s HTTP/1.1\n' % (method, uri))
        if req_data == None:
            body = ""
        else:
            body = req_data
            print(body)
        if self.conn:
            self.conn.close()
        self.conn = httplib.HTTPConnection(self.host, self.port)

        self.conn.request(method, uri, body, self.headers)
        response = self.conn.getresponse()
        response.status = httplib.OK    # stub code
        ret = (response.status, response.reason, response.read())
        print('|---------------------------------- response: ---------------------------------|')
        print('HTTP/1.1 %s %s\n\n%s' % ret)
        print('|------------------------------------------------------------------------------|')
        return ret

def get_startup_info(ops_conn):
    """Get startup info. """

    uri = "/cfg/startupInfos/startupInfo"
    req_data = \
'''<?xml version="1.0" encoding="UTF-8"?>
<startupInfo>
</startupInfo>
'''
    ret, _, rsp_data = ops_conn.get(uri, req_data)
    if ret != httplib.OK:
        return None

    return rsp_data

def backup_file(ops_conn,cfgFileName):
	"""Copy configuration."""

	uri = "/ftpc/ftpcTransferFiles/ftpcTransferFile"
	str_temp = string.Template(
'''<?xml version="1.0" encoding="UTF-8"?>
<ftpcTransferFile>
	<serverIpv4Address>192.168.20.1</serverIpv4Address>
	<commandType>put</commandType>
	<userName>ftpuser</userName>
	<password>pwd123</password>
	<localFileName>$srcFileName</localFileName>
	<remoteFileName>$desFileName</remoteFileName>
</ftpcTransferFile>
''')

	req_data = str_temp.substitute(srcFileName = cfgFileName,desFileName = cfgFileName.strip('flash:/'))
	ret, _, rsp_data = ops_conn.create(uri, req_data)
	if ret != httplib.OK:
		return None
	return rsp_data

def main():
    """The main function."""

    host = "localhost"
    try:
        ops_conn = OPSConnection(host)
        print('+-------------------------- Open a OPS connection. ----------------------------+')
        rsp_data = get_startup_info(ops_conn)
        if rsp_data is not None:
            cfgFileName = rsp_data[rsp_data.find("curStartupFile")+15 : rsp_data.find("/curStartupFile")-1]
            backup_file(ops_conn,cfgFileName)
        ops_conn.close()
        print('+-------------------------- Close a OPS connection. ---------------------------+')
        return
    except:
        errinfo = traceback.format_exc()
        print(errinfo)
        return

if __name__ == "__main__":
    main()

backupconfig.py脚本详解

  • #!/usr/bin/env python
    
    import traceback
    import httplib
    import string
    

    Python语言中使用“import”来导入模块。模块是一些函数和类的集合文件,能实现一些相应的功能。

    用户可以根据实际需要导入相应的模块。

  • class OPSConnection(object):
        """Make an OPS connection instance."""
    
        def __init__(self, host, port = 80):
            self.host = host
            self.port = port
            self.headers = {
                "Content-type": "text/xml",
                "Accept":       "text/xml"
                }
            self.conn = None
    
        def close(self):
            """Close the connection"""
            self.conn.close()
    
        def create(self, uri, req_data):
            """Create operation"""
            ret = self.rest_call("POST", uri, req_data)
            return ret
    
        def delete(self, uri, req_data):
            """Delete operation"""
            ret = self.rest_call("DELETE", uri, req_data)
            return ret
    
        def get(self, uri, req_data = None):
            """Get operation"""
            ret = self.rest_call("GET", uri, req_data)
            return ret
    
        def set(self, uri, req_data):
            """Set operation"""
            ret = self.rest_call("PUT", uri, req_data)
            return ret
    
        def rest_call(self, method, uri, req_data):
            """REST call"""
            print('|---------------------------------- request: ----------------------------------|')
            print('%s %s HTTP/1.1\n' % (method, uri))
            if req_data == None:
                body = ""
            else:
                body = req_data
                print(body)
            if self.conn:
                self.conn.close()
            self.conn = httplib.HTTPConnection(self.host, self.port)
    
            self.conn.request(method, uri, body, self.headers)
            response = self.conn.getresponse()
            response.status = httplib.OK    # stub code
            ret = (response.status, response.reason, response.read())
            print('|---------------------------------- response: ---------------------------------|')
            print('HTTP/1.1 %s %s\n\n%s' % ret)
            print('|------------------------------------------------------------------------------|')
            return ret
    
    “OPSConnection”是一个用来调用RESTful API的类,该类中定义了一些方法来执行建立HTTP连接时的操作:
    • def __init__():初始化类,创建一个HTTP连接。
    • def close():关闭HTTP连接。
    • def create():创建设备资源操作。
    • def delete():删除设备资源操作。
    • def get():查询设备资源操作。
    • def set():修改设备资源操作。
    • def rest_call():类内部调用的方法。

    该部分可以直接调用,用户不需要修改。

  • def get_startup_info(ops_conn):
        """Get startup info. """
    
        uri = "/cfg/startupInfos/startupInfo"
        req_data = \
    '''<?xml version="1.0" encoding="UTF-8"?>
    <startupInfo>
    </startupInfo>
    '''
        ret, _, rsp_data = ops_conn.get(uri, req_data)
        if ret != httplib.OK:
            return None
    
        return rsp_data
    

    定义查询设备启动信息的函数。

    “uri = "/cfg/startupInfos/startupInfo"”指定用户需要管理的对象的URI(Uniform Resource Identifier)。详细可参考RESTful API。

    “req_data =”为发送的请求内容。

    “ret, _, rsp_data = ops_conn.get(uri, req_data)”执行一个get操作请求。具体操作类型可参见OPSConnection类中定义的请求方法。

    “rsp_data”为执行请求后设备的响应数据。

  • def backup_file(ops_conn,cfgFileName):
    	"""Copy configuration."""
    
    	uri = "/ftpc/ftpcTransferFiles/ftpcTransferFile"
    	str_temp = string.Template(
    '''<?xml version="1.0" encoding="UTF-8"?>
    <ftpcTransferFile>
    	<serverIpv4Address>192.168.20.1</serverIpv4Address>
    	<commandType>put</commandType>
    	<userName>ftpuser</userName>
    	<password>pwd123</password>
    	<localFileName>$srcFileName</localFileName>
    	<remoteFileName>$desFileName</remoteFileName>
    </ftpcTransferFile>
    ''')
    
    	req_data = str_temp.substitute(srcFileName = cfgFileName,desFileName = cfgFileName.strip('flash:/'))
    	ret, _, rsp_data = ops_conn.create(uri, req_data)
    	if ret != httplib.OK:
    		return None
    	return rsp_data
    

    定义备份配置文件至服务器的函数。形式与“get_startup_info()”类似。

  • def main():
        """The main function."""
    
        host = "localhost"
        try:
            ops_conn = OPSConnection(host)
            print('+-------------------------- Open a OPS connection. ----------------------------+')
            rsp_data = get_startup_info(ops_conn)
            if rsp_data is not None:
                cfgFileName = rsp_data[rsp_data.find("curStartupFile")+15 : rsp_data.find("/curStartupFile")-1]
                backup_file(ops_conn,cfgFileName)
            ops_conn.close()
            print('+-------------------------- Close a OPS connection. ---------------------------+')
            return
        except:
            errinfo = traceback.format_exc()
            print(errinfo)
            return
    
    if __name__ == "__main__":
        main()
    

    main()函数定义该脚本需要执行的操作,用户可根据实际需求进行修改。

    “host =”表示环路地址,目前RESTful API仅支持设备内部调用,即取值为“localhost”。

    “ops_conn = OPSConnection(host)”表示建立HTTP连接。

    “rsp_data = get_startup_info(ops_conn)”表示调用函数。

    “ops_conn.close()”表示关闭HTTP连接。

配置文件

  • SwitchA的配置文件

    #
    sysname SwitchA
    #
    ops
     assistant backup_config
      execute 1 python backupconfig.py
      condition event feature configuration name CFG_FILE_CHANGE
    #
    return
翻译
下载文档
更新时间:2019-05-05

文档编号:EDOC1100004379

浏览量:9318

下载量:335

平均得分:
本文档适用于这些产品
相关文档
相关版本
Share
上一页 下一页