Able to get show bgp summary output using CLI manually But 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$
Want to know the solution to find out the output for show bgp summary using YDK.
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 the following config, all it has 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()
Copied the script and executed in 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>
There is not much more could be suggested at this point. The code above works to find on a 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.
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
Comments
0 comments
Please sign in to leave a comment.