久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

python網(wǎng)絡(luò)自動(dòng)化netconf配置模塊ncclient學(xué)習(xí)筆記

 法律安全 2020-02-13

ncclient介紹

ncclient簡(jiǎn)介:

ncclient是一個(gè)用于NETCONF客戶端的Python庫,。它旨在體用一個(gè)直觀的API,,將NETCONF的XML編碼特性映射到Python構(gòu)造和習(xí)語,并使編寫網(wǎng)絡(luò)管理腳本更容易,。

其他主要功能有:

  • 支持RFC 4741中定義的所有操作和功能,。
  • 管道請(qǐng)求。
  • 異步RPC請(qǐng)求,。
  • 保持XML的方式,,除非真正需要變更。
  • 擴(kuò)展,??梢暂p松添加新的傳輸映射和功能/操作。

Netconf相關(guān)原理,,概念:

netconf學(xué)習(xí)筆記: https://cshihong./2019/12/29/Netconf%E5%8D%8F%E8%AE%AE%E5%AD%A6%E4%B9%A0%E7%AC%94%E8%AE%B0/

ncclient主要使用python實(shí)現(xiàn)了netconf的相關(guān)操作,。

ncclient庫學(xué)習(xí)

manager文件內(nèi)主要功能:

這個(gè)模塊是周圍庫的一個(gè)抽象層,它公開所有的核心功能,。

manager支持的操作:

manager中的操作,,都是映射到ncclient.operations.xxx對(duì)應(yīng)的calss。如下:

manager.OPERATIONS
Out[10]: 
{'get': ncclient.operations.retrieve.Get,
 'get_config': ncclient.operations.retrieve.GetConfig,
 'get_schema': ncclient.operations.retrieve.GetSchema,
 'dispatch': ncclient.operations.retrieve.Dispatch,
 'edit_config': ncclient.operations.edit.EditConfig,
 'copy_config': ncclient.operations.edit.CopyConfig,
 'validate': ncclient.operations.edit.Validate,
 'commit': ncclient.operations.edit.Commit,
 'discard_changes': ncclient.operations.edit.DiscardChanges,
 'cancel_commit': ncclient.operations.edit.CancelCommit,
 'delete_config': ncclient.operations.edit.DeleteConfig,
 'lock': ncclient.operations.lock.Lock,
 'unlock': ncclient.operations.lock.Unlock,
 'create_subscription': ncclient.operations.subscribe.CreateSubscription,
 'close_session': ncclient.operations.session.CloseSession,
 'kill_session': ncclient.operations.session.KillSession,
 'poweroff_machine': ncclient.operations.flowmon.PoweroffMachine,
 'reboot_machine': ncclient.operations.flowmon.RebootMachine}

常見方法:

def make_device_handler(device_params):

創(chuàng)建一個(gè)設(shè)備處理對(duì)象,,該對(duì)象提供設(shè)備的特殊參數(shù)和功能,。它在其ncclient的代碼中多次調(diào)用。

如果device_params 參數(shù)沒有定義,,或者這個(gè)參數(shù)對(duì)應(yīng)的值在參數(shù)字典中不知道,,那么會(huì)返會(huì)一個(gè)默認(rèn)的處理程序。

使用實(shí)例:

manager.make_device_handler({'name':'huawei'})
  • Juniper: device_params={‘name’:’junos’}
  • Cisco CSR: device_params={‘name’:’csr’}
  • Cisco Nexus: device_params={‘name’:’nexus’}
  • Huawei: device_params={‘name’:’huawei’}
  • H3C: device_params={‘name’:’h3c’}

def connect_ssh(*args, **kws):

初始化一個(gè)連接,,通過:class:Manager over the SSH transport.

通過class:ncclient.transport.SSHSession實(shí)現(xiàn),。

return Manager(session, device_handler, **manager_params)

def connect_ioproc(*args, **kwds):

調(diào)用ncclient.thransport.third_party。

return Manager(session, device_handler, **manager_params)

def connect(*args, **kwds):

