Change in vdsm[master]: jsonrpcvdscli: create a client for vdsm with jsonrpc

ykaplan at redhat.com ykaplan at redhat.com
Wed Mar 25 17:42:37 UTC 2015


Yeela Kaplan has uploaded a new change for review.

Change subject: jsonrpcvdscli: create a client for vdsm with jsonrpc
......................................................................

jsonrpcvdscli: create a client for vdsm with jsonrpc

Change-Id: Ib9dbd70d28968db1305628281015f7b2379c8058
Signed-off-by: Yeela Kaplan <ykaplan at redhat.com>
---
A lib/vdsm/jsonrpcvdscli.py
1 file changed, 80 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/vdsm refs/changes/03/39203/1

diff --git a/lib/vdsm/jsonrpcvdscli.py b/lib/vdsm/jsonrpcvdscli.py
new file mode 100644
index 0000000..3dd8258
--- /dev/null
+++ b/lib/vdsm/jsonrpcvdscli.py
@@ -0,0 +1,80 @@
+#
+# Copyright 2015 Red Hat, Inc.
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA
+#
+# Refer to the README and COPYING files for full details of the license
+#
+
+from functools import partial
+
+from rpc.Bridge import InvalidCall
+from yajsonrpc import \
+    JsonRpcError, \
+    JsonRpcClient, \
+    JsonRpcRequest, \
+    CALL_TIMEOUT
+
+
+command_converter = {
+    'ping': 'Host.ping',
+    'destroy': 'VM.destroy',
+    'getVmStats': 'VM.getStats',
+    'migrationCreate': 'VM.migrationCreate',
+}
+
+
+class _Server:
+
+    def __init__(self, client):
+        self._client = client
+
+    def _callMethod(self, methodName, *args):
+        try:
+            method = command_converter[methodName]
+        except AttributeError as e:
+            raise InvalidCall(methodName, args, e)
+
+        req = JsonRpcRequest(methodName, args, reqId=str(uuid4()))
+        call = self._client.call_async(req)
+        call.wait(CALL_TIMEOUT)
+
+        resp = call.responses[0]
+
+        if resp.error is not None:
+            raise JsonRpcError(resp.error['code'], resp.error['message'])
+
+        return resp.result
+
+    def migrationCreate(self, params):
+        self._callMethod(command_converter['migrationCreate'],
+                         params['vmId'],
+                         params)
+        return {'status': {'code': 0}}
+
+    def __getattr__(self, methodName):
+        return partial(self._callMethod(methodName))
+
+    def __del__(self):
+        self._client.close()
+
+
+
+def connect(reactor, client_socket):
+    client = JsonRpcClient(reactor.createClient(client_socket))
+    client.connect()
+    server = _Server(client)
+
+    return server
\ No newline at end of file


-- 
To view, visit https://gerrit.ovirt.org/39203
To unsubscribe, visit https://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ib9dbd70d28968db1305628281015f7b2379c8058
Gerrit-PatchSet: 1
Gerrit-Project: vdsm
Gerrit-Branch: master
Gerrit-Owner: Yeela Kaplan <ykaplan at redhat.com>


More information about the vdsm-patches mailing list