From b528a12d6082951245e9850f18b36a25e74c9d13 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ren=C3=A9=20Nussbaumer?= <rn@google.com>
Date: Mon, 13 Dec 2010 15:07:39 +0100
Subject: [PATCH] Set recorded powered state for OOB calls
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    | 14 ++++++++++++++
 lib/constants.py |  2 ++
 2 files changed, 16 insertions(+)

diff --git a/lib/cmdlib.py b/lib/cmdlib.py
index d5d09f35d..2dc1900c0 100644
--- a/lib/cmdlib.py
+++ b/lib/cmdlib.py
@@ -3283,6 +3283,7 @@ class LUOutOfBand(NoHooksLU):
 
     """
     master_node = self.cfg.GetMasterNode()
+    node = self.node
 
     logging.info("Executing out-of-band command '%s' using '%s' on %s",
                  self.op.command, self.oob_program, self.op.node_name)
@@ -3302,6 +3303,19 @@ class LUOutOfBand(NoHooksLU):
           logging.warning("On node '%s' item '%s' has status '%s'",
                           self.op.node_name, item, status)
 
+    if self.op.command == constants.OOB_POWER_ON:
+      node.powered = True
+    elif self.op.command == constants.OOB_POWER_OFF:
+      node.powered = False
+    elif self.op.command == constants.OOB_POWER_STATUS:
+      powered = result.payload[constants.OOB_POWER_STATUS_POWERED]
+      if powered != self.node.powered:
+        logging.warning(("Recorded power state (%s) of node '%s' does not match"
+                         " actual power state (%s)"), node.powered,
+                        self.op.node_name, powered)
+
+    self.cfg.Update(node, feedback_fn)
+
     return result.payload
 
   def _CheckPayload(self, result):
diff --git a/lib/constants.py b/lib/constants.py
index 5dd9838a1..a402427f9 100644
--- a/lib/constants.py
+++ b/lib/constants.py
@@ -656,6 +656,8 @@ OOB_HEALTH = "health"
 OOB_COMMANDS = frozenset([OOB_POWER_ON, OOB_POWER_OFF, OOB_POWER_CYCLE,
                           OOB_POWER_STATUS, OOB_HEALTH])
 
+OOB_POWER_STATUS_POWERED = "powered"
+
 OOB_TIMEOUT = 60 # 60 seconds
 
 OOB_STATUS_OK = "OK"
-- 
GitLab