如果host為localhosthe和device_param為junos/local

? return connect_ioproc(*args, **kwds)

否則:

? return connect_ssh(*args, **kwds)

class Manager(object):

將RPC操作的API作為方法公開調(diào)用,。這些方法的返回類型取決于我們是處于異步模式(asynchronous mode)還是同步模式(synchronous mode),。

  • asynchronous mode(同步模式下):

同步模式下等待應(yīng)答并返回相應(yīng)的RPCReply對(duì)象。根據(jù)異常引發(fā)模式的不同,,應(yīng)答中的rpc錯(cuò)誤可能會(huì)被引發(fā)為RPCError異常,。

  • asynchronous mode(異步模式):

    異步模式下操作立即返回相應(yīng)的RPC對(duì)象。錯(cuò)誤處理和檢查是否已收到回復(fù)必須手動(dòng)處理,。

注意:在get()和get_config()操作中,,reply是GetReply 的一個(gè)實(shí)例, 它公開的附加屬性data (as Element )和data_xml (作為string ),,這是這些操作的主要關(guān)注點(diǎn),。

在傳輸層錯(cuò)誤的情況下,,例如意外的會(huì)話關(guān)閉,TransportError 將被觸發(fā),。

有關(guān)預(yù)期的操作行為和其他參數(shù)在:rfc4741中,。

Manager實(shí)例也是上下文管理器,所以你可以這樣使用它:

with manager.connect("host") as m:
            # do your stuff

#or like this::

m = manager.connect("host")
try:
     # do your stuff
finally:
     m.close_session()

def get():

檢索運(yùn)行配置和設(shè)備狀態(tài)信息,。 查詢的是設(shè)備當(dāng)前運(yùn)行的狀態(tài)數(shù)據(jù),,即只能從配置數(shù)據(jù)庫中獲取數(shù)據(jù)。

不需要使用source參數(shù)指定配置數(shù)據(jù)庫,。

操作成功,,Server回復(fù)的元素中含有參數(shù),中封裝了獲取的結(jié)果數(shù)據(jù),。否則在消息中返回,。

def get_config(source, filter=None)

檢索指定配置的全部或部分。

  • source:指定需要查詢的數(shù)據(jù)庫名稱,。有running (正在運(yùn)行的數(shù)據(jù)庫) ,,startup (下次設(shè)備啟動(dòng)配置數(shù)據(jù)庫), candidate (兩階段運(yùn)行數(shù)據(jù)庫,需要commit提交生效)

  • fileter: 過濾器,。過濾器可以采用如下方式:

    • A tuple of (type, criteria)

    這里的type必須是xpath 或者subtree.

    對(duì)于“xpath ,,criteria 應(yīng)該是包含XPath表達(dá)式的字符串。

    對(duì)于substree ,,criteria應(yīng)該是一個(gè)XML字符串或一個(gè)包含標(biāo)準(zhǔn)的元素對(duì)象,。

    • element 作為XML 字符串的一個(gè)Element 對(duì)象。

def edit_config(target, config, default_operation=None, test_option=None, error_option=None):

將指定配置的全部或部分加載到目標(biāo)配置數(shù)據(jù)存儲(chǔ)中,。

  • target:指定要配置的數(shù)據(jù)庫,。

  • config:必須放在元素中, 它可以指定為字符串或Element

  • default_operation: 如果指定,,必須是{ “merge”, “replace”, or “none” } 其中之一,。

  • test_option: { “test_then_set”, “set” } 之一。

  • error_option: { “stop-on-error”, “continue-on-error”, “rollback-on-error” } 之一,。

    The “rollback-on-error” error_option :rollback-on-error capability.

def copy_config(source, target):

源配置數(shù)據(jù)庫替換目標(biāo)配置數(shù)據(jù)庫,。如果目標(biāo)配置數(shù)據(jù)庫沒有創(chuàng)建,則直接創(chuàng)建配置數(shù)據(jù)庫,,否則用源配置數(shù)據(jù)庫直接覆蓋目標(biāo)配置數(shù)據(jù)庫,。

  • source: 是配置數(shù)據(jù)存儲(chǔ)的名稱,用作包含要復(fù)制的配置子樹的復(fù)制操作或配置元素的源 ,。
  • target: 是要用作復(fù)制操作目標(biāo)的配置數(shù)據(jù)存儲(chǔ)的名稱 。

