Skip to content

Commit

Permalink
add a run-time sleep option to the system reboot cmd in case of annoy…
Browse files Browse the repository at this point in the history
…ing ipmi cards.
  • Loading branch information
Scott Beardsley committed Jun 9, 2010
1 parent b9c5aa9 commit 690e0b4
Show file tree
Hide file tree
Showing 4 changed files with 12 additions and 6 deletions.
2 changes: 1 addition & 1 deletion cobbler/action_power.py
Expand Up @@ -57,7 +57,7 @@ def __init__(self,config,system,api,force_user=None,force_pass=None,logger=None)
logger = clogger.Logger()
self.logger = logger

def power(self, desired_state):
def power(self, desired_state, sleep=None):
"""
state is either "on" or "off". Rebooting is implemented at the api.py
level.
Expand Down
5 changes: 3 additions & 2 deletions cobbler/api.py
Expand Up @@ -806,12 +806,13 @@ def power_off(self, system, user=None, password=None, logger=None):
"""
return action_power.PowerTool(self._config,system,self,user,password,logger=logger).power("off")

def reboot(self,system, user=None, password=None, logger=None):
def reboot(self,system, user=None, password=None, sleep=None, logger=None):
"""
Cycles power on a system that has power management configured.
"""
self.power_off(system, user, password, logger=logger)
time.sleep(5)
if sleep and int(sleep) > 0:
time.sleep(int(sleep))
return self.power_on(system, user, password, logger=logger)

# ==========================================================================
Expand Down
5 changes: 5 additions & 0 deletions cobbler/cli.py
Expand Up @@ -246,6 +246,10 @@ def object_command(self, object_type, object_action):
pass
else:
self.parser.add_option("--name", dest="name", help="name of object")

if object_action in [ "reboot" ]: # reboot allows name *and* sleep
self.parser.add_option("--sleep", dest="sleep", help="number of seconds to sleep between the off/on")

(options, args) = self.parser.parse_args()

if object_action in [ "add", "edit", "copy", "rename", "remove" ]:
Expand Down Expand Up @@ -273,6 +277,7 @@ def object_command(self, object_type, object_action):
power={}
power["power"] = object_action.replace("power","")
power["systems"] = [options.name]
power["sleep"] = options.sleep
task_id = self.remote.background_power_system(power, self.token)
elif object_action == "report":
if options.name is not None:
Expand Down
6 changes: 3 additions & 3 deletions cobbler/remote.py
Expand Up @@ -242,7 +242,7 @@ def background_power_system(self, options, token):
def runner(self):
for x in self.options.get("systems",[]):
object_id = self.remote.get_system_handle(x,token)
self.remote.power_system(object_id,self.options.get("power",""),token,logger=self.logger)
self.remote.power_system(object_id,self.options.get("power",""),token,sleep=self.options.get("sleep",5),logger=self.logger)
return True
self.check_access(token, "power")
return self.__start_task(runner, token, "power", "Power management (%s)" % options.get("power",""), options)
Expand Down Expand Up @@ -1682,7 +1682,7 @@ def read_or_write_snippet(self,snippet_file,is_read,new_data,token):
return True


def power_system(self,object_id,power=None,token=None,logger=None):
def power_system(self,object_id,power=None,token=None,sleep=None,logger=None):
"""
Internal implementation used by background_power, do not call
directly if possible.
Expand All @@ -1695,7 +1695,7 @@ def power_system(self,object_id,power=None,token=None,logger=None):
elif power=="off":
rc=self.api.power_off(obj, user=None, password=None, logger=logger)
elif power=="reboot":
rc=self.api.reboot(obj, user=None, password=None, logger=logger)
rc=self.api.reboot(obj, user=None, password=None, sleep=sleep, logger=logger)
else:
utils.die(self.logger, "invalid power mode '%s', expected on/off/reboot" % power)
return rc
Expand Down

0 comments on commit 690e0b4

Please sign in to comment.