Unable to get show bgp summary output using YDK

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-17-2017 09:19 PM
Hi ,
Manually we able to get show bgp summary output using CLI .
Unable to get the same show bgp summary output using YDK
script details:
from ydk.services import CRUDService,CodecService
from ydk.providers import NetconfServiceProvider,CodecServiceProvider
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_shellutil_oper \
as xr_shellutil_oper
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_ipv4_bgp_oper
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_ipv4_bgp_datatypes
from datetime import timedelta
provider = NetconfServiceProvider(address="192.168.10.10",
username="username1",
password="password1",
protocol="ssh")
crud = CRUDService()
instance = Cisco_IOS_XR_ipv4_bgp_oper.Bgp.Instances.Instance()
instance.instance_name = 'default'
vrf = Cisco_IOS_XR_ipv4_bgp_oper.Bgp.Instances.Instance.InstanceActive.Vrfs.Vrf()
vrf.vrf_name = 'default'
neighbor =Cisco_IOS_XR_ipv4_bgp_oper.Bgp.Instances.Instance.InstanceStandby.Vrfs.Vrf.Neighbors.Neighbor()
vrf.neighbors.neighbor.append(neighbor)
instance.instance_active.vrfs.vrf.append(vrf)
bgp.instances.instance.append(instance)
bgp_networks = crud.read(provider, neighbor,only_config=False)
print dir(bgp_networks)
print int(bgp_networks.neighbor_address)
print str(bgp_networks.connection_established_time)
print int(bgp_networks.connection_established_time)
provider.close()
Error output
-----------------
fabric@FabricAutomation:~/jay$ python bgp_neighbor1.py
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
Traceback (most recent call last):
File "bgp_neighbor1.py", line 42, in <module>
print int(bgp_networks.neighbor_address)
AttributeError: 'NoneType' object has no attribute 'neighbor_address'
fabric@FabricAutomation:~/jay$
kindly let us know solution to findout the output for show bgp summary using YDK.
Thanks
Jay
- Labels:
-
YANG Development Kit (YDK)
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-18-2017 01:43 AM
Jay,
Remember that the XR Oper data model for BGP and VRF content model the default VRF in a separate subtree. Here is a simple example that:
Queries for the default BGP instance
Iterates over the result:
For each instance (just the one called ‘default’):
Get a reference to the default VRF
Iterate over all neighbors, and for each neighbor:
Print the neighbor address
Print the remote AS
In my config, all I have is:
RP/0/RP0/CPU0:ios#show run router bgp
Tue Apr 18 07:31:26.138 UTC
router bgp 666
address-family ipv4 unicast
network 192.168.0.0/16
!
neighbor 192.168.1.1
remote-as 1
!
!
Hopefully the code below will be enough to get you started:
from ydk.services import CRUDService,CodecService
from ydk.providers import NetconfServiceProvider,CodecServiceProvider
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_shellutil_oper as xr_shellutil_oper
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_ipv4_bgp_oper
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_ipv4_bgp_datatypes
from datetime import timedelta
from ydk.types import READ
provider = NetconfServiceProvider(address="127.0.0.1",
port=8300,
username="cisco",
password="cisco",
protocol="ssh")
crud = CRUDService()
q_instance = Cisco_IOS_XR_ipv4_bgp_oper.Bgp.Instances.Instance()
q_instance.instance_name = 'default'
q_instances = Cisco_IOS_XR_ipv4_bgp_oper.Bgp.Instances()
q_instances.instance.append(q_instance)
instances = crud.read(provider, q_instances)
for inst in instances.instance:
print('Instance: %s' % inst.instance_name)
default_vrf = inst.instance_active.default_vrf
for n in default_vrf.neighbors.neighbor:
print(' neighbor %s' % n.neighbor_address)
print(' remote-as: %s' % n.remote_as)
provider.close()
Cheers,
Einar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-18-2017 02:44 AM
HI ,
I copied your script and executed in my setup .
got the below output :
fabric@FabricAutomation:~/jay$ sudo python bgp_neigh.py
Instance: default
[]
fabric@FabricAutomation:~/jay$
Getting empty list
However we got output using nccclient .
<data>
<bgp xmlns="http://cisco.com/ns/yang/Cisco-IOS-XR-ipv4-bgp-oper">
<instances>
<instance>
<instance-name>default</instance-name>
<instance-active>
<default-vrf>
<neighbors>
<neighbor>
<neighbor-address>10.10.10.1</neighbor-address>
</neighbor>
<neighbor>
<neighbor-address>10.10.10.2</neighbor-address>
</neighbor>
</neighbors>
</default-vrf>
</instance-active>
</instance>
</instances>
</bgp>
</data>
</rpc-reply>
kindly do the needful for resolution
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-18-2017 03:26 AM
Jay,
I'm sorry, but there is not much more I can suggest at this point. The code as I suggested above works find on my test instance of xrv9k. You can try enabling debugs. For example:
import logging
LOGGING_TO_ENABLE = [
'ncclient.transport.session',
'ncclient.operations.rpc',
'ydk.providers',
]
handler = logging.StreamHandler()
for l in LOGGING_TO_ENABLE:
logger = logging.getLogger(l)
logger.addHandler(handler)
logger.setLevel(logging.DEBUG)
This will enable ncclient debugs and some YDK debug and may let you see what problems there may be.
Cheers,
Einar

- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
04-18-2017 09:34 AM
Here's a streamlined version assuming that you only care about default instance and global routing space. Script output:
$ ./nc-read-xr-ipv4-bgp-oper-99-ydk.py ssh://xx:xx@host
Neighbor: 172.16.255.2
Established time: 224
$
Script:
#!/usr/bin/env python2
#
# Copyright 2016 Cisco Systems, Inc.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
Read default VRF for model Cisco-IOS-XR-ipv4-bgp-oper.
usage: nc-read-xr-ipv4-bgp-oper-99-ydk.py [-h] [-v] device
positional arguments:
device NETCONF device (ssh://user:password@host:port)
optional arguments:
-h, --help show this help message and exit
-v, --verbose print debugging messages
"""
from argparse import ArgumentParser
from urlparse import urlparse
from ydk.services import CRUDService
from ydk.providers import NetconfServiceProvider
from ydk.models.cisco_ios_xr import Cisco_IOS_XR_ipv4_bgp_oper
import logging
if __name__ == "__main__":
"""Execute main program."""
parser = ArgumentParser()
parser.add_argument("-v", "--verbose", help="print debugging messages",
action="store_true")
parser.add_argument("device",
help="NETCONF device (ssh://user:password@host:port)")
args = parser.parse_args()
device = urlparse(args.device)
# log debug messages if verbose argument specified
if args.verbose:
logger = logging.getLogger("ydk")
logger.setLevel(logging.DEBUG)
handler = logging.StreamHandler()
formatter = logging.Formatter(("%(asctime)s - %(name)s - "
"%(levelname)s - %(message)s"))
handler.setFormatter(formatter)
logger.addHandler(handler)
# create NETCONF provider
provider = NetconfServiceProvider(address=device.hostname,
port=device.port,
username=device.username,
password=device.password,
protocol=device.scheme)
# create CRUD service
crud = CRUDService()
instance = Cisco_IOS_XR_ipv4_bgp_oper.Bgp.Instances.Instance() # create object
instance.instance_name = 'default'
default_vrf = crud.read(provider, instance.instance_active.default_vrf)
for neighbor in default_vrf.neighbors.neighbor:
print "Neighbor: {}".format(neighbor.neighbor_address)
print "Established time: {}".format(neighbor.connection_established_time)
provider.close()
exit()
# End of script
