X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/b459a848dc62e314e61e8ae14edd3ff6cc2b2822..ecabe27efd4413ef4c011529e19505133d2d2ffa:/lib/rapi/rlib2.py diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 9e9f2a1..ab89270 100644 --- a/lib/rapi/rlib2.py +++ b/lib/rapi/rlib2.py @@ -415,6 +415,8 @@ class R_2_nodes_name_role(baserlib.R_Generic): node_name = self.items[0] role = self.request_body + auto_promote = bool(self._checkIntVariable("auto-promote")) + if role == _NR_REGULAR: candidate = False offline = False @@ -439,6 +441,7 @@ class R_2_nodes_name_role(baserlib.R_Generic): master_candidate=candidate, offline=offline, drained=drained, + auto_promote=auto_promote, force=bool(self.useForce())) return baserlib.SubmitJob([op]) @@ -497,6 +500,25 @@ class R_2_nodes_name_migrate(baserlib.R_Generic): return baserlib.SubmitJob([op]) +class R_2_nodes_name_modify(baserlib.R_Generic): + """/2/nodes/[node_name]/modify resource. + + """ + def POST(self): + """Changes parameters of a node. + + @return: a job id + + """ + baserlib.CheckType(self.request_body, dict, "Body contents") + + op = baserlib.FillOpcode(opcodes.OpNodeSetParams, self.request_body, { + "node_name": self.items[0], + }) + + return baserlib.SubmitJob([op]) + + class R_2_nodes_name_storage(baserlib.R_Generic): """/2/nodes/[node_name]/storage resource. @@ -922,8 +944,6 @@ class R_2_instances_name_shutdown(baserlib.R_Generic): @return: a job id """ - baserlib.CheckType(self.request_body, dict, "Body contents") - no_remember = bool(self._checkIntVariable("no_remember")) op = _ParseShutdownInstanceRequest(self.items[0], self.request_body, bool(self.dryRun()), no_remember) @@ -1001,16 +1021,19 @@ def _ParseInstanceReplaceDisksRequest(name, data): # Parse disks try: - raw_disks = data["disks"] + raw_disks = data.pop("disks") except KeyError: pass else: - if not ht.TListOf(ht.TInt)(raw_disks): # pylint: disable=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)) + if raw_disks: + if ht.TListOf(ht.TInt)(raw_disks): # pylint: disable=E1102 + data["disks"] = raw_disks + else: + # 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) @@ -1023,7 +1046,20 @@ class R_2_instances_name_replace_disks(baserlib.R_Generic): """Replaces disks on an instance. """ - op = _ParseInstanceReplaceDisksRequest(self.items[0], self.request_body) + if self.request_body: + body = self.request_body + elif self.queryargs: + # Legacy interface, do not modify/extend + body = { + "remote_node": self._checkStringVariable("remote_node", default=None), + "mode": self._checkStringVariable("mode", default=None), + "disks": self._checkStringVariable("disks", default=None), + "iallocator": self._checkStringVariable("iallocator", default=None), + } + else: + body = {} + + op = _ParseInstanceReplaceDisksRequest(self.items[0], body) return baserlib.SubmitJob([op])