From 8de8e68d86f2708c78f2e597e23544857a094db1 Mon Sep 17 00:00:00 2001
From: Michael Hanselmann <hansmi@google.com>
Date: Thu, 13 Oct 2011 14:19:08 +0200
Subject: [PATCH] rapi: Allow auto-promotion on node role change

Signed-off-by: Michael Hanselmann <hansmi@google.com>
Reviewed-by: Iustin Pop <iustin@google.com>
---
 lib/rapi/client.py | 8 +++++++-
 lib/rapi/rlib2.py  | 3 +++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/lib/rapi/client.py b/lib/rapi/client.py
index 2453eb612..53f26dedd 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 e905ec7d0..fbd1bd755 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])
-- 
GitLab