X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/319856a9ed410d3dd6493c837a3781176406e9ce..6510a58aeba9fa860c7bea3ef7554afe97a6b1c1:/lib/rpc.py diff --git a/lib/rpc.py b/lib/rpc.py index 9582abd..e3e5a73 100644 --- a/lib/rpc.py +++ b/lib/rpc.py @@ -1,4 +1,4 @@ -#!/usr/bin/python +# # # Copyright (C) 2006, 2007 Google Inc. @@ -187,7 +187,7 @@ class MirrorContextFactory: class Client: """RPC Client class. - This class, given a (remote) ethod name, a list of parameters and a + This class, given a (remote) method name, a list of parameters and a list of nodes, will contact (in parallel) all nodes, and return a dict of results (key: node name, value: result). @@ -288,7 +288,7 @@ def call_bridges_exist(node, bridges_list): def call_instance_start(node, instance, extra_args): - """Stars an instance. + """Starts an instance. This is a single-node call. @@ -311,6 +311,18 @@ def call_instance_shutdown(node, instance): return c.getresult().get(node, False) +def call_instance_reboot(node, instance, reboot_type, extra_args): + """Reboots an instance. + + This is a single-node call. + + """ + c = Client("instance_reboot", [instance.ToDict(), reboot_type, extra_args]) + c.connect(node) + c.run() + return c.getresult().get(node, False) + + def call_instance_os_add(node, inst, osdev, swapdev): """Installs an OS on the given instance. @@ -373,6 +385,18 @@ def call_instance_list(node_list): return c.getresult() +def call_node_tcp_ping(node, source, target, port, timeout, live_port_needed): + """Do a TcpPing on the remote node + + This is a single-node call. + """ + c = Client("node_tcp_ping", [source, target, port, timeout, + live_port_needed]) + c.connect(node) + c.run() + return c.getresult().get(node, False) + + def call_node_info(node_list, vg_name): """Return node information. @@ -465,13 +489,13 @@ def call_version(node_list): return c.getresult() -def call_blockdev_create(node, bdev, size, on_primary, info): +def call_blockdev_create(node, bdev, size, owner, on_primary, info): """Request creation of a given block device. This is a single-node call. """ - params = [bdev.ToDict(), size, on_primary, info] + params = [bdev.ToDict(), size, owner, on_primary, info] c = Client("blockdev_create", params) c.connect(node) c.run() @@ -490,13 +514,26 @@ def call_blockdev_remove(node, bdev): return c.getresult().get(node, False) -def call_blockdev_assemble(node, disk, on_primary): +def call_blockdev_rename(node, devlist): + """Request rename of the given block devices. + + This is a single-node call. + + """ + params = [(d.ToDict(), uid) for d, uid in devlist] + c = Client("blockdev_rename", params) + c.connect(node) + c.run() + return c.getresult().get(node, False) + + +def call_blockdev_assemble(node, disk, owner, on_primary): """Request assembling of a given block device. This is a single-node call. """ - params = [disk.ToDict(), on_primary] + params = [disk.ToDict(), owner, on_primary] c = Client("blockdev_assemble", params) c.connect(node) c.run() @@ -515,27 +552,27 @@ def call_blockdev_shutdown(node, disk): return c.getresult().get(node, False) -def call_blockdev_addchild(node, bdev, ndev): - """Request adding a new child to a (mirroring) device. +def call_blockdev_addchildren(node, bdev, ndevs): + """Request adding a list of children to a (mirroring) device. This is a single-node call. """ - params = [bdev.ToDict(), ndev.ToDict()] - c = Client("blockdev_addchild", params) + params = [bdev.ToDict(), [disk.ToDict() for disk in ndevs]] + c = Client("blockdev_addchildren", params) c.connect(node) c.run() return c.getresult().get(node, False) -def call_blockdev_removechild(node, bdev, ndev): - """Request removing a new child from a (mirroring) device. +def call_blockdev_removechildren(node, bdev, ndevs): + """Request removing a list of children from a (mirroring) device. This is a single-node call. """ - params = [bdev.ToDict(), ndev.ToDict()] - c = Client("blockdev_removechild", params) + params = [bdev.ToDict(), [disk.ToDict() for disk in ndevs]] + c = Client("blockdev_removechildren", params) c.connect(node) c.run() return c.getresult().get(node, False) @@ -601,41 +638,28 @@ def call_os_diagnose(node_list): result = c.getresult() new_result = {} for node_name in result: - nr = [] if result[node_name]: - for data in result[node_name]: - if data: - if isinstance(data, dict): - nr.append(objects.OS.FromDict(data)) - elif isinstance(data, tuple) and len(data) == 2: - nr.append(errors.InvalidOS(data[0], data[1])) - else: - raise errors.ProgrammerError("Invalid data from" - " xcserver.os_diagnose") + nr = [objects.OS.FromDict(oss) for oss in result[node_name]] + else: + nr = [] new_result[node_name] = nr return new_result -def call_os_get(node_list, name): +def call_os_get(node, name): """Returns an OS definition. - This is a multi-node call. + This is a single-node call. """ c = Client("os_get", [name]) - c.connect_list(node_list) + c.connect(node) c.run() - result = c.getresult() - new_result = {} - for node_name in result: - data = result[node_name] - if isinstance(data, dict): - new_result[node_name] = objects.OS.FromDict(data) - elif isinstance(data, tuple) and len(data) == 2: - new_result[node_name] = errors.InvalidOS(data[0], data[1]) - else: - new_result[node_name] = data - return new_result + result = c.getresult().get(node, False) + if isinstance(result, dict): + return objects.OS.FromDict(result) + else: + return result def call_hooks_runner(node_list, hpath, phase, env):