def delete_config(target):

刪除配置數(shù)據(jù)庫,。

  • target: target指定要?jiǎng)h除的配置數(shù)據(jù)存儲(chǔ)的名稱或URL

def dispatch(rpc_command, source=None, filter=None):

  • rpc_command:指定以純文本或xml元素格式(取決于命令)發(fā)送rpc命令

例如:

dispatch('clear-arp-table')

或者:

xsd_fetch = new_ele('get-xnm-information')
sub_ele(xsd_fetch, 'type').text="xml-schema"
sub_ele(xsd_fetch, 'namespace').text="junos-configuration"
dispatch(xsd_fetch)

def lock(target):

允許客戶端鎖定設(shè)備的配置系統(tǒng),。

def unlock(target):

釋放一個(gè)配置鎖,。

def locked(self, target):

返回一個(gè)上鎖的數(shù)據(jù)庫的上下文件管理器,對(duì)應(yīng)執(zhí)行操作是:

return operations.LockContext(self._session, self._device_handler, target)

target : 是要鎖定的配置數(shù)據(jù)存儲(chǔ)的名稱,,

with m.locked("running"):
	# do your stuff

# ... instead of::
m.lock("running")
try:
    # do your stuff
finally:
    m.unlock("running")

def take_notification(self, block=True, timeout=None)

嘗試從接收的隊(duì)列中檢索一個(gè)通知,如果block為True,,則調(diào)用將等待直到通知收到為止。如果timeout是一個(gè)大于0的數(shù)字,,調(diào)用將等待它超時(shí)前收到通知的時(shí)間

如果在block為False或時(shí)沒有可用的通知超時(shí)后,,將不返回任何值。

return self._session.take_notification(block, timeout)

def close_session():

請(qǐng)求優(yōu)雅地終止NETCONF會(huì)話,,并關(guān)閉傳輸層會(huì)話,。

def kill_session(session_id):

強(qiáng)制去終止一個(gè)NETCONF會(huì)話。

  • session_id:要終止會(huì)話的NETCONF會(huì)話標(biāo)識(shí)符,。

def commit(confirmed=False, timeout=None, persist=None):

將數(shù)據(jù)庫配置數(shù)據(jù)提交,,轉(zhuǎn)化為設(shè)備的新當(dāng)運(yùn)行的配置即。取決于:candidate capability ,。

  • timeout: 操作確認(rèn)超時(shí)時(shí)間,,單位是秒,缺省值是600秒,。設(shè)備執(zhí)行操作后,,在確認(rèn)超時(shí)時(shí)間內(nèi),如果沒有執(zhí)行確認(rèn)操作,,則對(duì)數(shù)據(jù)庫中的配置進(jìn)行回滾,,配置數(shù)據(jù)恢復(fù)到執(zhí)行操作之前的狀態(tài),并放棄數(shù)據(jù)庫中的編輯數(shù)據(jù),。

  • persist: 使已確認(rèn)的提交在會(huì)話終止后繼續(xù)執(zhí)行,,并在正在進(jìn)行的已確認(rèn)的提交上設(shè)置token 。

def discard_changes():

將候選配置還原為當(dāng)前正在運(yùn)行的配置,。任何未提交的更改都會(huì)被丟棄,。

def validate(source):

驗(yàn)證指定配置的內(nèi)容。

  • source 是要驗(yàn)證的配置數(shù)據(jù)存儲(chǔ)或包含要驗(yàn)證的配置子樹的配置元素的名稱

self._session._server_capabilities

返會(huì)服務(wù)器支持的能力集,。

for i in m._session._server_capabilities:
      print(i)
urn:ietf:params:netconf:base:1.0
urn:ietf:params:netconf:base:1.1
urn:ietf:params:netconf:capability:writable-running:1.0
                        ....

