---
 lib/cmdlib.py  |   12 +++++++++++-
 lib/opcodes.py |    1 +
 2 files changed, 12 insertions(+), 1 deletions(-)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index 1c965d7..e7a9c84 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -4351,6 +4351,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
@@ -4448,10 +4449,16 @@ class LUSetNodeParams(LogicalUnit):
     node = self.node = self.cfg.GetNodeInfo(self.op.node_name)
 
     if _SupportsOob(self.cfg, node):
-      if self.op.offline is False and not node.powered:
+      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)
+    else:
+      if 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 (self.op.master_candidate is not None or
         self.op.drained is not None or
@@ -4588,6 +4595,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 9ce1822..a515131 100644
--- a/lib/opcodes.py
+++ b/lib/opcodes.py
@@ -490,6 +490,7 @@ class OpSetNodeParams(OpCode):
     "vm_capable",
     "secondary_ip",
     "ndparams",
+    "powered",
     ]
 
 
-- 
1.7.3.1

Reply via email to