05-07-2020 07:00 AM
I tried to extract IP address details of Cisco always on CSR router interfaces using Netconf. However that was not successful with YDK openconfig models. Suspecting there is a bug on openconfig-models used for YDK.
Code
------
from ydk.services import CRUDService
from ydk.providers import NetconfServiceProvider
from ydk.models.openconfig.openconfig_interfaces import Interfaces
provider = NetconfServiceProvider(address="ios-xe-mgmt.cisco.com", port=10000, username="root", password="D_Vay!_10&", protocol="ssh")
crud = CRUDService()
interfaces= Interfaces()
interface = crud.read(provider, interfaces)
print(interfaces.interface[0].name) #<=> This line works
print(interfaces.interface[0].subinterfaces.subinterface[0].ipv4.addresses.address[0].ip) #<=> This line fails with following error
Traceback (most recent call last):
File "test.py", line 35, in
print(interfaces.interface[0].subinterfaces.subinterface[0].ipv4.addresses.address[0].ip)
File "/home/this_pc/ncclient/lib/python3.6/site-packages/ydk/types/py_types.py", line 776, in getitem
entity = self._entity_map[format(item)]
KeyError: '0'
Solved! Go to Solution.
05-08-2020 01:05 PM
Hi Uvindhu
Based on Libyang errors in your post, you are using older version of YDK, which does not include bug fix for 964. In order to overcome this issue you need reinstall from source libydk and then reinstall python core package. In short the procedure would be:
git clone -b 0.8.4 https://github.com/CiscoDevNet/ydk-gen
cd ydk-gen
./generate.py --libydk -is
# switch to your Python virtual environment if applicable
./generate.py --core -i
Before running the installation make sure the System requirements are met. See here for details.
Also the XE sandbox uses newer version of openconfig models, which includes the 'counters' container missing in published API. I have reinstalled the openconfig bundle (version 0.1.8) and uploaded it to pypi.org. To install the newer version of the openconfig bundle simply run:
pip install -U ydk-models-openconfig
With this changes I am getting with the script:
GigabitEthernet1
Configured IP Addresses:
10.10.20.48/24
GigabitEthernet2
Configured IP Addresses:
3.3.6.1/24
GigabitEthernet3
Loopback33
Configured IP Addresses:
3.3.3.21/24
Loopback3998
Configured IP Addresses:
3.3.9.5/24
05-07-2020 09:24 AM
Hello Uvindhu
The error has nothing to do with YDK. You just did not process the Interfaces instance properly - before accessing list item you need to check if the list has any items in it. I also suggest to enable INFO level of logging, so you can see the communication between your application and the device.
Here is my script and the running results:
#!/usr/bin/env python
#
from ydk.services import CRUDService
from ydk.providers import NetconfServiceProvider
from ydk.models.openconfig import openconfig_interfaces
import logging
def enable_logging(level):
log = logging.getLogger('ydk')
log.setLevel(level)
handler = logging.StreamHandler()
formatter = logging.Formatter(
"%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
log.addHandler(handler)
if __name__ == '__main__':
enable_logging(logging.INFO)
provider = NetconfServiceProvider(
address='sbx-iosxr-mgmt.cisco.com',
port=10000,
username='admin',
password='C1sco12345')
crud = CRUDService()
interfaces = openconfig_interfaces.Interfaces()
all_interfaces = crud.read(provider, interfaces)
for intf in all_interfaces.interface:
print(intf.name)
if intf.subinterfaces.subinterface:
for sub in intf.subinterfaces.subinterface:
if sub.ipv4.addresses.address:
print(" Configured IP Addresses:")
for addr in sub.ipv4.addresses.address:
print(" %s/%s" % (addr.ip, addr.config.prefix_length))
2020-05-07 09:06:40,797 - ydk - INFO - Path where models are to be downloaded: /Users/ygorelik/.ydk/sbx-iosxr-mgmt.cisco.com
2020-05-07 09:06:40,811 - ydk - INFO - Connected to sbx-iosxr-mgmt.cisco.com on port 10000 using ssh with timeout of -1
2020-05-07 09:06:40,811 - ydk - INFO - Executing CRUD read operation on [openconfig-interfaces:interfaces]
2020-05-07 09:06:40,811 - ydk - INFO - Executing 'get' RPC on [openconfig-interfaces:interfaces]
2020-05-07 09:06:40,820 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<filter><interfaces xmlns="http://openconfig.net/yang/interfaces"/></filter>
</get>
</rpc>
2020-05-07 09:06:44,469 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1">
<data>
<interfaces xmlns="http://openconfig.net/yang/interfaces">
<interface>
<name>Loopback100</name>
<config>
<name>Loopback100</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:softwareLoopback</type>
<enabled>true</enabled>
<description>***MERGE LOOPBACK 100****</description>
</config>
<state>
<name>Loopback100</name>
<enabled>true</enabled>
<admin-status>UP</admin-status>
<oper-status>UP</oper-status>
<last-change>163493</last-change>
<description>***MERGE LOOPBACK 100****</description>
<ifindex>6</ifindex>
<mtu>1500</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:softwareLoopback</type>
</state>
<subinterfaces>
<subinterface>
<index>0</index>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>1.1.1.100</ip>
<config>
<ip>1.1.1.100</ip>
<prefix-length>32</prefix-length>
</config>
<state>
<ip>1.1.1.100</ip>
<prefix-length>32</prefix-length>
<origin>STATIC</origin>
</state>
</address>
</addresses>
</ipv4>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>Loopback200</name>
<config>
<name>Loopback200</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:softwareLoopback</type>
<enabled>true</enabled>
<description>***MERGE LOOPBACK 200****</description>
</config>
<state>
<name>Loopback200</name>
<enabled>true</enabled>
<admin-status>UP</admin-status>
<oper-status>UP</oper-status>
<last-change>163493</last-change>
<description>***MERGE LOOPBACK 200****</description>
<ifindex>7</ifindex>
<mtu>1500</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:softwareLoopback</type>
</state>
<subinterfaces>
<subinterface>
<index>0</index>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>1.1.1.200</ip>
<config>
<ip>1.1.1.200</ip>
<prefix-length>32</prefix-length>
</config>
<state>
<ip>1.1.1.200</ip>
<prefix-length>32</prefix-length>
<origin>STATIC</origin>
</state>
</address>
</addresses>
</ipv4>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>Loopback777</name>
<config>
<name>Loopback777</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:softwareLoopback</type>
<enabled>true</enabled>
<description>test</description>
</config>
<state>
<name>Loopback777</name>
<enabled>true</enabled>
<admin-status>UP</admin-status>
<oper-status>UP</oper-status>
<last-change>86542</last-change>
<description>test</description>
<ifindex>17</ifindex>
<mtu>1500</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:softwareLoopback</type>
</state>
</interface>
<interface>
<name>MgmtEth0/RP0/CPU0/0</name>
<config>
<name>MgmtEth0/RP0/CPU0/0</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>true</enabled>
</config>
<state>
<name>MgmtEth0/RP0/CPU0/0</name>
<enabled>true</enabled>
<admin-status>UP</admin-status>
<oper-status>UP</oper-status>
<last-change>163492</last-change>
<counters>
<in-unicast-pkts>107656</in-unicast-pkts>
<in-octets>24164954</in-octets>
<out-unicast-pkts>116988</out-unicast-pkts>
<out-octets>98192617</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>222436</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>6</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.994+00:00</last-clear>
</counters>
<ifindex>2</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
<hw-mac-address>00:50:56:bb:c6:6e</hw-mac-address>
<counters>
<in-8021q-frames>0</in-8021q-frames>
<in-mac-pause-frames>0</in-mac-pause-frames>
<in-oversize-frames>0</in-oversize-frames>
<in-jabber-frames>0</in-jabber-frames>
<in-fragment-frames>0</in-fragment-frames>
<in-crc-errors>0</in-crc-errors>
<out-8021q-frames>0</out-8021q-frames>
<out-mac-pause-frames>0</out-mac-pause-frames>
</counters>
</state>
</ethernet>
<subinterfaces>
<subinterface>
<index>0</index>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>10.10.20.175</ip>
<config>
<ip>10.10.20.175</ip>
<prefix-length>24</prefix-length>
</config>
<state>
<ip>10.10.20.175</ip>
<prefix-length>24</prefix-length>
<origin>STATIC</origin>
</state>
</address>
</addresses>
<neighbors>
<neighbor>
<ip>10.10.20.48</ip>
<state>
<ip>10.10.20.48</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:e1:4e</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.60</ip>
<state>
<ip>10.10.20.60</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:94:d1</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.62</ip>
<state>
<ip>10.10.20.62</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:a0:34</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.64</ip>
<state>
<ip>10.10.20.64</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:ed:38</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.70</ip>
<state>
<ip>10.10.20.70</ip>
<origin>DYNAMIC</origin>
<link-layer-address>04:62:73:7a:b6:c0</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.71</ip>
<state>
<ip>10.10.20.71</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:60:22</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.72</ip>
<state>
<ip>10.10.20.72</ip>
<origin>DYNAMIC</origin>
<link-layer-address>3c:08:f6:ca:41:00</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.80</ip>
<state>
<ip>10.10.20.80</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:d4:65</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.95</ip>
<state>
<ip>10.10.20.95</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:2c:fc</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.99</ip>
<state>
<ip>10.10.20.99</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:af:87</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.140</ip>
<state>
<ip>10.10.20.140</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:45:eb</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.175</ip>
<state>
<ip>10.10.20.175</ip>
<origin>OTHER</origin>
<link-layer-address>00:50:56:bb:c6:6e</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.198</ip>
<state>
<ip>10.10.20.198</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:56:07</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.199</ip>
<state>
<ip>10.10.20.199</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:50:56:bb:6e:a4</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.253</ip>
<state>
<ip>10.10.20.253</ip>
<origin>DYNAMIC</origin>
<link-layer-address>08:96:ad:9e:44:4c</link-layer-address>
</state>
</neighbor>
<neighbor>
<ip>10.10.20.254</ip>
<state>
<ip>10.10.20.254</ip>
<origin>DYNAMIC</origin>
<link-layer-address>00:08:e3:ff:fd:90</link-layer-address>
</state>
</neighbor>
</neighbors>
</ipv4>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>GigabitEthernet0/0/0/0</name>
<config>
<name>GigabitEthernet0/0/0/0</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>true</enabled>
<description>TESTCONFIG_via_PYATS</description>
</config>
<state>
<name>GigabitEthernet0/0/0/0</name>
<enabled>true</enabled>
<admin-status>UP</admin-status>
<oper-status>UP</oper-status>
<last-change>116967</last-change>
<description>TESTCONFIG_via_PYATS</description>
<counters>
<in-unicast-pkts>53043</in-unicast-pkts>
<in-octets>6602528</in-octets>
<out-unicast-pkts>2</out-unicast-pkts>
<out-octets>204</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>53041</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>2</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>13</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.969+00:00</last-clear>
</counters>
<ifindex>8</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
</state>
</ethernet>
<subinterfaces>
<subinterface>
<index>0</index>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>20.1.1.1</ip>
<config>
<ip>20.1.1.1</ip>
<prefix-length>24</prefix-length>
</config>
<state>
<ip>20.1.1.1</ip>
<prefix-length>24</prefix-length>
<origin>STATIC</origin>
</state>
</address>
</addresses>
<neighbors>
<neighbor>
<ip>20.1.1.1</ip>
<state>
<ip>20.1.1.1</ip>
<origin>OTHER</origin>
<link-layer-address>00:50:56:bb:42:47</link-layer-address>
</state>
</neighbor>
</neighbors>
</ipv4>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>GigabitEthernet0/0/0/1</name>
<config>
<name>GigabitEthernet0/0/0/1</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>false</enabled>
</config>
<state>
<name>GigabitEthernet0/0/0/1</name>
<enabled>true</enabled>
<admin-status>DOWN</admin-status>
<oper-status>DOWN</oper-status>
<last-change>163536</last-change>
<counters>
<in-unicast-pkts>0</in-unicast-pkts>
<in-octets>0</in-octets>
<out-unicast-pkts>0</out-unicast-pkts>
<out-octets>0</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>0</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>0</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.972+00:00</last-clear>
</counters>
<ifindex>9</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
</state>
</ethernet>
</interface>
<interface>
<name>GigabitEthernet0/0/0/2</name>
<config>
<name>GigabitEthernet0/0/0/2</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>false</enabled>
</config>
<state>
<name>GigabitEthernet0/0/0/2</name>
<enabled>true</enabled>
<admin-status>DOWN</admin-status>
<oper-status>DOWN</oper-status>
<last-change>163536</last-change>
<counters>
<in-unicast-pkts>0</in-unicast-pkts>
<in-octets>0</in-octets>
<out-unicast-pkts>0</out-unicast-pkts>
<out-octets>0</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>0</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>0</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.974+00:00</last-clear>
</counters>
<ifindex>10</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
</state>
</ethernet>
</interface>
<interface>
<name>GigabitEthernet0/0/0/3</name>
<config>
<name>GigabitEthernet0/0/0/3</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>false</enabled>
</config>
<state>
<name>GigabitEthernet0/0/0/3</name>
<enabled>true</enabled>
<admin-status>DOWN</admin-status>
<oper-status>DOWN</oper-status>
<last-change>163536</last-change>
<counters>
<in-unicast-pkts>0</in-unicast-pkts>
<in-octets>0</in-octets>
<out-unicast-pkts>0</out-unicast-pkts>
<out-octets>0</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>0</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>0</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.977+00:00</last-clear>
</counters>
<ifindex>11</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
</state>
</ethernet>
</interface>
<interface>
<name>GigabitEthernet0/0/0/4</name>
<config>
<name>GigabitEthernet0/0/0/4</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>false</enabled>
</config>
<state>
<name>GigabitEthernet0/0/0/4</name>
<enabled>true</enabled>
<admin-status>DOWN</admin-status>
<oper-status>DOWN</oper-status>
<last-change>163536</last-change>
<counters>
<in-unicast-pkts>0</in-unicast-pkts>
<in-octets>0</in-octets>
<out-unicast-pkts>0</out-unicast-pkts>
<out-octets>0</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>0</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>0</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.979+00:00</last-clear>
</counters>
<ifindex>12</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
</state>
</ethernet>
</interface>
<interface>
<name>GigabitEthernet0/0/0/5</name>
<config>
<name>GigabitEthernet0/0/0/5</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>false</enabled>
</config>
<state>
<name>GigabitEthernet0/0/0/5</name>
<enabled>true</enabled>
<admin-status>DOWN</admin-status>
<oper-status>DOWN</oper-status>
<last-change>163536</last-change>
<counters>
<in-unicast-pkts>0</in-unicast-pkts>
<in-octets>0</in-octets>
<out-unicast-pkts>0</out-unicast-pkts>
<out-octets>0</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>0</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>0</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.981+00:00</last-clear>
</counters>
<ifindex>13</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
</state>
</ethernet>
</interface>
<interface>
<name>GigabitEthernet0/0/0/6</name>
<config>
<name>GigabitEthernet0/0/0/6</name>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
<enabled>false</enabled>
</config>
<state>
<name>GigabitEthernet0/0/0/6</name>
<enabled>true</enabled>
<admin-status>DOWN</admin-status>
<oper-status>DOWN</oper-status>
<last-change>163536</last-change>
<counters>
<in-unicast-pkts>0</in-unicast-pkts>
<in-octets>0</in-octets>
<out-unicast-pkts>0</out-unicast-pkts>
<out-octets>0</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>0</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>0</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.985+00:00</last-clear>
</counters>
<ifindex>14</ifindex>
<mtu>1514</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:ethernetCsmacd</type>
</state>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<auto-negotiate>false</auto-negotiate>
</config>
<state>
<auto-negotiate>false</auto-negotiate>
</state>
</ethernet>
</interface>
<interface>
<name>Null0</name>
<state>
<name>Null0</name>
<enabled>true</enabled>
<admin-status>UP</admin-status>
<oper-status>UP</oper-status>
<last-change>163533</last-change>
<counters>
<in-unicast-pkts>0</in-unicast-pkts>
<in-octets>0</in-octets>
<out-unicast-pkts>0</out-unicast-pkts>
<out-octets>0</out-octets>
<in-multicast-pkts>0</in-multicast-pkts>
<in-broadcast-pkts>0</in-broadcast-pkts>
<out-multicast-pkts>0</out-multicast-pkts>
<out-broadcast-pkts>0</out-broadcast-pkts>
<out-discards>0</out-discards>
<in-discards>0</in-discards>
<in-unknown-protos>0</in-unknown-protos>
<in-errors>0</in-errors>
<out-errors>0</out-errors>
<last-clear>2020-05-05T23:00:30.996+00:00</last-clear>
</counters>
<ifindex>1</ifindex>
<mtu>1500</mtu>
<type xmlns:idx="urn:ietf:params:xml:ns:yang:iana-if-type">idx:other</type>
</state>
</interface>
</interfaces>
</data>
</rpc-reply>
Loopback100
Configured IP Addresses:
1.1.1.100/32
Loopback200
Configured IP Addresses:
1.1.1.200/32
Loopback777
MgmtEth0/RP0/CPU0/0
Configured IP Addresses:
10.10.20.175/24
GigabitEthernet0/0/0/0
Configured IP Addresses:
20.1.1.1/24
GigabitEthernet0/0/0/1
GigabitEthernet0/0/0/2
GigabitEthernet0/0/0/3
GigabitEthernet0/0/0/4
GigabitEthernet0/0/0/5
GigabitEthernet0/0/0/6
Null0
2020-05-07 09:06:44,824 - ydk - INFO - Disconnected from device
Process finished with exit code 0
05-07-2020 11:07 PM
Hi,
Thanks for the explanation. I used the provided configuration and for 'sbx-iosxr-mgmt.cisco.com' extracting IP addresses works fine. However when used for 'ios-xe-mgmt.cisco.com' the IP addresses are not extracted. Please find the output below.
from ydk.services import CRUDService
from ydk.providers import NetconfServiceProvider
from ydk.models.openconfig import openconfig_interfaces
import logging
def enable_logging(level):
log = logging.getLogger('ydk')
log.setLevel(level)
handler = logging.StreamHandler()
formatter = logging.Formatter("%(asctime)s - %(name)s - %(levelname)s - %(message)s")
handler.setFormatter(formatter)
log.addHandler(handler)
def main():
provider = NetconfServiceProvider(address='ios-xe-mgmt.cisco.com', port=10000, username = 'root', password = 'D_Vay!_10&', protocol = 'ssh')
enable_logging(logging.INFO)
#provider = NetconfServiceProvider(address='sbx-iosxr-mgmt.cisco.com', port=10000, username='admin', password='C1sco12345')
crud = CRUDService()
interfaces = openconfig_interfaces.Interfaces()
all_interfaces = crud.read_config(provider, interfaces)
for intf in all_interfaces.interface:
print(intf.name)
if intf.subinterfaces.subinterface:
for sub in intf.subinterfaces.subinterface:
if sub.ipv4.addresses.address:
print(" Configured IP Addresses:")
for addr in sub.ipv4.addresses.address:
print(" %s/%s" % (addr.ip, addr.config.prefix_length))
if __name__ == "__main__":
main()
Output:
2020-05-08 11:36:35,890 - ydk - INFO - Executing CRUD read_config operation on [openconfig-interfaces:interfaces]
2020-05-08 11:36:35,890 - ydk - INFO - Executing 'get' RPC on [openconfig-interfaces:interfaces] from running
2020-05-08 11:36:35,912 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Invalid keyword "[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|"".
2020-05-08 11:36:35,913 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan-types" parsing failed.
2020-05-08 11:36:35,913 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan-types" module into "openconfig-vlan" failed.
2020-05-08 11:36:35,913 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan" parsing failed.
2020-05-08 11:36:35,913 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan" module into "cisco-xe-openconfig-interfaces-deviation" failed.
2020-05-08 11:36:35,914 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "cisco-xe-openconfig-interfaces-deviation" parsing failed.
2020-05-08 11:36:35,915 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Invalid keyword "[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|"".
2020-05-08 11:36:35,915 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan-types" parsing failed.
2020-05-08 11:36:35,915 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan-types" module into "openconfig-vlan" failed.
2020-05-08 11:36:35,916 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan" parsing failed.
2020-05-08 11:36:35,916 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan" module into "cisco-xe-openconfig-interfaces-deviation" failed.
2020-05-08 11:36:35,916 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "cisco-xe-openconfig-interfaces-deviation" parsing failed.
2020-05-08 11:36:35,917 - ydk - INFO - ============= Sending RPC to device =============
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0"><get-config xmlns="urn:ietf:params:xml:ns:netconf:base:1.0">
<source>
<running/>
</source>
<filter><interfaces xmlns="http://openconfig.net/yang/interfaces"/></filter>
</get-config>
</rpc>
2020-05-08 11:36:36,869 - ydk - INFO - ============= Received RPC from device =============
<?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="2">
<data>
<interfaces xmlns="http://openconfig.net/yang/interfaces">
<interface>
<name>GigabitEthernet1</name>
<config>
<name>GigabitEthernet1</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
<description>MANAGEMENT INTERFACE - DON'T TOUCH ME</description>
<enabled>true</enabled>
</config>
<subinterfaces>
<subinterface>
<index>0</index>
<config>
<index>0</index>
<description>MANAGEMENT INTERFACE - DON'T TOUCH ME</description>
<enabled>true</enabled>
</config>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>10.10.20.48</ip>
<config>
<ip>10.10.20.48</ip>
<prefix-length>24</prefix-length>
</config>
</address>
</addresses>
</ipv4>
<ipv6 xmlns="http://openconfig.net/yang/interfaces/ip">
<config>
<enabled>false</enabled>
</config>
</ipv6>
</subinterface>
</subinterfaces>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<mac-address>00:50:56:bb:e1:4e</mac-address>
<auto-negotiate>true</auto-negotiate>
</config>
</ethernet>
</interface>
<interface>
<name>GigabitEthernet2</name>
<config>
<name>GigabitEthernet2</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
<description>Configured by RESTCONF</description>
<enabled>true</enabled>
</config>
<subinterfaces>
<subinterface>
<index>0</index>
<config>
<index>0</index>
<description>Configured by RESTCONF</description>
<enabled>true</enabled>
</config>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>10.255.255.1</ip>
<config>
<ip>10.255.255.1</ip>
<prefix-length>24</prefix-length>
</config>
</address>
</addresses>
</ipv4>
<ipv6 xmlns="http://openconfig.net/yang/interfaces/ip">
<config>
<enabled>false</enabled>
</config>
</ipv6>
</subinterface>
</subinterfaces>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<mac-address>00:50:56:bb:10:5e</mac-address>
<auto-negotiate>true</auto-negotiate>
</config>
</ethernet>
</interface>
<interface>
<name>GigabitEthernet3</name>
<config>
<name>GigabitEthernet3</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:ethernetCsmacd</type>
<description>Network Interface</description>
<enabled>false</enabled>
</config>
<subinterfaces>
<subinterface>
<index>0</index>
<config>
<index>0</index>
<description>Network Interface</description>
<enabled>false</enabled>
</config>
<ipv6 xmlns="http://openconfig.net/yang/interfaces/ip">
<config>
<enabled>false</enabled>
</config>
</ipv6>
</subinterface>
</subinterfaces>
<ethernet xmlns="http://openconfig.net/yang/interfaces/ethernet">
<config>
<mac-address>00:50:56:bb:2e:4e</mac-address>
<auto-negotiate>true</auto-negotiate>
</config>
</ethernet>
</interface>
<interface>
<name>Loopback100</name>
<config>
<name>Loopback100</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:softwareLoopback</type>
<enabled>true</enabled>
</config>
<subinterfaces>
<subinterface>
<index>0</index>
<config>
<index>0</index>
<enabled>true</enabled>
</config>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>1.1.1.100</ip>
<config>
<ip>1.1.1.100</ip>
<prefix-length>32</prefix-length>
</config>
</address>
</addresses>
</ipv4>
<ipv6 xmlns="http://openconfig.net/yang/interfaces/ip">
<config>
<enabled>false</enabled>
</config>
</ipv6>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>Loopback200</name>
<config>
<name>Loopback200</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:softwareLoopback</type>
<enabled>true</enabled>
</config>
<subinterfaces>
<subinterface>
<index>0</index>
<config>
<index>0</index>
<enabled>true</enabled>
</config>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>1.1.1.200</ip>
<config>
<ip>1.1.1.200</ip>
<prefix-length>32</prefix-length>
</config>
</address>
</addresses>
</ipv4>
<ipv6 xmlns="http://openconfig.net/yang/interfaces/ip">
<config>
<enabled>false</enabled>
</config>
</ipv6>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>Loopback1234</name>
<config>
<name>Loopback1234</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:softwareLoopback</type>
<description>added</description>
<enabled>true</enabled>
</config>
<subinterfaces>
<subinterface>
<index>0</index>
<config>
<index>0</index>
<description>added</description>
<enabled>true</enabled>
</config>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>1.2.3.4</ip>
<config>
<ip>1.2.3.4</ip>
<prefix-length>32</prefix-length>
</config>
</address>
</addresses>
</ipv4>
<ipv6 xmlns="http://openconfig.net/yang/interfaces/ip">
<config>
<enabled>false</enabled>
</config>
</ipv6>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>Loopback11888</name>
<config>
<name>Loopback11888</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:softwareLoopback</type>
<description>tonto el que lo lea otra vez jajjajaj</description>
<enabled>true</enabled>
</config>
<subinterfaces>
<subinterface>
<index>0</index>
<config>
<index>0</index>
<description>tonto el que lo lea otra vez jajjajaj</description>
<enabled>true</enabled>
</config>
<ipv4 xmlns="http://openconfig.net/yang/interfaces/ip">
<addresses>
<address>
<ip>23.56.74.24</ip>
<config>
<ip>23.56.74.24</ip>
<prefix-length>24</prefix-length>
</config>
</address>
</addresses>
</ipv4>
<ipv6 xmlns="http://openconfig.net/yang/interfaces/ip">
<config>
<enabled>false</enabled>
</config>
</ipv6>
</subinterface>
</subinterfaces>
</interface>
<interface>
<name>VirtualPortGroup0</name>
<config>
<name>VirtualPortGroup0</name>
<type xmlns:ianaift="urn:ietf:params:xml:ns:yang:iana-if-type">ianaift:propVirtual</type>
<enabled>true</enabled>
</config>
</interface>
</interfaces>
</data>
</rpc-reply>
2020-05-08 11:36:36,896 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Invalid keyword "[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|"".
2020-05-08 11:36:36,896 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan-types" parsing failed.
2020-05-08 11:36:36,900 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan-types" module into "openconfig-vlan" failed.
2020-05-08 11:36:36,901 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan" parsing failed.
2020-05-08 11:36:36,901 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan" module into "openconfig-if-ip" failed.
2020-05-08 11:36:36,902 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-if-ip" parsing failed.
2020-05-08 11:36:36,909 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Invalid keyword "[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|"".
2020-05-08 11:36:36,910 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan-types" parsing failed.
2020-05-08 11:36:36,910 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan-types" module into "openconfig-vlan" failed.
2020-05-08 11:36:36,913 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan" parsing failed.
2020-05-08 11:36:36,914 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan" module into "openconfig-if-ip" failed.
2020-05-08 11:36:36,914 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-if-ip" parsing failed.
2020-05-08 11:36:36,915 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-if-ip" module into "cisco-xe-openconfig-if-ip-deviation" failed.
2020-05-08 11:36:36,915 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "cisco-xe-openconfig-if-ip-deviation" parsing failed.
2020-05-08 11:36:36,921 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Invalid keyword "[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|"".
2020-05-08 11:36:36,923 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan-types" parsing failed.
2020-05-08 11:36:36,924 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan-types" module into "openconfig-vlan" failed.
2020-05-08 11:36:36,924 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan" parsing failed.
2020-05-08 11:36:36,924 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan" module into "cisco-xe-openconfig-interfaces-deviation" failed.
2020-05-08 11:36:36,924 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "cisco-xe-openconfig-interfaces-deviation" parsing failed.
2020-05-08 11:36:36,933 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Invalid keyword "[1-9][0-9]{1,2}|[1-9])\.\.(409[0-4]|"".
2020-05-08 11:36:36,933 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan-types" parsing failed.
2020-05-08 11:36:36,934 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan-types" module into "openconfig-vlan" failed.
2020-05-08 11:36:36,934 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "openconfig-vlan" parsing failed.
2020-05-08 11:36:36,934 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Importing "openconfig-vlan" module into "cisco-xe-openconfig-interfaces-deviation" failed.
2020-05-08 11:36:36,934 - ydk - ERROR - Data is invalid according to the yang model. Libyang error: Module "cisco-xe-openconfig-interfaces-deviation" parsing failed.
GigabitEthernet1
GigabitEthernet2
GigabitEthernet3
Loopback100
Loopback200
Loopback1234
Loopback11888
VirtualPortGroup0
2020-05-08 11:36:37,213 - ydk - INFO - Disconnected from device
05-08-2020 01:05 PM
Hi Uvindhu
Based on Libyang errors in your post, you are using older version of YDK, which does not include bug fix for 964. In order to overcome this issue you need reinstall from source libydk and then reinstall python core package. In short the procedure would be:
git clone -b 0.8.4 https://github.com/CiscoDevNet/ydk-gen
cd ydk-gen
./generate.py --libydk -is
# switch to your Python virtual environment if applicable
./generate.py --core -i
Before running the installation make sure the System requirements are met. See here for details.
Also the XE sandbox uses newer version of openconfig models, which includes the 'counters' container missing in published API. I have reinstalled the openconfig bundle (version 0.1.8) and uploaded it to pypi.org. To install the newer version of the openconfig bundle simply run:
pip install -U ydk-models-openconfig
With this changes I am getting with the script:
GigabitEthernet1
Configured IP Addresses:
10.10.20.48/24
GigabitEthernet2
Configured IP Addresses:
3.3.6.1/24
GigabitEthernet3
Loopback33
Configured IP Addresses:
3.3.3.21/24
Loopback3998
Configured IP Addresses:
3.3.9.5/24
05-09-2020 01:08 AM
Hi Yan,
Issue resolved after re-installing libydk from source and updating openconfig models. Thanks for your support.
Discover and save your favorite ideas. Come back to expert answers, step-by-step guides, recent topics, and more.
New here? Get started with these tips. How to use Community New member guide