From 48d71ed3eed17c8ad2245fa859f983b8ceb0032e Mon Sep 17 00:00:00 2001 From: Marc Fiuczynski Date: Thu, 13 Jul 2006 17:14:18 +0000 Subject: [PATCH] Added support to force the node run state from command line. --- source/BootManager.py | 66 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 53 insertions(+), 13 deletions(-) diff --git a/source/BootManager.py b/source/BootManager.py index b49d978..9df68db 100755 --- a/source/BootManager.py +++ b/source/BootManager.py @@ -74,6 +74,12 @@ BIN_PATH= ('/usr/local/bin', '/usr/local/planetlab/bin') +# the set of valid node run states +NodeRunStates = {'new':None, + 'inst':None, + 'rins':None, + 'boot':None, + 'dbg':None} class log: @@ -141,7 +147,10 @@ class BootManager: VARS_FILE = "configuration" - def __init__(self, log): + def __init__(self, log, forceState): + # override machine's current state from the command line + self.forceState = forceState + # this contains a set of information used and updated # by each step self.VARS= {} @@ -282,19 +291,26 @@ class BootManager: UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) StartDebug.Run( self.VARS, self.LOG ) + global NodeRunStates # setup state -> function hash table - states = {'new':_newRun, - 'inst':_newRun, - 'rins':_rinsRun, - 'boot':_bootRun, - 'dbg':_debugRun} + NodeRunStates['new'] = _newRun + NodeRunStates['inst'] = _newRun + NodeRunStates['rins'] = _rinsRun + NodeRunStates['boot'] = _bootRun + NodeRunStates['dbg'] = _debugRun + try: InitializeBootManager.Run( self.VARS, self.LOG ) ReadNodeConfiguration.Run( self.VARS, self.LOG ) AuthenticateWithPLC.Run( self.VARS, self.LOG ) GetAndUpdateNodeDetails.Run( self.VARS, self.LOG ) - stateRun = states.get(self.VARS['BOOT_STATE'],_badRun) + # override machine's current state from the command line + if self.forceState is not None: + self.VARS['BOOT_STATE']= self.forceState + UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) + + stateRun = NodeRunStates.get(self.VARS['BOOT_STATE'],_badRun) stateRun() except KeyError, e: @@ -330,9 +346,8 @@ class BootManager: SendHardwareConfigToPLC.Run( self.VARS, self.LOG ) - -if __name__ == "__main__": - +def main(argv): + global NodeRunStates # set to 0 if no error occurred error= 1 @@ -344,7 +359,28 @@ if __name__ == "__main__": strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) ) try: - bm= BootManager(LOG) + forceState = None + if len(argv) == 2: + fState = argv[1] + if NodeRunStates.has_key(fState): + forceState = fState + error = 0 + else: + LOG.LogEntry("FATAL: cannot force node run state to=%s" % fState) + except: + traceback.print_exc(file=LOG.OutputFile) + traceback.print_exc() + + if error: + LOG.LogEntry( "BootManager finished at: %s" % \ + strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) ) + LOG.Upload() + return error + else: + error = 1 + + try: + bm= BootManager(LOG,forceState) if bm.CAN_RUN == 0: LOG.LogEntry( "Unable to initialize BootManager." ) else: @@ -353,16 +389,20 @@ if __name__ == "__main__": success= bm.Run() if success: LOG.LogEntry( "\nDone!" ); + error = 0 else: LOG.LogEntry( "\nError occurred!" ); - except: traceback.print_exc(file=LOG.OutputFile) traceback.print_exc() LOG.LogEntry( "BootManager finished at: %s" % \ strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) ) - LOG.Upload() + + return error + +if __name__ == "__main__": + error = main(sys.argv) sys.exit(error) -- 2.43.0