08-31-2017 04:17 AM
I am completely out of my wits now :(.
I was trying to use YDK on a GNS3 virtual set-up based on Cisco 15.2 IoS image. But looks like 15.2 IoS doesnt support the YDK (https://communities.cisco.com/thread/84989).
Is there any way for me to for e.g configure bgp or anyother openconfig modules using some virtual router environment ? Basically looking for any virtual environment that supports NETCONF and on which I can test my ydk apps ?
Solved! Go to Solution.
08-31-2017 09:23 AM
Hi Roshan,
If you are looking for a management agent which supports netconf, you could look at the free version of confd:
08-31-2017 09:23 AM
Hi Roshan,
If you are looking for a management agent which supports netconf, you could look at the free version of confd:
09-07-2017 11:16 PM
Hi,
I have been trying confd and tried to load mpls yang module using confd command and copying the .fxs file.
I am getting the below error when I run the sample mpls script. Any pointers as to what I have missed ?
show netconf-state shows that the module has got loaded.
tcs-ThinkCentre-M92p# show netconf-state | include mpls
netconf-state capabilities capability http://openconfig.net/yang/ldp?module=mpls-ldp&revision=2014-07-07
netconf-state capabilities capability http://openconfig.net/yang/mpls?module=mpls&revision=2014-12-12
netconf-state capabilities capability http://openconfig.net/yang/mpls-types?module=mpls-types&revision=2015-02-01
netconf-state capabilities capability http://openconfig.net/yang/rsvp?module=mpls-rsvp&revision=2014-07-07
netconf-state capabilities capability http://openconfig.net/yang/sr?module=mpls-sr&revision=2014-07-07
mpls 2014-12-12 yang http://openconfig.net/yang/mpls [ NETCONF ]
mpls-igp 2014-07-07 yang http://openconfig.net/yang/mpls [ NETCONF ]
mpls-ldp 2014-07-07 yang http://openconfig.net/yang/ldp [ NETCONF ]
mpls-rsvp 2014-07-07 yang http://openconfig.net/yang/rsvp [ NETCONF ]
mpls-sr 2014-07-07 yang http://openconfig.net/yang/sr [ NETCONF ]
mpls-static 2015-02-01 yang http://openconfig.net/yang/mpls [ NETCONF ]
mpls-te 2014-07-07 yang http://openconfig.net/yang/mpls [ NETCONF ]
mpls-types 2015-02-01 yang http://openconfig.net/yang/mpls-types [ NETCONF ]
tcs-ThinkCentre-M92p#
<session-id>64</session-id></hello>
2017-09-08 11:29:45,957 - ydk - INFO - Path where models are to be downloaded: /home/tcs/.ydk/0.0.0.0:2022
2017-09-08 11:29:45,957 - ydk - DEBUG - Creating libyang context in path: /home/tcs/.ydk/0.0.0.0:2022
2017-09-08 11:29:45,962 - ydk - DEBUG - Module 'ydk' Revision '2016-02-26'
2017-09-08 11:29:45,962 - ydk - DEBUG - Getting module ydk submodule none
2017-09-08 11:29:45,962 - ydk - DEBUG - Looking for file in folder: /home/tcs/.ydk/0.0.0.0:2022
2017-09-08 11:29:45,962 - ydk - DEBUG - Opening file /home/tcs/.ydk/0.0.0.0:2022/ydk@2016-02-26.yang
2017-09-08 11:29:45,962 - ydk - DEBUG - Path found with rev: true. Path without rev: false
2017-09-08 11:29:45,968 - ydk - DEBUG - Module 'ietf-netconf' Revision '2011-06-01'
2017-09-08 11:29:45,968 - ydk - DEBUG - Getting module ietf-netconf submodule none
2017-09-08 11:29:45,969 - ydk - DEBUG - Looking for file in folder: /home/tcs/.ydk/0.0.0.0:2022
2017-09-08 11:29:45,969 - ydk - DEBUG - Opening file /home/tcs/.ydk/0.0.0.0:2022/ietf-netconf@2011-06-01.yang
2017-09-08 11:29:45,969 - ydk - DEBUG - Path found with rev: true. Path without rev: false
2017-09-08 11:29:45,974 - ydk - DEBUG - Populating new module schema 'yang'
2017-09-08 11:29:45,974 - ydk - DEBUG - Populating new module schema 'ietf-inet-types'
2017-09-08 11:29:45,974 - ydk - DEBUG - Populating new module schema 'ietf-yang-types'
2017-09-08 11:29:45,974 - ydk - DEBUG - Populating new module schema 'ietf-yang-library'
2017-09-08 11:29:45,974 - ydk - DEBUG - Populating new module schema 'ydk'
2017-09-08 11:29:45,974 - ydk - DEBUG - Populating new module schema 'ietf-netconf'
2017-09-08 11:29:45,974 - ydk - INFO - Connected to 0.0.0.0 on port 2022 using ssh
2017-09-08 11:29:45,983 - ydk - INFO - Executing CRUD create operation
2017-09-08 11:29:45,983 - ydk - DEBUG - Creating root data node with path '/openconfig-mpls:mpls'
2017-09-08 11:29:45,983 - ydk - ERROR - Libyang ERROR: Module not found. Path: '/openconfig-mpls'
2017-09-08 11:29:45,983 - ydk - ERROR - Path 'openconfig-mpls:mpls' is invalid
Traceback (most recent call last):
File "mpls.py", line 94, in <module>
crud.create(provider, mpls)
File "/usr/local/lib/python2.7/dist-packages/ydk/errors/error_handler.py", line 112, in helper
return func(self, provider, entity, *args, **kwargs)
File "/usr/local/lib/python2.7/dist-packages/ydk/services/crud_service.py", line 30, in create
return self._crud.create(provider, entity)
File "/usr/lib/python2.7/contextlib.py", line 35, in __exit__
self.gen.throw(type, value, traceback)
File "/usr/local/lib/python2.7/dist-packages/ydk/errors/error_handler.py", line 82, in handle_runtime_error
_raise(_exc)
File "/usr/local/lib/python2.7/dist-packages/ydk/errors/error_handler.py", line 56, in _raise
raise exc
ydk.errors.YPYInvalidArgumentError: Path is invalid: openconfig-mpls:mpls
2017-09-08 11:29:45,992 - ydk - INFO - Disconnected from device
2017-09-08 11:29:45,993 - ydk - DEBUG - libnetconf TRACE: Writing message (session 64): <?xml version="1.0" encoding="UTF-8"?>
<rpc xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1">
<close-session/>
</rpc>
2017-09-08 11:29:45,993 - ydk - DEBUG - libnetconf TRACE: Received message (session 64): <?xml version="1.0" encoding="UTF-8"?>
<rpc-reply xmlns="urn:ietf:params:xml:ns:netconf:base:1.0" message-id="1"><ok/></rpc-reply>
09-11-2017 09:03 AM
Based on the error, I'm not sure if the openconfig-mpls model is being downloaded correctly. YDK uses the get-schema RPC to download models. Can you make sure you have correctly set up this? See this for details:
09-14-2017 02:15 AM
Got it working fine now with confd. I had to clean up all yang modules from confd directory and again manually create fxs file from yang modules and copy the same into etc/confd.
Thanks all for your help.
09-14-2017 10:50 AM
Great! Glad it is working now.
09-18-2017 03:34 AM
Extremely sorry to be asking again but as a next step, I tried creating my own yang file as shown below.
module rosh {
container rosh {
uses config;
}
grouping config {
leaf version {
...
}
....
container ospf {
container graceful-restart {
....
}
}
}
}
I generated the ydk libraries using ydk-gen and installed the same. Now when I am trying to execute the script which uses the python libraries I am getting the below error. Looks like some issue with the yang file I created.
Ydk-gen creates the python attribute "_perform_setattr". When I compared it with the openconfig library I see the func not present as part of the mpls lib.
My ydk lib :
def __setattr__(self, name, value):
self._perform_setattr(Configuration, ['version'], name, value)
Openconfig MPLS ydk lib :
def __setattr__(self, name, value):
self._check_monkey_patching_error(name, value)
with _handle_type_error():
if name in self.__dict__ and isinstance(self.__dict__[name], YList):
raise YPYModelError("Attempt to assign value of '{}' to YList ldata. "
"Please use list append or extend method."
.format(value))
Couple of questions from my side :
1) Can I use ydk-gen to create libraries for custom yang files ? ( I beleive yes, pls correct me)
2) Under what conditions does _perform_setattr gets created ? I checked file :printer/python/class_inits_printer.py:_print_class_setattr_body" but didnt quiet understand it.
3) Do I have to implement the func _perform_setattr ?
09-18-2017 09:04 AM
Hi Roshan,
This is caused by a mismatch between the ydk core and the bundle versions. Please reinstall the ydk core from your ydkgen repository. To do this:
pip uninstall ydk -y
cd ydk-gen/sdk/python/core
python setup.py sdist
pip install dist/ydk*.tar.gz
09-18-2017 08:59 PM
Hi Abhirame,
Thanks for your input. I am trying to generate the source and install as suggested by you but getting error when installing the new ydk core. Installing ydk core from ydk-py works fine but when done from ydk-gen it gives error.
Below are the steps I followed :
1) $ sudo apt-get install libcurl4-openssl-dev libpcre3-dev libssh-dev libxml2-dev libxslt1-dev libtool-bin cmake python3-dev python-dev ===========> Works fine
2)./generate.py --python --core ===========> Works fine
3)pip install gen-api/python/ydk/dist/ydk*.tar.gz ===========> Gives the below error
4) generate and install bundle ===========> Works fine
$ ./generate.py --python --bundle profiles/<name-of-profile>.json
$ pip install gen-api/python/<name-of-bundle>-bundle/dist/ydk*.tar.gz
I was going through the below thread but not able to make out how exactly it was resolved ?
https://communities.cisco.com/thread/84511?start=0&tstart=0
Error:
======
Scanning dependencies of target ydk_
[ 50%] Building CXX object CMakeFiles/ydk_.dir/python.cpp.o
/tmp/pip-cDhU42-build/python.cpp:22:35: fatal error: ydk/restconf_client.hpp: No such file or directory
compilation terminated.
CMakeFiles/ydk_.dir/build.make:62: recipe for target 'CMakeFiles/ydk_.dir/python.cpp.o' failed
make[2]: *** [CMakeFiles/ydk_.dir/python.cpp.o] Error 1
CMakeFiles/Makefile2:67: recipe for target 'CMakeFiles/ydk_.dir/all' failed
make[1]: *** [CMakeFiles/ydk_.dir/all] Error 2
Makefile:83: recipe for target 'all' failed
make: *** [all] Error 2
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/tmp/pip-cDhU42-build/setup.py", line 157, in <module>
zip_safe=False,
File "/usr/lib/python2.7/distutils/core.py", line 151, in setup
dist.run_commands()
File "/usr/lib/python2.7/distutils/dist.py", line 953, in run_commands
self.run_command(cmd)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/usr/local/lib/python2.7/dist-packages/setuptools/command/install.py", line 61, in run
return orig.install.run(self)
File "/usr/lib/python2.7/distutils/command/install.py", line 601, in run
self.run_command('build')
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/usr/lib/python2.7/distutils/command/build.py", line 128, in run
self.run_command(cmd_name)
File "/usr/lib/python2.7/distutils/cmd.py", line 326, in run_command
self.distribution.run_command(command)
File "/usr/lib/python2.7/distutils/dist.py", line 972, in run_command
cmd_obj.run()
File "/tmp/pip-cDhU42-build/setup.py", line 69, in run
self.build_extension(ext)
File "/tmp/pip-cDhU42-build/setup.py", line 94, in build_extension
subprocess.check_call(['cmake', '--build', '.'], cwd=self.build_temp)
File "/usr/lib/python2.7/subprocess.py", line 541, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['cmake', '--build', '.']' returned non-zero exit status 2
09-18-2017 10:44 PM
Hi Abhirame,
Please dont bother I got it fixed.
I had to update clang on my ubuntu machine and than compile both cpp core and python core to be able to install the same.
09-19-2017 09:14 PM
Hi,
Any pointers as to how can I debug NetconfServiceProvider.
When from my application script I execute the below netconf api I get the error as shown.
But the same thing works well with ssh as in "ssh -p 830 test@172.16.172.128 -s netconf".
Tried the same with non-default port using both ssh and app.
>>>provider = NetconfServiceProvider(address='172.16.172.128', port=830, username='test', password='test123', protocol='ssh')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
RuntimeError: YCPPClientError: Could not connect to 172.16.172.128
09-19-2017 09:49 PM
Can you make sure you are specifying the correct port when connecting to the device?
09-19-2017 10:48 PM
Yes, the port numbers are correct. I tried to capture packets for both ssh and netconfserviceprovider transaction and I see only one difference.
For ssh case one of the the TCP ACK from my machine to the DUT shows up as "SSH-2. 0-OpenSSH_7.2" and for ydk case it shows as "SSH-2. 0-libssh-0.6.3"
Could this be the cause of the issue ? Is there a way for me to change the ssh for netconfserviceprovider from libssh to openssh ?
09-06-2017 06:48 PM
You may want to try the YDK sandbox on dcloud.cisco.com. Look for "Cisco IOS XR YANG Development Kit Sandbox" in the catalog. When you instantiate the sandbox, you get a Linux host acting as controller for two IOS XR devices connected back to back. The controller has YDK pre-installed with hundreds of sample apps. Note that dcloud also supports SSL VPN connections, so you can connect remotely to the sandbox and run the apps from your own development environment. If you're new to dcloud, check out the dCloud YouTube channel.
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