diff --git a/lib/rapi/client.py b/lib/rapi/client.py index 2453eb6125324f8588ce333056e9f0a5d8cde633..53f26dedd13317dccc6ff33fe4b735a689672445 100644 --- a/lib/rapi/client.py +++ b/lib/rapi/client.py @@ -1427,7 +1427,7 @@ class GanetiRapiClient(object): # pylint: disable=R0904 ("/%s/nodes/%s/role" % (GANETI_RAPI_VERSION, node)), None, None) - def SetNodeRole(self, node, role, force=False): + def SetNodeRole(self, node, role, force=False, auto_promote=None): """Sets the role for a node. @type node: str @@ -1436,6 +1436,9 @@ class GanetiRapiClient(object): # pylint: disable=R0904 @param role: the role to set for the node @type force: bool @param force: whether to force the role change + @type auto_promote: bool + @param auto_promote: Whether node(s) should be promoted to master candidate + if necessary @rtype: string @return: job id @@ -1445,6 +1448,9 @@ class GanetiRapiClient(object): # pylint: disable=R0904 ("force", force), ] + if auto_promote is not None: + query.append(("auto-promote", auto_promote)) + return self._SendRequest(HTTP_PUT, ("/%s/nodes/%s/role" % (GANETI_RAPI_VERSION, node)), query, role) diff --git a/lib/rapi/rlib2.py b/lib/rapi/rlib2.py index e905ec7d09fd2f72dc4113081a581f97fe7fce51..fbd1bd75557dd9f0b4f19c14a2f6dd54e3497473 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])