self._session._client_capabilities

返會(huì)客戶端支持的能力集,。

for i in m._session._client_capabilities:
      print(i)

urn:ietf:params:netconf:base:1.0
urn:ietf:params:netconf:base:1.1
urn:ietf:params:netconf:capability:writable-running:1.0
....

self._session.id

返會(huì)一個(gè)seesion.id 。

self._session.connected

判斷seesion是否已經(jīng)建立,。

raise_mode:

指定哪些錯(cuò)誤引發(fā)RPCError 異常,。有效值是在RaiseMode 中定義的常量。默認(rèn)值是ALL ,。

timeout:

指定同步RPC請(qǐng)求的超時(shí),。

async_mode:

指定操作是異步執(zhí)行的(True)還是同步執(zhí)行的(False)(缺省值)。

capbilities 文件主要功能,;

表示netconf的能力集,。

ncclient.capabilities.schemes(url_uri):

給定一個(gè)具有scheme查詢字符串的URI(即:url capability URI),,將返回一個(gè)受支持的模式列表。

class ncclient.capabilities.Capabilities(capabilities) :

表示NETCONF客戶端或服務(wù)器可用的能力集,。它是由一個(gè)capability URI列表初始化的 ,。

“cap” in caps

可以通過":cap" in caps 判斷一個(gè)能力集是否是客戶端或者服務(wù)器所支持的能力集。cap也能簡(jiǎn)寫,。

除了URI之外,,對(duì)于urn:ietf:params:netconf:capability: name:version表示的能力,它們的簡(jiǎn)寫可以用作鍵,。例如,,對(duì)于urn:ietf:params:netconf:capability:candidate:1.0,簡(jiǎn)寫應(yīng)該是:candidate,。如果版本是重要的,,使用:candidate:1.0作為鍵。

iter(caps):

返會(huì)能力集的迭代對(duì)象,。

xml_文件主要功能:

用于創(chuàng)建,、解析和處理XML和ElementTree對(duì)象的方法。

XML異常:

exception ncclient.xml_.XMLError , 基于:ncclient.NCClientError

def to_xml(ele, enconding=“UTF-8”, pretty_print=False):

轉(zhuǎn)換并返回具有指定編碼的ele(Element)的XML,。

def to_ele(x, huge_tree=False):

轉(zhuǎn)換并返回XML文檔x的元素,。

ncclient.xml_.parse_root(raw):

有效地解析原始XML文檔的根元素,返回其限定名和屬性字典的元組,。

ncclient.xml_.validated_element(x, tags=None, attrs=None**)** :

檢查XML文檔或元素的根元素是否滿足提供的條件,。

  • tags: (如果指定)是單個(gè)允許的標(biāo)記名或一系列允許的替代項(xiàng)
  • attrs: (如果指定)是所需屬性的序列,每個(gè)屬性都可以是多個(gè)允許的替代項(xiàng)的序列
  • 如果不滿足要求,,則引發(fā)XMLError,。

transport-傳輸/會(huì)話層:

主要實(shí)現(xiàn)了NETCONF傳輸層連接。

session.py:

class ncclient.transport.Session(capabilities)

傳輸協(xié)議實(shí)現(xiàn)使用的基類,。

def add_listener(listener):

注冊(cè)一個(gè)監(jiān)聽器,,它將收到傳入消息和錯(cuò)誤的通知。

def client_capabilities():

客戶端的能力集,。

def connected():

返回會(huì)話的連接狀態(tài),。

def get_listener_instance(cls):

如果注冊(cè)了指定類型的偵聽器,則返回實(shí)例 ,。

def id():

表示會(huì)話id的字符串,。如果沒有初始化,為None,。

def remove_listener(listener):

注銷一些監(jiān)聽器;如果監(jiān)聽器沒有被注冊(cè),,將被忽略掉。

def server_capabilities():

返回服務(wù)器支持的能力集。

class ncclient.transport.SeesionListener:

