From 0ecef64c5bdf304188c8ff5f9884b47319039042 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Nussbaumer?= <rn@google.com>
Date: Thu, 16 Dec 2010 15:16:30 +0100
Subject: [PATCH] LUSetNodeParams: Add support for powered state
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Signed-off-by: RenΓ© Nussbaumer <rn@google.com>
Reviewed-by: Michael Hanselmann <hansmi@google.com>
---
 lib/cmdlib.py  | 19 ++++++++++++++-----
 lib/opcodes.py |  1 +
 2 files changed, 15 insertions(+), 5 deletions(-)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 774c236bc..4845389be 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -4360,6 +4360,7 @@ class LUSetNodeParams(LogicalUnit):
     ("vm_capable", None, ht.TMaybeBool),
     ("secondary_ip", None, ht.TMaybeString),
     ("ndparams", None, ht.TOr(ht.TDict, ht.TNone)),
+    ("powered", None, ht.TMaybeBool),
     _PForce,
     ]
   REQ_BGL = False
@@ -4503,11 +4504,16 @@ class LUSetNodeParams(LogicalUnit):
     # away from the respective state, as only real changes are kept
 
     # TODO: We might query the real power state if it supports OOB
-    if _SupportsOob(self.cfg, node) and (self.op.offline is False and
-                                         not node.powered):
-      raise errors.OpPrereqError(("Please power on node %s first before you"
-                                  " can reset offline state") %
-                                 self.op.node_name)
+    if _SupportsOob(self.cfg, node):
+      if self.op.offline is False and not (node.powered or
+                                           self.op.powered == True):
+        raise errors.OpPrereqError(("Please power on node %s first before you"
+                                    " can reset offline state") %
+                                   self.op.node_name)
+    elif self.op.powered is not None:
+      raise errors.OpPrereqError(("Unable to change powered state for node %s"
+                                  " which does not support out-of-band"
+                                  " handling") % self.op.node_name)
 
     # If we're being deofflined/drained, we'll MC ourself if needed
     if (self.op.drained == False or self.op.offline == False or
@@ -4598,6 +4604,9 @@ class LUSetNodeParams(LogicalUnit):
     if self.op.ndparams:
       node.ndparams = self.new_ndparams
 
+    if self.op.powered is not None:
+      node.powered = self.op.powered
+
     for attr in ["master_capable", "vm_capable"]:
       val = getattr(self.op, attr)
       if val is not None:
diff --git a/lib/opcodes.py b/lib/opcodes.py
index 9ce1822ae..a5151316c 100644
--- a/lib/opcodes.py
+++ b/lib/opcodes.py
@@ -490,6 +490,7 @@ class OpSetNodeParams(OpCode):
     "vm_capable",
     "secondary_ip",
     "ndparams",
+    "powered",
     ]
 
 
-- 
GitLab