X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/1645d22dc118ee1df0a82a318c50d59861474627..b13dfb92ab93b63c3feb238d27e8b5cd2a495fce:/lib/rpc.py diff --git a/lib/rpc.py b/lib/rpc.py index 8701945..69e692c 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -42,7 +42,8 @@ from ganeti import serializer from ganeti import constants from ganeti import errors -import ganeti.http.client +# pylint has a bug here, doesn't see this import +import ganeti.http.client # pylint: disable-msg=W0611 # Module level variable @@ -55,10 +56,12 @@ def Init(): Must be called before using any RPC function. """ - global _http_manager + global _http_manager # pylint: disable-msg=W0603 assert not _http_manager, "RPC module initialized more than once" + http.InitSsl() + _http_manager = http.client.HttpClientManager() @@ -68,7 +71,7 @@ def Shutdown(): Must be called before quitting the program. """ - global _http_manager + global _http_manager # pylint: disable-msg=W0603 if _http_manager: _http_manager.Shutdown() @@ -137,7 +140,7 @@ class RpcResult(object): else: return "No error information" - def Raise(self, msg, prereq=False): + def Raise(self, msg, prereq=False, ecode=None): """If the result has failed, raise an OpExecError. This is used so that LU code doesn't have to check for each @@ -156,7 +159,11 @@ class RpcResult(object): ec = errors.OpPrereqError else: ec = errors.OpExecError - raise ec(msg) + if ecode is not None: + args = (msg, prereq) + else: + args = (msg, ) + raise ec(*args) # pylint: disable-msg=W0142 class Client: @@ -730,13 +737,14 @@ class RpcRunner(object): # TODO: should this method query down nodes? return cls._StaticMultiNodeCall(node_list, "master_info", []) - def call_version(self, node_list): + @classmethod + def call_version(cls, node_list): """Query node version. This is a multi-node call. """ - return self._MultiNodeCall(node_list, "version", []) + return cls._StaticMultiNodeCall(node_list, "version", []) def call_blockdev_create(self, node, bdev, size, owner, on_primary, info): """Request creation of a given block device. @@ -1044,7 +1052,7 @@ class RpcRunner(object): return self._SingleNodeCall(node, "export_remove", [export]) @classmethod - def call_node_leave_cluster(cls, node): + def call_node_leave_cluster(cls, node, modify_ssh_setup): """Requests a node to clean the cluster information it has. This will remove the configuration information from the ganeti data @@ -1053,7 +1061,8 @@ class RpcRunner(object): This is a single-node call. """ - return cls._StaticSingleNodeCall(node, "node_leave_cluster", []) + return cls._StaticSingleNodeCall(node, "node_leave_cluster", + [modify_ssh_setup]) def call_node_volumes(self, node_list): """Gets all volumes on node(s).