X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/96acbc09b70c82051e2156744bf1ae6752004cb7..033d58b0590360498499f2913ece3f32ee88f830:/lib/rpc.py diff --git a/lib/rpc.py b/lib/rpc.py index bb665bf..8101538 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -83,9 +83,6 @@ class RpcResult(object): failed, and therefore we use this class to encapsulate the result. @ivar data: the data payload, for successful results, or None - @type failed: boolean - @ivar failed: whether the operation failed at transport level (not - application level on the remote node) @ivar call: the name of the RPC call @ivar node: the name of the node to which we made the call @ivar offline: whether the operation failed because the node was @@ -97,12 +94,10 @@ class RpcResult(object): """ def __init__(self, data=None, failed=False, offline=False, call=None, node=None): - self.failed = failed self.offline = offline self.call = call self.node = node if offline: - self.failed = True self.fail_msg = "Node is marked offline" self.data = self.payload = None elif failed: @@ -152,14 +147,6 @@ class RpcResult(object): ec = errors.OpExecError raise ec(msg) - def RemoteFailMsg(self): - """Check if the remote procedure failed. - - @return: the fail_msg attribute - - """ - return self.fail_msg - class Client: """RPC Client class. @@ -450,6 +437,15 @@ class RpcRunner(object): return self._SingleNodeCall(node, "storage_modify", [su_name, su_args, name, changes]) + def call_storage_execute(self, node, su_name, su_args, name, op): + """Executes an operation on a storage unit. + + This is a single-node call. + + """ + return self._SingleNodeCall(node, "storage_execute", + [su_name, su_args, name, op]) + def call_bridges_exist(self, node, bridges_list): """Checks if a node has all the bridges given. @@ -799,8 +795,12 @@ class RpcRunner(object): This is a single-node call. """ - return self._SingleNodeCall(node, "blockdev_getmirrorstatus", - [dsk.ToDict() for dsk in disks]) + result = self._SingleNodeCall(node, "blockdev_getmirrorstatus", + [dsk.ToDict() for dsk in disks]) + if not result.fail_msg: + result.payload = [objects.BlockDevStatus.FromDict(i) + for i in result.payload] + return result def call_blockdev_find(self, node, disk): """Request identification of a given block device. @@ -809,7 +809,7 @@ class RpcRunner(object): """ result = self._SingleNodeCall(node, "blockdev_find", [disk.ToDict()]) - if not result.failed and result.payload is not None: + if not result.fail_msg and result.payload is not None: result.payload = objects.BlockDevStatus.FromDict(result.payload) return result @@ -822,6 +822,15 @@ class RpcRunner(object): params = [instance_name, [cf.ToDict() for cf in disks]] return self._SingleNodeCall(node, "blockdev_close", params) + def call_blockdev_getsizes(self, node, disks): + """Returns the size of the given disks. + + This is a single-node call. + + """ + params = [[cf.ToDict() for cf in disks]] + return self._SingleNodeCall(node, "blockdev_getsize", params) + def call_drbd_disconnect_net(self, node_list, nodes_ip, disks): """Disconnects the network of the given drbd devices. @@ -901,7 +910,7 @@ class RpcRunner(object): """ result = self._SingleNodeCall(node, "os_get", [name]) - if not result.failed and isinstance(result.data, dict): + if not result.fail_msg and isinstance(result.data, dict): result.data = objects.OS.FromDict(result.data) return result @@ -939,6 +948,17 @@ class RpcRunner(object): return self._SingleNodeCall(node, "blockdev_grow", [cf_bdev.ToDict(), amount]) + def call_blockdev_export(self, node, cf_bdev, + dest_node, dest_path, cluster_name): + """Export a given disk to another node. + + This is a single-node call. + + """ + return self._SingleNodeCall(node, "blockdev_export", + [cf_bdev.ToDict(), dest_node, dest_path, + cluster_name]) + def call_blockdev_snapshot(self, node, cf_bdev): """Request a snapshot of the given block device.