會(huì)話監(jiān)聽器的基類,,當(dāng)接收到新的NETCONF消息或發(fā)生錯(cuò)誤時(shí),,會(huì)通知該類。

def callback(root, raw)

收到新的XML文檔時(shí)調(diào)用,。 root參數(shù)允許回調(diào)確定是否要進(jìn)一步處理文

  • root:是一個(gè)元組(tag, arrtibutes)類型。

    tag: 根元素限定名,。

    attributes:是屬性名的字典,。

  • row : 以字符串的形式包含XML文檔。

def errback(ex):

發(fā)生錯(cuò)誤時(shí)調(diào)用,。

ssh.py:

是ssh會(huì)話的實(shí)現(xiàn),。

ssh.default_unknow_host_cb(host, fingerprint):

如果未知的主機(jī)回調(diào)發(fā)現(xiàn)可接受的密鑰,則返回True,,否則返回False,。

默認(rèn)返回False,可能導(dǎo)致connet()引發(fā)SSHUnknowHost 異常,。

如果需要以編程方式驗(yàn)證主機(jī)密鑰,,需要供另一個(gè)有效的回調(diào)。

  • host:需要驗(yàn)證的主機(jī)名

  • fingerprint:表示主機(jī)指紋的16進(jìn)制字符串,。用冒號(hào)分隔,。

    例如: “4b:69:6c:72:6f:79:20:77:61:73:20:68:65:72:65:21”

class ncclient.transport.SSHSession(device_handler):

實(shí)現(xiàn)通過ssh的netconf會(huì)話連接。

connect(host[, port=830, timeout=None, unknown_host_cb=default_unknown_host_cb, username=None, password=None, key_filename=None, allow_agent=True, look_for_keys=True, ssh_config=None])

通過SSH連接并初始化NETCONF會(huì)話,。首先嘗試公鑰身份驗(yàn)證方法,,然后嘗試密碼身份驗(yàn)證。

若要完全禁用公鑰嘗試身份驗(yàn)證,,設(shè)置 allow_agent和look_for_keys作為False調(diào)用 ,。

  • host:要連接的主機(jī)名或者IP地址。
  • port:連接的端口,,默認(rèn)830,。有些設(shè)備可能是22。網(wǎng)絡(luò)設(shè)備也能配置自定義端口,。根據(jù)配置情況進(jìn)行指定,。
  • timeout:超時(shí)時(shí)間,是socket連接的可選超時(shí),。
  • unknow_host_cd: 當(dāng)服務(wù)器主機(jī)密鑰無法識(shí)別時(shí)調(diào)用,。有兩參數(shù)。host,,fingerprint,。
  • username: 連接ssh認(rèn)證的用戶名。
  • password:ssh用戶密碼,。
  • key_filename: 秘鑰文件,。
  • allow_agent: 是否啟用SSH代理,。
  • host_for_keys: 允許在~/.ssh/id_* 尋找ssh密鑰。
  • ssh_config: 對(duì)OpenSSH配置文件解析,,設(shè)置路徑,,例如:~/.ssh/config

def load_known_hosts(filename=None):

從指定文件中加載主機(jī)密鑰。從而可以多次調(diào)用,。如果未指定文件路徑,,會(huì)使用默認(rèn)位置:~/.ssh/know_hosts and ~/ssh/know_hosts

Errors:

  • exceptionncclient.transport.TransportError

    Bases: ncclient.NCClientError

  • exceptionncclient.transport.SessionCloseError(in_buf, out_buf=None)

    Bases: ncclient.transport.errors.TransportError

  • exceptionncclient.transport.SSHError

    Bases: ncclient.transport.errors.TransportError

  • exceptionncclient.transport.AuthenticationError

    Bases: ncclient.transport.errors.TransportError

    exception*ncclient.transport.SSHUnknownHostError(host, fingerprint)

    Bases: ncclient.transport.errors.SSHError

operations類的主要功能:

該文件夾內(nèi)主要定義了netconf操作的實(shí)現(xiàn)方法。

