编写基于OPS API接口的脚本

编写基于OPS API接口的脚本
背景信息
在OPS脚本文件中,可以定义对YANG模型节点的操作,实现通过OPS API接口对业务的管理。
OPS API是一种Restful风格的开放可编程接口,OPS支持的操作类型以及与RESTCONF、NETCONF协议的对应关系如下:
表1 OPS支持的操作类型以及与NETCONF和RESTCONF协议对应关系
OPS

表1 OPS支持的操作类型以及与NETCONF和RESTCONF协议对应关系

OPS

RESTCONF

NETCONF

create

POST

<edit-config> (nc:operation="create")

create

POST

rpc

delete

DELETE

<edit-config> (nc:operation="delete")

get

GET

<get-config>, <get>

set

PUT

<edit-config> (nc:operation="replace")

ZTP(Zero Touch Provisioning)可以通过调用OPS脚本来实现设备空配置启动时的业务自动部署。
当前支持的业务节点范围请参考附录:OPS API接口范围。
对于手动运行的Python脚本以及脚本维护助手ops_execute()函数中定义的脚本,都可以参考如下步骤和规范限制来编写OPS脚本。
操作步骤
(1)通过import ops语句调用OPSConnection(object)函数,建立和OPS接口的连接。
(2)编写OPS脚本内容。

import ops                                                       # 固定格式,标识OPS模块。
import string                                                    # 固定格式。
uri = "/restconf/data/huawei-aaa:aaa/domains"                    # 基于RESTCONF协议的报文头及业务模块的YANG模型XPath,对于create/delete/get/set操作,固定是data。
uri = "/restconf/operations/huawei-cfg:set-startup "             # 基于RESTCONF协议的报文头及业务模块的YANG模型XPath,对于rpc操作,路径中是operations。
host = "localhost"                                               # 固定格式。
req_data = None                                                  # 业务body,以XML格式填写需要添加的数据,没有写None。
opos_conn = ops.OPSConnection(host)                              # 触发建立OPS连接的接口函数。
ret, _, rsp_data = ops_conn.create/delete/get/set(uri, req_data) # 触发各类型操作。

操作类型

规则说明

脚本样例

create

创建节点,uri路径中,固定为data

import ops
import string
import hashlib
uri = "/restconf/data/huawei-aaa:aaa/domains"
host = "localhost"
req_data = '''<domain>
        <domainName>test1</domainName>
        <authenSchemeName>default</authenSchemeName>
        <acctSchemeName>default</acctSchemeName>
        <authorSchemeName>default</authorSchemeName>
        <domainState>active</domainState>
        <accessLimit>283648</accessLimit>
        <serviceTerminal>true</serviceTerminal>
        <serviceTelnet>true</serviceTelnet>
        <serviceFtp>true</serviceFtp>
        <serviceSsh>true</serviceSsh>
        <serviceSnmp>true</serviceSnmp>
        <serviceDot1x>true</serviceDot1x>
        <serviceHttp>true</serviceHttp>
    </domain>'''
ops_conn = ops.OPSConnection(host)
ret, _, rsp_data = ops_conn.create(uri, req_data)
print(('install_ops_script ret {}, rsp_data {}'.format(ret, rsp_data)))

create

RPC操作,uri路径中,固定为operations

import ops
import string
import hashlib
uri = "/restconf/operations/huawei-cfg:set-startup"
host = "localhost"
req_data = '''<input>
    <filename>vrpcfg1.zip</filename>
</input>'''
ops_conn = ops.OPSConnection(host)
ret, _, rsp_data = ops_conn.create(uri, req_data)
print(('install_ops_script ret {}, rsp_data {}'.format(ret, rsp_data)))

delete

不允许携带业务body。

import ops
import string
import hashlib
uri = "/restconf/data/huawei-aaa:aaa/domains/domain=test1"
host = "localhost"
req_data = None
ops_conn = ops.OPSConnection(host)
ret, _, rsp_data = ops_conn.delete(uri, req_data)
print(('install_ops_script ret {}, rsp_data {}'.format(ret, rsp_data)))

get

  • 不允许携带业务body。
  • 查询list节点时,必须指定key节点或过滤查询条件。
import ops
import string
import hashlib
print("hello")
print("world")
uri = "/restconf/data/huawei-aaa:aaa/domains/domain=test1"
host = "localhost"
req_data = None
ops_conn = ops.OPSConnection(host)
ret, _, rsp_data = ops_conn.get(uri, req_data)
print(('install_ops_script ret {}, rsp_data {}'.format(ret, rsp_data)))

set

N/A

import ops
import string
import hashlib
uri = "/restconf/data/huawei-aaa:aaa/domains/domain"
host = "localhost"
req_data = '''<domain>
        <domainName>test1</domainName>
        <authenSchemeName>default</authenSchemeName>
        <acctSchemeName>default</acctSchemeName>
        <authorSchemeName>default</authorSchemeName>
        <domainState>active</domainState>
        <accessLimit>283648</accessLimit>
        <serviceTerminal>true</serviceTerminal>
        <serviceTelnet>true</serviceTelnet>
        <serviceFtp>true</serviceFtp>
        <serviceSsh>true</serviceSsh>
        <serviceSnmp>true</serviceSnmp>
        <serviceDot1x>true</serviceDot1x>
        <serviceHttp>true</serviceHttp>
    </domain>'''
ops_conn = ops.OPSConnection(host)
ret, _, rsp_data = ops_conn.set(uri, req_data)
print(('install_ops_script ret {}, rsp_data {}'.format(ret, rsp_data)))


1、本站资源长期持续更新。
2、本资源基本为原创,部分来源其他付费资源平台或互联网收集,如有侵权请联系及时处理。
3、本站大部分文章的截图来源实验测试环境,请不要在生产环境中随意模仿,以免带来灾难性后果。

转载请保留出处:  www.zh-cjh.com珠海陈坚浩博客 » 编写基于OPS API接口的脚本

作者: cjh


手机扫一扫,手机上查看此文章:

一切源于价值!

其他 模板文件不存在: ./template/plugins/comment/pc/index.htm

未雨绸缪、居安思危!

数据安全、有备无患!

注意操作、数据无价!

一切源于价值!