12-12-2016 07:47 PM
YANG models not only define configuration and operational data. They also define remote procedure calls or commands. Cisco IOS XR 6.1.2 starts introducing models for those RPCs or commands. Those models define how to roll back config, test SNMP traps or generate custom syslog messages. An RPC model specifies whether the RPC takes input data and whether it produces output data.
In YDK 0.5.1, we introduced the Executor service which allows you to execute RPCs. This service supports a single operation (execute_rpc) and is currently documented at:
http://ydk.cisco.com/py/docs/ydk.services.html#executorservice-provides-api-to-execute-rpcs
Watch the ydk-py-samples repository for a series of upcoming sample apps that execute RPCs. Stay tuned!
10-04-2017 08:54 AM
Hi Santiago,
I am trying to use Python Executor service, but I got this error.
Do you know if execute_rpc method support ing 0.6.1 release ?
Thanks
-Thang
===========================================================
File "./lum.py", line 31, in exec_rpc
inst.execute_rpc(session, rpc)
File "/home/tdo/.local/lib/python2.7/site-packages/ydk/services/executor_service.py", line 32, in execute_rpc
return self._es.execute_rpc(provider, entity, top_entity)
File "/usr/lib/python2.7/contextlib.py", line 35, in __exit__
self.gen.throw(type, value, traceback)
File "/home/tdo/.local/lib/python2.7/site-packages/ydk/errors/error_handler.py", line 82, in handle_runtime_error
_raise(_exc)
File "/home/tdo/.local/lib/python2.7/site-packages/ydk/errors/error_handler.py", line 56, in _raise
raise exc
ydk.errors.YPYError: Unable to cast Python instance to C++ type (compile in debug mode for details)
10-04-2017 10:35 AM
10-04-2017 11:16 AM
Hi Abhi,
Here is my script
=================
from __future__ import print_function
from __future__ import absolute_import
from ydk.types import Empty
from ydk.services import CRUDService
from ydk.services import ExecutorService
import logging
from session_mgr import establish_session, init_logging
from ydk.models.lumentum.ietf_netconf import Get, GetConfig
from ydk.errors import YPYError
def srv_run(crud_service, session):
# GET
service = ExecutorService()
conf = GetConfig()
service.execute_rpc(service, session, conf)
if __name__ == "__main__":
init_logging()
provider = establish_session()
crud_service = CRUDService()
srv_run(crud_service, provider)
exit()
==============
And the log
tdo@ubuntu:~/ydk-gen/gen-api/python$ ./exec.py -u thang -p mypassword --host 10.100.211.201
Establishing connection with device 10.100.211.201:830 using ssh :
Path where models are to be downloaded: /home/tdo/.ydk/10.100.211.201:830
Connected to 10.100.211.201 on port 830 using ssh with timeout of -1
Connected to 10.100.211.201 on port 830 using ssh with timeout of -1
connection established...
Traceback (most recent call last):
File "./exec.py", line 38, in <module>
srv_run(crud_service, provider)
File "./exec.py", line 31, in srv_run
service.execute_rpc(service, session, conf)
File "/home/tdo/.local/lib/python2.7/site-packages/ydk/services/executor_service.py", line 32, in execute_rpc
return self._es.execute_rpc(provider, entity, top_entity)
File "/usr/lib/python2.7/contextlib.py", line 35, in __exit__
self.gen.throw(type, value, traceback)
File "/home/tdo/.local/lib/python2.7/site-packages/ydk/errors/error_handler.py", line 82, in handle_runtime_error
_raise(_exc)
File "/home/tdo/.local/lib/python2.7/site-packages/ydk/errors/error_handler.py", line 56, in _raise
raise exc
ydk.errors.YPYServiceError: incompatible function arguments. The following argument types are supported:
1. (self: ydk_.services.ExecutorService, provider: ydk_.providers.ServiceProvider, entity: ydk_.types.Entity, top_entity: ydk_.types.Entity=None) -> ydk_.types.Entity
Invoked with: <ydk_.services.ExecutorService object at 0x7f834a9ca0a0>, <ydk.services.executor_service.ExecutorService object at 0x7f834a9dc5f0>, <ydk_.providers.NetconfServiceProvider object at 0x7f834a9ca570>, <ydk.models.lumentum.ietf_netconf.GetConfig object at 0x7f834a9dc9b0>
Disconnected from device
Disconnected from device
10-04-2017 12:08 PM
Hi Thang,
As the error says, the arguments used for execute_rpc() function are wrong. Try the below :
service.execute_rpc(service, session, conf)
If you are interested in using netconf RPCs like get-config, you could look at netconf service. See an example here.
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