X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/668f755db3ce09bb09ceb437d4bf835e6a4f2149..df340fae45c0c059f7ed2a3f2024dbdfb9df9d07:/lib/rapi/rlib2.py diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 0400d0d..e70044b 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -47,6 +47,7 @@ from ganeti import constants from ganeti import cli from ganeti import utils from ganeti import rapi +from ganeti import ht from ganeti.rapi import baserlib @@ -160,7 +161,7 @@ class R_2_os(baserlib.R_Generic): """ cl = baserlib.GetClient() - op = opcodes.OpDiagnoseOS(output_fields=["name", "variants"], names=[]) + op = opcodes.OpOsDiagnose(output_fields=["name", "variants"], names=[]) job_id = baserlib.SubmitJob([op], cl) # we use custom feedback function, instead of print we log the status result = cli.PollJob(job_id, cl, feedback_fn=baserlib.FeedbackFn) @@ -395,7 +396,7 @@ class R_2_nodes_name_role(baserlib.R_Generic): else: raise http.HttpBadRequest("Can't set '%s' role" % role) - op = opcodes.OpSetNodeParams(node_name=node_name, + op = opcodes.OpNodeSetParams(node_name=node_name, master_candidate=candidate, offline=offline, drained=drained, @@ -420,9 +421,9 @@ class R_2_nodes_name_evacuate(baserlib.R_Generic): cl = baserlib.GetClient() - op = opcodes.OpNodeEvacuationStrategy(nodes=[node_name], - iallocator=iallocator, - remote_node=remote_node) + op = opcodes.OpNodeEvacStrategy(nodes=[node_name], + iallocator=iallocator, + remote_node=remote_node) job_id = baserlib.SubmitJob([op], cl) # we use custom feedback function, instead of print we log the status @@ -464,7 +465,7 @@ class R_2_nodes_name_migrate(baserlib.R_Generic): else: mode = self._checkStringVariable("mode", default=None) - op = opcodes.OpMigrateNode(node_name=node_name, mode=mode) + op = opcodes.OpNodeMigrate(node_name=node_name, mode=mode) return baserlib.SubmitJob([op]) @@ -473,7 +474,7 @@ class R_2_nodes_name_storage(baserlib.R_Generic): """/2/nodes/[node_name]/storage resource. """ - # LUQueryNodeStorage acquires locks, hence restricting access to GET + # LUNodeQueryStorage acquires locks, hence restricting access to GET GET_ACCESS = [rapi.RAPI_ACCESS_WRITE] def GET(self): @@ -489,7 +490,7 @@ class R_2_nodes_name_storage(baserlib.R_Generic): raise http.HttpBadRequest("Missing the required 'output_fields'" " parameter") - op = opcodes.OpQueryNodeStorage(nodes=[node_name], + op = opcodes.OpNodeQueryStorage(nodes=[node_name], storage_type=storage_type, output_fields=output_fields.split(",")) return baserlib.SubmitJob([op]) @@ -518,7 +519,7 @@ class R_2_nodes_name_storage_modify(baserlib.R_Generic): changes[constants.SF_ALLOCATABLE] = \ bool(self._checkIntVariable("allocatable", default=1)) - op = opcodes.OpModifyNodeStorage(node_name=node_name, + op = opcodes.OpNodeModifyStorage(node_name=node_name, storage_type=storage_type, name=name, changes=changes) @@ -627,8 +628,10 @@ def _ParseModifyGroupRequest(name, data): @return: Group modify opcode """ - alloc_policy = baserlib.CheckParameter(data, "alloc_policy", default=None) - return opcodes.OpGroupSetParams(group_name=name, alloc_policy=alloc_policy) + return baserlib.FillOpcode(opcodes.OpGroupSetParams, data, { + "group_name": name, + }) + class R_2_groups_name_modify(baserlib.R_Generic): @@ -995,7 +998,7 @@ class R_2_instances_name_startup(baserlib.R_Generic): """ instance_name = self.items[0] force_startup = bool(self._checkIntVariable('force')) - op = opcodes.OpStartupInstance(instance_name=instance_name, + op = opcodes.OpInstanceStartup(instance_name=instance_name, force=force_startup, dry_run=bool(self.dryRun())) @@ -1013,7 +1016,7 @@ class R_2_instances_name_shutdown(baserlib.R_Generic): """ instance_name = self.items[0] - op = opcodes.OpShutdownInstance(instance_name=instance_name, + op = opcodes.OpInstanceShutdown(instance_name=instance_name, dry_run=bool(self.dryRun())) return baserlib.SubmitJob([op]) @@ -1032,13 +1035,13 @@ def _ParseInstanceReinstallRequest(name, data): osparams = baserlib.CheckParameter(data, "osparams", default=None) ops = [ - opcodes.OpShutdownInstance(instance_name=name), + opcodes.OpInstanceShutdown(instance_name=name), opcodes.OpInstanceReinstall(instance_name=name, os_type=ostype, osparams=osparams), ] if start: - ops.append(opcodes.OpStartupInstance(instance_name=name, force=False)) + ops.append(opcodes.OpInstanceStartup(instance_name=name, force=False)) return ops @@ -1076,6 +1079,33 @@ class R_2_instances_name_reinstall(baserlib.R_Generic): return baserlib.SubmitJob(ops) +def _ParseInstanceReplaceDisksRequest(name, data): + """Parses a request for an instance export. + + @rtype: L{opcodes.OpInstanceReplaceDisks} + @return: Instance export opcode + + """ + override = { + "instance_name": name, + } + + # Parse disks + try: + raw_disks = data["disks"] + except KeyError: + pass + else: + if not ht.TListOf(ht.TInt)(raw_disks): # pylint: disable-msg=E1102 + # Backwards compatibility for strings of the format "1, 2, 3" + try: + data["disks"] = [int(part) for part in raw_disks.split(",")] + except (TypeError, ValueError), err: + raise http.HttpBadRequest("Invalid disk index passed: %s" % str(err)) + + return baserlib.FillOpcode(opcodes.OpInstanceReplaceDisks, data, override) + + class R_2_instances_name_replace_disks(baserlib.R_Generic): """/2/instances/[instance_name]/replace-disks resource. @@ -1084,25 +1114,7 @@ class R_2_instances_name_replace_disks(baserlib.R_Generic): """Replaces disks on an instance. """ - instance_name = self.items[0] - remote_node = self._checkStringVariable("remote_node", default=None) - mode = self._checkStringVariable("mode", default=None) - raw_disks = self._checkStringVariable("disks", default=None) - iallocator = self._checkStringVariable("iallocator", default=None) - - if raw_disks: - try: - disks = [int(part) for part in raw_disks.split(",")] - except ValueError, err: - raise http.HttpBadRequest("Invalid disk index passed: %s" % str(err)) - else: - disks = [] - - op = opcodes.OpInstanceReplaceDisks(instance_name=instance_name, - remote_node=remote_node, - mode=mode, - disks=disks, - iallocator=iallocator) + op = _ParseInstanceReplaceDisksRequest(self.items[0], self.request_body) return baserlib.SubmitJob([op]) @@ -1167,23 +1179,15 @@ def _ParseExportInstanceRequest(name, data): @return: Instance export opcode """ - mode = baserlib.CheckParameter(data, "mode", - default=constants.EXPORT_MODE_LOCAL) - target_node = baserlib.CheckParameter(data, "destination") - shutdown = baserlib.CheckParameter(data, "shutdown", exptype=bool) - remove_instance = baserlib.CheckParameter(data, "remove_instance", - exptype=bool, default=False) - x509_key_name = baserlib.CheckParameter(data, "x509_key_name", default=None) - destination_x509_ca = baserlib.CheckParameter(data, "destination_x509_ca", - default=None) - - return opcodes.OpBackupExport(instance_name=name, - mode=mode, - target_node=target_node, - shutdown=shutdown, - remove_instance=remove_instance, - x509_key_name=x509_key_name, - destination_x509_ca=destination_x509_ca) + # Rename "destination" to "target_node" + try: + data["target_node"] = data.pop("destination") + except KeyError: + pass + + return baserlib.FillOpcode(opcodes.OpBackupExport, data, { + "instance_name": name, + }) class R_2_instances_name_export(baserlib.R_Generic): @@ -1211,12 +1215,9 @@ def _ParseMigrateInstanceRequest(name, data): @return: Instance migration opcode """ - mode = baserlib.CheckParameter(data, "mode", default=None) - cleanup = baserlib.CheckParameter(data, "cleanup", exptype=bool, - default=False) - - return opcodes.OpInstanceMigrate(instance_name=name, mode=mode, - cleanup=cleanup) + return baserlib.FillOpcode(opcodes.OpInstanceMigrate, data, { + "instance_name": name, + }) class R_2_instances_name_migrate(baserlib.R_Generic): @@ -1243,12 +1244,9 @@ def _ParseRenameInstanceRequest(name, data): @return: Instance rename opcode """ - new_name = baserlib.CheckParameter(data, "new_name") - ip_check = baserlib.CheckParameter(data, "ip_check", default=True) - name_check = baserlib.CheckParameter(data, "name_check", default=True) - - return opcodes.OpInstanceRename(instance_name=name, new_name=new_name, - name_check=name_check, ip_check=ip_check) + return baserlib.FillOpcode(opcodes.OpInstanceRename, data, { + "instance_name": name, + }) class R_2_instances_name_rename(baserlib.R_Generic): @@ -1271,34 +1269,13 @@ class R_2_instances_name_rename(baserlib.R_Generic): def _ParseModifyInstanceRequest(name, data): """Parses a request for modifying an instance. - @rtype: L{opcodes.OpSetInstanceParams} + @rtype: L{opcodes.OpInstanceSetParams} @return: Instance modify opcode """ - osparams = baserlib.CheckParameter(data, "osparams", default={}) - force = baserlib.CheckParameter(data, "force", default=False) - nics = baserlib.CheckParameter(data, "nics", default=[]) - disks = baserlib.CheckParameter(data, "disks", default=[]) - disk_template = baserlib.CheckParameter(data, "disk_template", default=None) - remote_node = baserlib.CheckParameter(data, "remote_node", default=None) - os_name = baserlib.CheckParameter(data, "os_name", default=None) - force_variant = baserlib.CheckParameter(data, "force_variant", default=False) - - # HV/BE parameters - hvparams = baserlib.CheckParameter(data, "hvparams", default={}) - utils.ForceDictType(hvparams, constants.HVS_PARAMETER_TYPES, - allowed_values=[constants.VALUE_DEFAULT]) - - beparams = baserlib.CheckParameter(data, "beparams", default={}) - utils.ForceDictType(beparams, constants.BES_PARAMETER_TYPES, - allowed_values=[constants.VALUE_DEFAULT]) - - return opcodes.OpSetInstanceParams(instance_name=name, hvparams=hvparams, - beparams=beparams, osparams=osparams, - force=force, nics=nics, disks=disks, - disk_template=disk_template, - remote_node=remote_node, os_name=os_name, - force_variant=force_variant) + return baserlib.FillOpcode(opcodes.OpInstanceSetParams, data, { + "instance_name": name, + }) class R_2_instances_name_modify(baserlib.R_Generic):