X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/4a90bd4ff3bf5a0076f8b209023b134e3bb22834..1c3231aad9e5dddbe9490d49896434000cec6dd9:/lib/server/noded.py?ds=sidebyside diff --git a/lib/server/noded.py b/lib/server/noded.py index aa9243f..386e568 100644 --- a/lib/server/noded.py +++ b/lib/server/noded.py @@ -45,7 +45,7 @@ from ganeti import jstore from ganeti import daemon from ganeti import http from ganeti import utils -from ganeti import storage +from ganeti.storage import container from ganeti import serializer from ganeti import netutils from ganeti import pathutils @@ -57,6 +57,16 @@ import ganeti.http.server # pylint: disable=W0611 queue_lock = None +def _extendReasonTrail(trail, source, reason=""): + """Extend the reason trail with noded information + + The trail is extended by appending the name of the noded functionality + """ + assert trail is not None + trail_source = "%s:%s" % (constants.OPCODE_REASON_SRC_NODED, source) + trail.append((trail_source, reason, utils.EpochNano())) + + def _PrepareQueueLock(): """Try to prepare the queue lock. @@ -113,12 +123,14 @@ def _DecodeImportExportIO(ieio, ieioargs): def _DefaultAlternative(value, default): - """Returns the given value, unless it is None. In that case, returns a - default alternative. + """Returns value or, if evaluating to False, a default value. + + Returns the given value, unless it evaluates to False. In the latter case the + default value is returned. - @param value: The value to return if it is not None. - @param default: The value to return as a default alternative. - @return: The given value or the default alternative.\ + @param value: Value to return if it doesn't evaluate to False + @param default: Default value + @return: Given value or the default """ if value: @@ -367,12 +379,12 @@ class NodeRequestHandler(http.server.HttpServerHandler): return backend.BlockdevClose(params[0], disks) @staticmethod - def perspective_blockdev_getsize(params): + def perspective_blockdev_getdimensions(params): """Compute the sizes of the given block devices. """ disks = [objects.Disk.FromDict(cf) for cf in params[0]] - return backend.BlockdevGetsize(disks) + return backend.BlockdevGetdimensions(disks) @staticmethod def perspective_blockdev_export(params): @@ -402,9 +414,9 @@ class NodeRequestHandler(http.server.HttpServerHandler): disk list must all be drbd devices. """ - nodes_ip, disks = params + nodes_ip, disks, target_node_uuid = params disks = [objects.Disk.FromDict(cf) for cf in disks] - return backend.DrbdDisconnectNet(nodes_ip, disks) + return backend.DrbdDisconnectNet(target_node_uuid, nodes_ip, disks) @staticmethod def perspective_drbd_attach_net(params): @@ -414,10 +426,10 @@ class NodeRequestHandler(http.server.HttpServerHandler): disk list must all be drbd devices. """ - nodes_ip, disks, instance_name, multimaster = params + nodes_ip, disks, instance_name, multimaster, target_node_uuid = params disks = [objects.Disk.FromDict(cf) for cf in disks] - return backend.DrbdAttachNet(nodes_ip, disks, - instance_name, multimaster) + return backend.DrbdAttachNet(target_node_uuid, nodes_ip, disks, + instance_name, multimaster) @staticmethod def perspective_drbd_wait_sync(params): @@ -427,9 +439,9 @@ class NodeRequestHandler(http.server.HttpServerHandler): disk list must all be drbd devices. """ - nodes_ip, disks = params + nodes_ip, disks, target_node_uuid = params disks = [objects.Disk.FromDict(cf) for cf in disks] - return backend.DrbdWaitSync(nodes_ip, disks) + return backend.DrbdWaitSync(target_node_uuid, nodes_ip, disks) @staticmethod def perspective_drbd_helper(params): @@ -520,7 +532,7 @@ class NodeRequestHandler(http.server.HttpServerHandler): """ (su_name, su_args, name, fields) = params - return storage.GetStorage(su_name, *su_args).List(name, fields) + return container.GetStorage(su_name, *su_args).List(name, fields) @staticmethod def perspective_storage_modify(params): @@ -528,7 +540,7 @@ class NodeRequestHandler(http.server.HttpServerHandler): """ (su_name, su_args, name, changes) = params - return storage.GetStorage(su_name, *su_args).Modify(name, changes) + return container.GetStorage(su_name, *su_args).Modify(name, changes) @staticmethod def perspective_storage_execute(params): @@ -536,7 +548,7 @@ class NodeRequestHandler(http.server.HttpServerHandler): """ (su_name, su_args, name, op) = params - return storage.GetStorage(su_name, *su_args).Execute(name, op) + return container.GetStorage(su_name, *su_args).Execute(name, op) # bridge -------------------------- @@ -577,16 +589,19 @@ class NodeRequestHandler(http.server.HttpServerHandler): """ instance = objects.Instance.FromDict(params[0]) timeout = params[1] - return backend.InstanceShutdown(instance, timeout) + trail = params[2] + _extendReasonTrail(trail, "shutdown") + return backend.InstanceShutdown(instance, timeout, trail) @staticmethod def perspective_instance_start(params): """Start an instance. """ - (instance_name, startup_paused) = params + (instance_name, startup_paused, trail) = params instance = objects.Instance.FromDict(instance_name) - return backend.StartInstance(instance, startup_paused) + _extendReasonTrail(trail, "start") + return backend.StartInstance(instance, startup_paused, trail) @staticmethod def perspective_migration_info(params): @@ -619,9 +634,9 @@ class NodeRequestHandler(http.server.HttpServerHandler): """Migrates an instance. """ - instance, target, live = params + cluster_name, instance, target, live = params instance = objects.Instance.FromDict(instance) - return backend.MigrateInstance(instance, target, live) + return backend.MigrateInstance(cluster_name, instance, target, live) @staticmethod def perspective_instance_finalize_migration_src(params): @@ -648,12 +663,10 @@ class NodeRequestHandler(http.server.HttpServerHandler): instance = objects.Instance.FromDict(params[0]) reboot_type = params[1] shutdown_timeout = params[2] - (reason_source, reason_text) = params[3] - reason_text = _DefaultAlternative(reason_text, - constants.INSTANCE_REASON_REBOOT) - reason = backend.InstReason(reason_source, reason_text) + trail = params[3] + _extendReasonTrail(trail, "reboot") return backend.InstanceReboot(instance, reboot_type, shutdown_timeout, - reason) + trail) @staticmethod def perspective_instance_balloon_memory(params): @@ -669,7 +682,8 @@ class NodeRequestHandler(http.server.HttpServerHandler): """Query instance information. """ - return backend.GetInstanceInfo(params[0], params[1]) + (instance_name, hypervisor_name, hvparams) = params + return backend.GetInstanceInfo(instance_name, hypervisor_name, hvparams) @staticmethod def perspective_instance_migratable(params): @@ -684,14 +698,16 @@ class NodeRequestHandler(http.server.HttpServerHandler): """Query information about all instances. """ - return backend.GetAllInstancesInfo(params[0]) + (hypervisor_list, all_hvparams) = params + return backend.GetAllInstancesInfo(hypervisor_list, all_hvparams) @staticmethod def perspective_instance_list(params): """Query the list of running instances. """ - return backend.GetInstanceList(params[0]) + (hypervisor_list, hvparams) = params + return backend.GetInstanceList(hypervisor_list, hvparams) # node -------------------------- @@ -707,8 +723,8 @@ class NodeRequestHandler(http.server.HttpServerHandler): """Query node information. """ - (vg_names, hv_names, excl_stor) = params - return backend.GetNodeInfo(vg_names, hv_names, excl_stor) + (storage_units, hv_specs, excl_stor) = params + return backend.GetNodeInfo(storage_units, hv_specs, excl_stor) @staticmethod def perspective_etc_hosts_modify(params): @@ -724,7 +740,8 @@ class NodeRequestHandler(http.server.HttpServerHandler): """Run a verify sequence on this node. """ - return backend.VerifyNode(params[0], params[1]) + (what, cluster_name, hvparams) = params + return backend.VerifyNode(what, cluster_name, hvparams) @classmethod def perspective_node_verify_light(cls, params): @@ -798,8 +815,8 @@ class NodeRequestHandler(http.server.HttpServerHandler): """Tries to powercycle the nod. """ - hypervisor_type = params[0] - return backend.PowercycleNode(hypervisor_type) + (hypervisor_type, hvparams) = params + return backend.PowercycleNode(hypervisor_type, hvparams) # cluster -------------------------- @@ -1164,7 +1181,8 @@ def Main(): """ parser = OptionParser(description="Ganeti node daemon", - usage="%prog [-f] [-d] [-p port] [-b ADDRESS]", + usage="%prog [-f] [-d] [-p port] [-b ADDRESS]\ + \ [-i INTERFACE]", version="%%prog (ganeti) %s" % constants.RELEASE_VERSION) parser.add_option("--no-mlock", dest="mlock",