X-Git-Url: https://code.grnet.gr/git/ganeti-local/blobdiff_plain/d71369d7ce4c5d768886dba779abb12785551015..ecabe27efd4413ef4c011529e19505133d2d2ffa:/lib/rapi/rlib2.py diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index 0a958da..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. @@ -999,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) @@ -1021,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])