dir(operations)
Out[3]: 
['CancelCommit',
 'CloseSession',
 'Commit',
 'CopyConfig',
 'CreateSubscription',
 'DeleteConfig',
 'DiscardChanges',
 'Dispatch',
 'EditConfig',
 'Get',
 'GetConfig',
 'GetReply',
 'GetSchema',
 'KillSession',
 'Lock',
 'LockContext',
 'MissingCapabilityError',
 'OperationError',
 'PoweroffMachine',
 'RPC',
 'RPCError',
 'RPCReply',
 'RaiseMode',
 'RebootMachine',
 'TimeoutExpiredError',
 'Unlock',
 'Validate',
 'edit',
 'errors',
 'flowmon',
 'lock',
 'retrieve',
 'rpc',
 'session',
 'subscribe',
 'util']

RPC類:

class RPC是所有操作的基類,,直接對(duì)應(yīng)于rpc請(qǐng)求,。處理發(fā)出請(qǐng)求和接收回復(fù)。

classncclient.operations.RPC(session, device_handler, async=False, timeout=30, raise_mode=0)
  • sesssion : 是一個(gè)netconf的Session實(shí)例,。
  • device_handler: 設(shè)備廠商標(biāo)識(shí)
  • async: 請(qǐng)求是否異步模式,。
  • timeout:超時(shí)。
  • raise_mode = 0; 引發(fā)異常類型,。

classncclient.operations.RaiseMode Operations類異常類型如下:

定義應(yīng)如何處理RPC指示的錯(cuò)誤,。

  • ALL = 2, 不看錯(cuò)誤類型,,總是引發(fā),。
  • ERRORS = 1, 僅僅當(dāng)出現(xiàn)一個(gè)真正的錯(cuò)誤類型是才引發(fā),。
  • NONE = 0,, 不嘗試去引發(fā)任何類型的rpc-error作為RPCError.

def _assert(capability):

子類可以在發(fā)出RPC請(qǐng)求之前,使用此方法來驗(yàn)證NETCONF服務(wù)器具有的capability, 如果該capablility不可用,,將會(huì)引發(fā)一個(gè)MissingCapabilityError異常,。

def _request(op):

request 方法的實(shí)現(xiàn),發(fā)送RPC請(qǐng)求和處理回應(yīng),。

  • 在同步模式下,,阻塞直到收到RPCReply。

  • 在異步模式下,,立即返會(huì),。

  • op:是RPC請(qǐng)求的實(shí)際操作。xml類型的數(shù)據(jù),。

request():

操作的子類必須實(shí)現(xiàn)該方法,。通常,將所有請(qǐng)求構(gòu)建成一個(gè)Element元素op,,然后傳遞給_requests(op)去處理,。

RPCReply(raw)類:

表示一個(gè)rpc-reply,僅僅關(guān)注這個(gè)RPC請(qǐng)求操作是否成功。

def ok():

返會(huì)一個(gè)布爾值,表示RPC回復(fù)是否有錯(cuò)誤,。

RPCError(raw, errs=None):

表示rpc-error類型,。基類是ncclient.operations.errors.OperationError.

  • info:XML字符串,,或者None,。表示error-info 。
  • message:error-message元素的內(nèi)容如果存在或者None,。
  • path: error-path元素的內(nèi)容如果存在或者None,。
  • severity: error-severity元素的內(nèi)容。
  • tag: error-tag元素的內(nèi)容,。
  • type: error-type元素的內(nèi)容。

Retrieval檢索操作:

實(shí)現(xiàn)netconf查詢類操作,。操作類的基類都是: ncclient.operations.rpc.RPC

class Get():

class ncclient.operations.Get(session, device_handler, async=False, timeout=30, raise_mode=0)

