LoginSignup
1
0

More than 5 years have passed since last update.

NETCONF/YANG を使って、Ciscoルータのコンフィグ(BGP)を設定する(IOS-XE)

Posted at

何がやりたい?

NETCONF/YANGを使ってBGPの設定を追加したい。

確認したいポイント

下記の設定内容が、どのようにpayload部分のYANGモデルに該当しているのかを確認してください。

config
CSR1kv_R1#show running-config | section router bgp
router bgp 65000
 bgp router-id 1.1.1.1
 bgp log-neighbor-changes
 neighbor pg_ibgp peer-group
 neighbor pg_ibgp remote-as 65000
 neighbor pg_ibgp update-source Loopback0
 neighbor pg_ibgp next-hop-self
 neighbor 2.2.2.2 peer-group pg_ibgp
CSR1kv_R1#

スクリプト本体

edit_config_bgp.py
#!/usr/bin/env python

from ncclient import manager
from xml.dom import minidom
import lxml.etree as ET
import xmltodict
import json

payload = """
<config xmlns:xc="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
  <native xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-native">
    <router>
      <bgp xmlns="http://cisco.com/ns/yang/Cisco-IOS-XE-bgp">
        <id>65000</id>
        <bgp>
          <router-id>1.1.1.1</router-id>
          <log-neighbor-changes/>
        </bgp>
        <neighbor>
          <id>pg_ibgp</id>
          <peer-group/>
          <remote-as>65000</remote-as>
          <next-hop-self/>
          <update-source>
            <Loopback>0</Loopback>
          </update-source>
        </neighbor>
        <neighbor>
          <id>2.2.2.2</id>
          <peer-group>
            <peer-group-name>pg_ibgp</peer-group-name>
          </peer-group>
        </neighbor>
      </bgp>
    </router>
  </native>
</config>
"""

# connect to netconf agent
m = manager.connect(host='172.16.62.152', port=830, username='cisco', password='cisco', hostkey_verify=False, device_params={'name': 'iosxe'})

#response = m.get_config(source='running', filter=payload)
print '###########################################################################'
print '### XML'
print '###########################################################################'
response = m.edit_config(target='running', config=payload).xml
print response

print '###########################################################################'
print '### XML Formatstring'
print '###########################################################################'
data = ET.fromstring(response)
print(ET.tostring(data, pretty_print=True))

print '###########################################################################'
print '### Convert to Dictionary'
print '###########################################################################'
data_dict = xmltodict.parse(response)
print(data_dict)

print '###########################################################################'
print '### Convert to JSON'
print '###########################################################################'
data_jason = json.dumps(data_dict, indent=4)
print(data_jason)

スクリプトを実行した結果

XML
###########################################################################
### XML
###########################################################################
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:4140da79-2114-4462-8a35-05bb1a716822" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0"><ok/></rpc-reply>
XML(Formatstring)
###########################################################################
### XML Formatstring
###########################################################################
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" xmlns:nc="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="urn:uuid:4140da79-2114-4462-8a35-05bb1a716822">
  <ok/>
</rpc-reply>
Dictionary
###########################################################################
### Convert to Dictionary
###########################################################################
OrderedDict([(u'rpc-reply', OrderedDict([(u'@xmlns', u'urn:ietf:params:xml:ns:netconf:base:1.0'), (u'@message-id', u'urn:uuid:4140da79-2114-4462-8a35-05bb1a716822'), (u'@xmlns:nc', u'urn:ietf:params:xml:ns:netconf:base:1.0'), (u'ok', None)]))])
JSON
###########################################################################
### Convert to JSON
###########################################################################
{
    "rpc-reply": {
        "@xmlns": "urn:ietf:params:xml:ns:netconf:base:1.0", 
        "@message-id": "urn:uuid:4140da79-2114-4462-8a35-05bb1a716822", 
        "@xmlns:nc": "urn:ietf:params:xml:ns:netconf:base:1.0", 
        "ok": null
    }
}
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0