X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2FBootManager.py;h=e38b7de3693a166a7b19048ffb248afd5469fb79;hb=e7eea424f664eeff97714887aacc0483cbcc376d;hp=18aca8c68e2104ec7dfd718e81d5f73fd5b5f9e3;hpb=b428c6ae99d920a6d9f40228be5106398c3d5598;p=bootmanager.git diff --git a/source/BootManager.py b/source/BootManager.py index 18aca8c..e38b7de 100755 --- a/source/BootManager.py +++ b/source/BootManager.py @@ -1,4 +1,4 @@ -#!/usr/bin/python2 -u +#!/usr/bin/python -u # Copyright (c) 2003 Intel Corporation # All rights reserved. @@ -8,8 +8,8 @@ import string import sys, os, traceback -from time import gmtime, strftime -from gzip import GzipFile +import time +import gzip from steps import * from Exceptions import * @@ -35,21 +35,24 @@ NodeRunStates = {} class log: + format="%H:%M:%S(%Z) " + def __init__( self, OutputFilePath= None ): if OutputFilePath: try: self.OutputFilePath= OutputFilePath - self.OutputFile= GzipFile( OutputFilePath, "w", 9 ) + self.OutputFile= gzip.GzipFile( OutputFilePath, "w", 9 ) except: print( "Unable to open output file for log, continuing" ) self.OutputFile= None def LogEntry( self, str, inc_newline= 1, display_screen= 1 ): + now=time.strftime(log.format, time.localtime()) if self.OutputFile: - self.OutputFile.write( str ) + self.OutputFile.write( now+str ) if display_screen: - sys.stdout.write( str ) + sys.stdout.write( now+str ) if inc_newline: if display_screen: @@ -175,7 +178,7 @@ class BootManager: def _nodeNotInstalled(): # called by the _xxxState() functions below upon failure - self.VARS['BOOT_STATE']= 'dbg' + self.VARS['BOOT_STATE']= 'failboot' self.VARS['STATE_CHANGE_NOTIFY']= 1 self.VARS['STATE_CHANGE_NOTIFY_MESSAGE']= \ notify_messages.MSG_NODE_NOT_INSTALLED @@ -193,27 +196,25 @@ class BootManager: WriteModprobeConfig.Run( self.VARS, self.LOG ) MakeInitrd.Run( self.VARS, self.LOG ) WriteNetworkConfig.Run( self.VARS, self.LOG ) - # the following step should be done by NM - UpdateNodeConfiguration.Run( self.VARS, self.LOG ) CheckForNewDisks.Run( self.VARS, self.LOG ) SendHardwareConfigToPLC.Run( self.VARS, self.LOG ) ChainBootNode.Run( self.VARS, self.LOG ) else: _nodeNotInstalled() - def _rinsRun(): + def _reinstallRun(): # implements the reinstall logic, which will check whether # the min. hardware requirements are met, install the # software, and upon correct installation will switch too # 'boot' state and chainboot into the production system if not CheckHardwareRequirements.Run( self.VARS, self.LOG ): - self.VARS['BOOT_STATE']= 'dbg' + self.VARS['BOOT_STATE']= 'failboot' raise BootManagerException, "Hardware requirements not met." # runinstaller InstallInit.Run( self.VARS, self.LOG ) InstallPartitionDisks.Run( self.VARS, self.LOG ) - InstallBootstrapRPM.Run( self.VARS, self.LOG ) + InstallBootstrapFS.Run( self.VARS, self.LOG ) InstallWriteConfig.Run( self.VARS, self.LOG ) InstallUninitHardware.Run( self.VARS, self.LOG ) self.VARS['BOOT_STATE']= 'boot' @@ -226,19 +227,19 @@ class BootManager: def _newRun(): # implements the new install logic, which will first check # with the user whether it is ok to install on this - # machine, switch to 'rins' state and then invoke the rins - # logic. See rinsState logic comments for further + # machine, switch to 'reinstall' state and then invoke the reinstall + # logic. See reinstallState logic comments for further # details. if not ConfirmInstallWithUser.Run( self.VARS, self.LOG ): return 0 - self.VARS['BOOT_STATE']= 'rins' + self.VARS['BOOT_STATE']= 'reinstall' UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) - _rinsRun() + _reinstallRun() - def _debugRun(): + def _debugRun(state='failboot'): # implements debug logic, which just starts the sshd # and just waits around - self.VARS['BOOT_STATE']='dbg' + self.VARS['BOOT_STATE']=state UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) StartDebug.Run( self.VARS, self.LOG ) @@ -249,11 +250,12 @@ class BootManager: global NodeRunStates # setup state -> function hash table - NodeRunStates['new'] = _newRun - NodeRunStates['inst'] = _newRun - NodeRunStates['rins'] = _rinsRun + NodeRunStates['install'] = _newRun + NodeRunStates['reinstall'] = _reinstallRun NodeRunStates['boot'] = _bootRun - NodeRunStates['dbg'] = _debugRun + NodeRunStates['failboot'] = _bootRun # should always try to boot. + NodeRunStates['safeboot'] = lambda : _debugRun('safeboot') + NodeRunStates['disabled'] = lambda : _debugRun('disabled') success = 0 try: @@ -294,12 +296,19 @@ class BootManager: def main(argv): + + import utils + utils.prompt_for_breakpoint_mode() + + #utils.breakpoint ("Entering BootManager::main") + global NodeRunStates - NodeRunStates = {'new':None, - 'inst':None, - 'rins':None, + NodeRunStates = {'install':None, + 'reinstall':None, 'boot':None, - 'dbg':None} + 'safeboot':None, + 'failboot':None, + 'disabled':None, } # set to 1 if error occurred error= 0 @@ -309,7 +318,7 @@ def main(argv): LOG= log( LOG_FILE ) LOG.LogEntry( "BootManager started at: %s" % \ - strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) ) + time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) ) try: forceState = None @@ -326,7 +335,7 @@ def main(argv): if error: LOG.LogEntry( "BootManager finished at: %s" % \ - strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) ) + time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) ) LOG.Upload() return error @@ -348,7 +357,7 @@ def main(argv): traceback.print_exc() LOG.LogEntry( "BootManager finished at: %s" % \ - strftime("%a, %d %b %Y %H:%M:%S +0000", gmtime()) ) + time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) ) LOG.Upload() return error