Blame SOURCES/cobbler-power-status.patch

1330ca
diff -rupN cobbler-2.0.7.old/cobbler/action_power.py cobbler-2.0.7/cobbler/action_power.py
1330ca
--- cobbler-2.0.7.old/cobbler/action_power.py	2014-11-10 15:07:00.578732736 -0500
1330ca
+++ cobbler-2.0.7/cobbler/action_power.py	2014-11-10 15:11:19.692536590 -0500
1330ca
@@ -30,6 +30,7 @@ import os
1330ca
 import os.path
1330ca
 import traceback
1330ca
 import time
1330ca
+import re
1330ca
 
1330ca
 import utils
1330ca
 import func_utils
1330ca
@@ -102,8 +103,22 @@ class PowerTool:
1330ca
         # Try the power command 5 times before giving up.
1330ca
         # Some power switches are flakey
1330ca
         for x in range(0,5):
1330ca
-            rc = utils.subprocess_call(self.logger, template_command, shell=False)
1330ca
+            output, rc = utils.subprocess_sp(self.logger, template_command, shell=False)
1330ca
             if rc == 0:
1330ca
+                # If the desired state is actually a query for the status
1330ca
+                # return different information than command return code
1330ca
+                if desired_state == 'status':
1330ca
+                    match = re.match('(^Status:\s)(ON|OFF)', output)
1330ca
+                    if not match:
1330ca
+                        match = re.match('(.*Chassis power\s*(=|is)\s*)(On|Off).*', output, re.IGNORECASE)
1330ca
+                    if match:
1330ca
+                        power_status = match.groups()[2]
1330ca
+                        if power_status.upper() == 'ON':
1330ca
+                            return True
1330ca
+                        else:
1330ca
+                            return False
1330ca
+                    utils.die(self.logger,"command succeeded (rc=%s), but output ('%s') was not understood" % (rc, output))
1330ca
+                    return None
1330ca
                 break
1330ca
             else:
1330ca
                 time.sleep(2)
1330ca
diff -rupN cobbler-2.0.7.old/cobbler/api.py cobbler-2.0.7/cobbler/api.py
1330ca
--- cobbler-2.0.7.old/cobbler/api.py	2014-11-10 15:07:00.577732729 -0500
1330ca
+++ cobbler-2.0.7/cobbler/api.py	2014-11-10 15:07:27.941923229 -0500
1330ca
@@ -818,6 +818,15 @@ class BootAPI:
1330ca
         time.sleep(5)
1330ca
         return self.power_on(system, user, password, logger=logger)
1330ca
 
1330ca
+    def power_status(self, system, user=None, password=None, logger=None):
1330ca
+        """
1330ca
+        Returns the power status for a system that has power management configured.
1330ca
+
1330ca
+        @return: 0  the system is powered on, False if it's not or None on error
1330ca
+        """
1330ca
+        return action_power.PowerTool(self._config, system, self, user, password, logger = logger).power("status")
1330ca
+
1330ca
+
1330ca
     # ==========================================================================
1330ca
 
1330ca
     def clear_logs(self, system, logger=None):
1330ca
diff -rupN cobbler-2.0.7.old/cobbler/cli.py cobbler-2.0.7/cobbler/cli.py
1330ca
--- cobbler-2.0.7.old/cobbler/cli.py	2014-11-10 15:07:00.575732715 -0500
1330ca
+++ cobbler-2.0.7/cobbler/cli.py	2014-11-10 15:07:27.941923229 -0500
1330ca
@@ -40,7 +40,7 @@ import item_image
1330ca
 OBJECT_ACTIONS   = {
1330ca
    "distro"  : "add copy edit find list remove rename report".split(" "),
1330ca
    "profile" : "add copy dumpvars edit find getks list remove rename report".split(" "),
1330ca
-   "system"  : "add copy dumpvars edit find getks list remove rename report poweron poweroff reboot".split(" "),
1330ca
+   "system"  : "add copy dumpvars edit find getks list remove rename report poweron poweroff powerstatus reboot".split(" "),
1330ca
    "image"   : "add copy edit find list remove rename report".split(" "),
1330ca
    "repo"    : "add copy edit find list remove rename report".split(" ")
1330ca
 } 
1330ca
@@ -278,7 +278,7 @@ class BootCLI:
1330ca
             keys.sort()
1330ca
             for x in keys:
1330ca
                print "%s : %s" % (x, data[x])
1330ca
-        elif object_action in [ "poweron", "poweroff", "reboot" ]:
1330ca
+        elif object_action in [ "poweron", "poweroff", "powerstatus", "reboot" ]:
1330ca
             power={}
1330ca
             power["power"] = object_action.replace("power","")
1330ca
             power["systems"] = [options.name]
1330ca
diff -rupN cobbler-2.0.7.old/cobbler/remote.py cobbler-2.0.7/cobbler/remote.py
1330ca
--- cobbler-2.0.7.old/cobbler/remote.py	2014-11-10 15:07:00.575732715 -0500
1330ca
+++ cobbler-2.0.7/cobbler/remote.py	2014-11-10 15:07:27.942923236 -0500
1330ca
@@ -1706,7 +1706,7 @@ class CobblerXMLRPCInterface:
1330ca
         """
1330ca
         Internal implementation used by background_power, do not call
1330ca
         directly if possible.  
1330ca
-        Allows poweron/poweroff/reboot of a system specified by object_id.
1330ca
+        Allows poweron/poweroff/powerstatus/reboot of a system specified by object_id.
1330ca
         """
1330ca
         obj = self.__get_object(object_id)
1330ca
         self.check_access(token, "power_system", obj)
1330ca
@@ -1714,10 +1714,12 @@ class CobblerXMLRPCInterface:
1330ca
             rc=self.api.power_on(obj, user=None, password=None, logger=logger)
1330ca
         elif power=="off":
1330ca
             rc=self.api.power_off(obj, user=None, password=None, logger=logger)
1330ca
+        elif power=="status":
1330ca
+            rc=self.api.power_status(obj, user=None, password=None, logger=logger)
1330ca
         elif power=="reboot":
1330ca
             rc=self.api.reboot(obj, user=None, password=None, logger=logger)
1330ca
         else:
1330ca
-            utils.die(self.logger, "invalid power mode '%s', expected on/off/reboot" % power)
1330ca
+            utils.die(self.logger, "invalid power mode '%s', expected on/off/status/reboot" % power)
1330ca
         return rc
1330ca
 
1330ca
     def clear_system_logs(self, object_id, token=None, logger=None):
1330ca
diff -rupN cobbler-2.0.7.old/templates/power_ipmilan.template cobbler-2.0.7/templates/power_ipmilan.template
1330ca
--- cobbler-2.0.7.old/templates/power_ipmilan.template	2014-11-10 15:07:00.581732757 -0500
1330ca
+++ cobbler-2.0.7/templates/power_ipmilan.template	2014-11-10 15:07:27.943923243 -0500
1330ca
@@ -1,2 +1 @@
1330ca
-#use power_id to pass in additional options like -P, Use Lanplus
1330ca
-fence_ipmilan -i "$power_address" $power_id -l "$power_user" -p "$power_pass" -o "$power_mode"
1330ca
+fence_ipmilan -a "$power_address" $power_id -l "$power_user" -p "$power_pass" -o "$power_mode"