From 2667a5e9b9da30368a270e0152fd3986209e50de Mon Sep 17 00:00:00 2001 From: Fabio Verboso Date: Wed, 8 Feb 2017 11:28:08 +0100 Subject: [PATCH] function to execute wamp rpc on the board from the container Change-Id: I88548deebc65e9a457a941dea8346a3b609d7ca5 --- iotronic/conductor/endpoints.py | 28 ++++++++++++++++++++++++++++ iotronic/conductor/rpcapi.py | 7 +++++++ 2 files changed, 35 insertions(+) diff --git a/iotronic/conductor/endpoints.py b/iotronic/conductor/endpoints.py index fe22767..6f05035 100644 --- a/iotronic/conductor/endpoints.py +++ b/iotronic/conductor/endpoints.py @@ -15,7 +15,9 @@ from iotronic.common import exception from iotronic import objects from iotronic.objects import base as objects_base +from oslo_config import cfg from oslo_log import log as logging +import oslo_messaging LOG = logging.getLogger(__name__) @@ -24,6 +26,12 @@ serializer = objects_base.IotronicObjectSerializer() class ConductorEndpoint(object): + def __init__(self): + transport = oslo_messaging.get_transport(cfg.CONF) + self.target = oslo_messaging.Target() + self.wamp_agent_client = oslo_messaging.RPCClient(transport, + self.target) + def echo(self, ctx, data): LOG.info("ECHO: %s" % data) return data @@ -69,3 +77,23 @@ class ConductorEndpoint(object): new_location.create() return serializer.serialize_entity(ctx, new_node) + + def execute_on_board(self, ctx, board, wamp_rpc_call, wamp_rpc_args): + + LOG.debug('Executing \"%s\" on the board: %s', wamp_rpc_call, board) + + uuid_agent = 'agent' + + s4t_topic = 's4t_invoke_wamp' + full_topic = uuid_agent + '.' + s4t_topic + + ctxt = {} + + self.target.topic = full_topic + self.wamp_agent_client.prepare(timeout=10) + + full_wamp_call = 'iotronic.' + board + "." + wamp_rpc_call + + return self.wamp_agent_client.call(ctxt, full_topic, + wamp_rpc_call=full_wamp_call, + data=wamp_rpc_args) diff --git a/iotronic/conductor/rpcapi.py b/iotronic/conductor/rpcapi.py index dc1ce8a..ac5544d 100644 --- a/iotronic/conductor/rpcapi.py +++ b/iotronic/conductor/rpcapi.py @@ -114,3 +114,10 @@ class ConductorAPI(object): """ cctxt = self.client.prepare(topic=topic or self.topic, version='1.0') return cctxt.call(context, 'destroy_node', node_id=node_id) + + def execute_on_board(self, context, board, wamp_rpc_call, + wamp_rpc_args=None, topic=None): + cctxt = self.client.prepare(topic=topic or self.topic, version='1.0') + return cctxt.call(context, 'execute_on_board', board=board, + wamp_rpc_call=wamp_rpc_call, + wamp_rpc_args=wamp_rpc_args)