cancel
Showing results for 
Search instead for 
Did you mean: 
cancel
885
Views
0
Helpful
4
Replies

Getting IP address via Openconfig models

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'

 

 

 

Thanks & Regards
-- Uvindhu Jayasinghe --
1 Accepted Solution

Accepted Solutions

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
Yan Gorelik
YDK Solutions

View solution in original post

4 Replies 4

yangorelik
Spotlight
Spotlight

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

 

Yan Gorelik
YDK Solutions

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

 

Thanks & Regards
-- Uvindhu Jayasinghe --

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
Yan Gorelik
YDK Solutions

Hi Yan,

 

Issue resolved after re-installing libydk from source and updating openconfig models. Thanks for your support.

Thanks & Regards
-- Uvindhu Jayasinghe --