X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/1645d22dc118ee1df0a82a318c50d59861474627..14b3f9695d0b1dc605491c8231fc6cd94dca45a6:/lib/rpc.py diff --git a/lib/rpc.py b/lib/rpc.py index 8701945..6de365b 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: @@ -178,8 +185,8 @@ class Client: self.nc = {} self._ssl_params = \ - http.HttpSslParams(ssl_key_path=constants.SSL_CERT_FILE, - ssl_cert_path=constants.SSL_CERT_FILE) + http.HttpSslParams(ssl_key_path=constants.NODED_CERT_FILE, + ssl_cert_path=constants.NODED_CERT_FILE) def ConnectList(self, node_list, address_list=None): """Add a list of nodes to the target nodes. @@ -569,23 +576,23 @@ class RpcRunner(object): [self._InstDict(inst), reboot_type, shutdown_timeout]) - def call_instance_os_add(self, node, inst, reinstall): + def call_instance_os_add(self, node, inst, reinstall, debug): """Installs an OS on the given instance. This is a single-node call. """ return self._SingleNodeCall(node, "instance_os_add", - [self._InstDict(inst), reinstall]) + [self._InstDict(inst), reinstall, debug]) - def call_instance_run_rename(self, node, inst, old_name): + def call_instance_run_rename(self, node, inst, old_name, debug): """Run the OS rename script for an instance. This is a single-node call. """ return self._SingleNodeCall(node, "instance_run_rename", - [self._InstDict(inst), old_name]) + [self._InstDict(inst), old_name, debug]) def call_instance_info(self, node, instance, hname): """Returns information about a single instance. @@ -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. @@ -980,7 +988,7 @@ class RpcRunner(object): return self._SingleNodeCall(node, "blockdev_snapshot", [cf_bdev.ToDict()]) def call_snapshot_export(self, node, snap_bdev, dest_node, instance, - cluster_name, idx): + cluster_name, idx, debug): """Request the export of a given snapshot. This is a single-node call. @@ -988,7 +996,8 @@ class RpcRunner(object): """ return self._SingleNodeCall(node, "snapshot_export", [snap_bdev.ToDict(), dest_node, - self._InstDict(instance), cluster_name, idx]) + self._InstDict(instance), cluster_name, + idx, debug]) def call_finalize_export(self, node, instance, snap_disks): """Request the completion of an export operation. @@ -1017,7 +1026,7 @@ class RpcRunner(object): return self._SingleNodeCall(node, "export_info", [path]) def call_instance_os_import(self, node, inst, src_node, src_images, - cluster_name): + cluster_name, debug): """Request the import of a backup into an instance. This is a single-node call. @@ -1025,7 +1034,7 @@ class RpcRunner(object): """ return self._SingleNodeCall(node, "instance_os_import", [self._InstDict(inst), src_node, src_images, - cluster_name]) + cluster_name, debug]) def call_export_list(self, node_list): """Gets the stored exports list. @@ -1044,7 +1053,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 +1062,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).