def requests((self, filter=None, with_defaults=None):

檢索運(yùn)行配置和設(shè)備狀態(tài)信息

  • filter: 指定要檢索的配置部分(默認(rèn)檢索整個(gè)配置)
  • with_defaults: 定義從配置中檢索默認(rèn)值的顯式方法(參見RFC 6243)

class GetConfig():

class ncclient.operations.GetConfig(session, device_handler, async=False, timeout=30, raise_mode=0)

實(shí)現(xiàn)了request(source, filter=None), 檢索指定配置的全部或部分,。

  • source:指定要檢測(cè)的配置數(shù)據(jù)庫。
  • filter:過濾,。

class GetReply(raw):

基類是,; ncclient.operations.rpc.RPCReply

data元素的屬性添加到’ RPCReply ’

  • data: 和data_ele 一樣。
  • data_ele: 數(shù)據(jù)元素作為一個(gè)Element
  • data_xml: 數(shù)據(jù)元素作為一個(gè)XML字符串,。

class Dispatch():

classncclient.operations.Dispatch(session, device_handler, async=False, timeout=30, raise_mode=0)

request(rpc_command, source=None, filter=None)

rpc_command: 指定以純文本或xml元素格式(取決于命令).

使用示例:

dispatch('clear-arp-table')

or dispatch element like

xsd_fetch = new_ele('get-xnm-information')
sub_ele(xsd_fetch, 'type').text="xml-schema"
sub_ele(xsd_fetch, 'namespace').text="junos-configuration"
dispatch(xsd_fetch)

EditConfig():

實(shí)現(xiàn)通過netconf對(duì)設(shè)備進(jìn)行配置,。 將指定配置的全部或部分加載到目標(biāo)配置數(shù)據(jù)存儲(chǔ)中。

classncclient.operations.EditConfig(session, device_handler, async=False, timeout=30, raise_mode=0)

request(config, format='xml', target='candidate', default_operation=None, test_option=None, error_option=None)
  • target: 正在編輯的配置數(shù)據(jù)存儲(chǔ)的名稱
  • config:需要變更的配置,,它必須植根于配置元素,。它可以指定為字符串或Element。
  • default_operation: { “merge”, “replace”, or “none” } 三者之一,。
  • test_option: { “test_then_set”, “set” } 之一,。
  • error_option: { “stop-on-error”, “continue-on-error”, “rollback-on-error” } 之一。

DeleteConfig():

實(shí)現(xiàn)刪除配置的操作,。刪除配置數(shù)據(jù)庫,。

classncclient.operations.DeleteConfig(session, device_handler, async=False, timeout=30, raise_mode=0)

request(target)

CopyConfig():

用另一個(gè)完整配置數(shù)據(jù)存儲(chǔ)的內(nèi)容創(chuàng)建或替換整個(gè)配置數(shù)據(jù)存儲(chǔ)

classncclient.operations.CopyConfig(session, device_handler, async=False, timeout=30, raise_mode=0)

request(source, target)
  • source: 是配置數(shù)據(jù)存儲(chǔ)的名稱,用作包含要復(fù)制的配置子樹的復(fù)制操作或配置元素的源
  • target; 配置數(shù)據(jù)存儲(chǔ)的名稱是否要用作復(fù)制操作的目標(biāo),。

Validate():

驗(yàn)證指定配置的內(nèi)容,。

classncclient.operations.Validate(session, device_handler, async=False, timeout=30, raise_mode=0)

request(source='candidate')

Commit():

將候選配置提交為設(shè)備的新當(dāng)前配置。取決于: candidate capability.

classncclient.operations.Commit(session, device_handler, async=False, timeout=30, raise_mode=0)

request(confirmed=False, timeout=None, persist=None)

如果在超時(shí)間隔內(nèi)沒有后續(xù)提交,,確認(rèn)提交(即confiremed is True)將被還原,。如果沒有指定超時(shí),則確認(rèn)超時(shí)默認(rèn)為600秒(10分鐘),。

  • comfirmed: 是否確認(rèn)提交 ,。
  • timeout: 指定確認(rèn)超時(shí)(以秒為單位)
  • persit:使已確認(rèn)的提交在會(huì)話終止后繼續(xù)執(zhí)行,并在正在進(jìn)行的已確認(rèn)的提交上設(shè)置token。

DiscardChanges():

將候選配置還原為當(dāng)前正在運(yùn)行的配置,。任何未提交的更改都會(huì)被丟棄,。

classncclient.operations.DiscardChanges(session, device_handler, async=False, timeout=30, raise_mode=0)

request()

Lock():

允許客戶端鎖定設(shè)備的配置系統(tǒng)。

classncclient.operations.Lock(session, device_handler, async=False, timeout=30, raise_mode=0)

request(target='candidate')

Unlock():

釋放一個(gè)配置鎖,,這是以前通過鎖操作獲得的,。

classncclient.operations.Unlock(session, device_handler, async=False, timeout=30, raise_mode=0)

request(target='candidate')

CloseSession():

請(qǐng)求優(yōu)雅地終止NETCONF會(huì)話,并關(guān)閉傳輸,。

classncclient.operations.CloseSession(session, device_handler, async=False, timeout=30, raise_mode=0)

request()

KillSession():

強(qiáng)制終止一個(gè)NETCONF會(huì)話(不是當(dāng)前會(huì)話!)

classncclient.operations.KillSession(session, device_handler, async=False, timeout=30, raise_mode=0)

request(session_id)

使用ncclient獲取設(shè)備配置的python小程序示例

獲取acl 3900配置信息:

import logging
from string import Template
from ncclient import manager
from ncclient import operations

log = logging.getLogger(__name__)


def huawei_connect(host, port, user, password):
    return manager.connect(host=host,
                           port=port,
                           username=user,
                           password=password,
                           hostkey_verify = False,
                           device_params={'name': 'huawei'},
                           allow_agent = False,
                           look_for_keys = False)
    
def _check_response(rpc_obj, snippet_name):
    print("RPCReply for %s is %s" % (snippet_name, rpc_obj.xml))
    xml_str = rpc_obj.xml
    print(xml_str)
    if "<ok/>" in xml_str:
        print("%s successful" % snippet_name)
    else:
        print("Cannot successfully execute: %s" % snippet_name)  
        
    
def test_edit_config_running(host, port, user, password):
    #1.Create a NETCONF session
    with huawei_connect(host, port=port, user=user, password=password) as m:

        acl = '''
       <access-lists xmlns="urn:ietf:params:xml:ns:yang:ietf-acl" xmlns:hw-acl="urn:huawei:params:xml:ns:yang:huawei-acl" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0">
        <access-list>
          <access-control-list-name>3900</access-control-list-name>
          
        </access-list>
      </access-lists>

'''
        get = m.get_config(source='running', filter = ('subtree', acl))
        print(get)


if __name__ == '__main__':
    host = 'x.x.x.x'
    port = 830
    user = 'user'
    password = 'password'
    test_edit_config_running(host, port, user, password)

程序返會(huì)內(nèi)容:

<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:f6ec534a-0eb1-4aea-a627-de98705cc780">
  <data>
    <access-lists xmlns="urn:ietf:params:xml:ns:yang:ietf-acl" xmlns:hw-acl="urn:huawei:params:xml:ns:yang:huawei-acl">
      <access-list>
        <access-control-list-name>3900</access-control-list-name>
        <hw-acl:vsys>public</hw-acl:vsys>
        <access-list-entries>
          <access-list-entry>
            <rule-name>5</rule-name>
            <matches>
              <protocol>0</protocol>
              <source-ipv4-network>1.1.1.0/24</source-ipv4-network>
              <destination-ipv4-network>1.1.1.2/32</destination-ipv4-network>
            </matches>
            <actions>
              <permit/>
            </actions>
          </access-list-entry>
        </access-list-entries>
      </access-list>
    </access-lists>
  </data>
</rpc-reply>

附加:

華為Netconf開發(fā)指南: https://support.huawei.com/enterprise/zh/doc/EDOC1100109432

華為netconf API : https://support.huawei.com/enterprise/zh/doc/EDOC1100075576


參考資料: https://ncclient./en/latest/#

ncclient源碼: https://github.com/ncclient/ncclient


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn),。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹(jǐn)防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多