netconf协议的python配置模块ncclient

2021/8/12 20:06:13

本文主要是介绍netconf协议的python配置模块ncclient,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

1、NETCONF简介

NETCONF(Network Configuration Protocol,网络配置协议)是一种基于XML的网络管理协议,它提供了一种可编程的、对网络设备进行配置和管理的方法。用户可以通过该协议设置参数、获取参数值、获取统计信息等。NETCONF协议采用了分层结构,分成四层:内容层、操作层、RPC(Remote Procedure Call,远程调用)层和通信协议层。

2、操作层介绍(ncclient库中manager.py模块)

manager支持的操作:(manager中的操作,都是映射到ncclient.operations.xxx对应的class)

2.1 <get>

用于查询状态数据,另外如果支持server能力:urn:ietf:params:netconf:capability:xpath:1.0则还可以使用filter进行条件查询,例如:

<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <get>
        <filter type="subtree">
            <top
                xmlns="http://example.com/schema/1.2/stats">
                <interfaces>
                    <interface>
                        <ifName>eth0</ifName>
                    </interface>
                </interfaces>
            </top>
        </filter>
    </get>
</rpc>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <data>
        <top xmlns="http://example.com/schema/1.2/stats">
            <interfaces>
                <interface>
                    <ifName>eth0</ifName>
                    <ifInOctets>45621</ifInOctets>
                    <ifOutOctets>774344</ifOutOctets>
                </interface>
            </interfaces>
        </top>
    </data>
</rpc-reply>

2.2 <get-config>

用于查询配置数据,可以通过<source/>来指定不同的配置库,例如:

<rpc message-id="101"xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <get-config>
        <source>
            <running/>
        </source>
        <filter type="subtree">
            <top xmlns="http://example.com/schema/1.2/config">
                <users/>
            </top>
        </filter>
    </get-config>
</rpc>
<rpc-reply message-id="101" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <data>
        <top xmlns="http://example.com/schema/1.2/config">
            <users>
                <user>
                    <name>root</name>
                    <type>superuser</type>
                    <full-name>Charlie Root</full-name>
                    <company-info>
                        <dept>1</dept>
                        <id>1</id>
                    </company-info>
                </user>
                <!-- additional <user> elements appear here... -->
            </users>
        </top>
    </data>
</rpc-reply>

2.3 <edit-config>

用于对指定配置数据库内容进行修改,支持以下几种操作:

merge: 合并操作,此操作为默认操作。
replace: 替换操作,如果对象已经存在则替换,不存在则创建。
create: 创建操作,如果对象已经存在,则报错误“data-exists”。
delete: 删除操作,如果对象存在则删除,不存在则报错 “data-missing”。
remove: 删除操作,如果对象存在则删除,不存在则忽略。

 

<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <edit-config>
        <target>
            <running/>
        </target>
        <config
            xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
            <top
                xmlns="http://example.com/schema/1.2/config">
                <interface xc:operation="replace">
                    <name>Ethernet0/0</name>
                    <mtu>1500</mtu>
                    <address>
                        <name>192.0.2.4</name>
                        <prefix-length>24</prefix-length>
                    </address>
                </interface>
            </top>
        </config>
    </edit-config>
</rpc>
<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <edit-config>
        <target>
            <running/>
        </target>
        <default-operation>none</default-operation>
        <config
            xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0">
            <top
                xmlns="http://example.com/schema/1.2/config">
                <protocols>
                    <ospf>
                        <area>
                            <name>0.0.0.0</name>
                            <interfaces>
                                <interface xc:operation="delete">
                                    <name>192.0.2.4</name>
                                </interface>
                            </interfaces>
                        </area>
                    </ospf>
                </protocols>
            </top>
        </config>
    </edit-config>
</rpc>

2.4 <copy-config>

将一个库的数据复制到另一个库。

<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <copy-config>
        <target>
            <running/>
        </target>
        <source>
            <url>https://user:password@example.com/cfg/new.txt</url>
        </source>
    </copy-config>
</rpc>

2.5 <delete-config>

删除一个数据库。但是<running/>库不能被删除。

<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <delete-config>
        <target>
            <startup/>
        </target>
    </delete-config>
</rpc>

2.6 <lock>

<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <lock>
        <target>
            <running/>
        </target>
    </lock>
</rpc>

 

2.7 <unlock>

<rpc message-id="101"
    xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
    <unlock>
        <target>
            <running/>
        </target>
    </unlock>
</rpc>

 

2.8 <close-session>

2.9 <kill-session>



这篇关于netconf协议的python配置模块ncclient的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程