X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2FBootManager.py;h=40f7b5635f423095effb35dead331b099b399649;hb=0249625b8d4b87964143cbc446f8de80db2c7608;hp=1c3e78f2cfff904b6be69548cc0e55ce32942f18;hpb=008c4db00ad126481773f3b0f0bfdabe25553b0e;p=bootmanager.git diff --git a/source/BootManager.py b/source/BootManager.py index 1c3e78f..40f7b56 100755 --- a/source/BootManager.py +++ b/source/BootManager.py @@ -90,10 +90,8 @@ class BootManager: VARS_FILE = "configuration" # the set of valid node run states - NodeRunStates = {'install':None, - 'reinstall':None, + NodeRunStates = {'reinstall':None, 'boot':None, - 'failboot':None, 'safeboot':None, 'disabled':None, } @@ -171,14 +169,13 @@ class BootManager: at the top of each of the invididual step functions. """ - def _nodeNotInstalled(): + def _nodeNotInstalled(message='MSG_NODE_NOT_INSTALLED'): # called by the _xxxState() functions below upon failure - self.VARS['BOOT_STATE']= 'failboot' + self.VARS['RUN_LEVEL']= 'failboot' + notify = getattr(notify_messages, message) self.VARS['STATE_CHANGE_NOTIFY']= 1 - self.VARS['STATE_CHANGE_NOTIFY_MESSAGE']= \ - notify_messages.MSG_NODE_NOT_INSTALLED - raise BootManagerException, \ - notify_messages.MSG_NODE_NOT_INSTALLED + self.VARS['STATE_CHANGE_NOTIFY_MESSAGE']= notify + raise BootManagerException, notify def _bootRun(): # implements the boot logic, which consists of first @@ -195,13 +192,20 @@ class BootManager: pass InstallInit.Run( self.VARS, self.LOG ) - if ValidateNodeInstall.Run( self.VARS, self.LOG ): + ret = ValidateNodeInstall.Run( self.VARS, self.LOG ) + if ret == 1: WriteModprobeConfig.Run( self.VARS, self.LOG ) MakeInitrd.Run( self.VARS, self.LOG ) WriteNetworkConfig.Run( self.VARS, self.LOG ) CheckForNewDisks.Run( self.VARS, self.LOG ) SendHardwareConfigToPLC.Run( self.VARS, self.LOG ) ChainBootNode.Run( self.VARS, self.LOG ) + elif ret == -1: + _nodeNotInstalled('MSG_NODE_FILESYSTEM_CORRUPT') + elif ret == -2: + _nodeNotInstalled('MSG_NODE_MOUNT_FAILED') + elif ret == -3: + _nodeNotInstalled('MSG_NODE_MISSING_KERNEL') else: _nodeNotInstalled() @@ -220,7 +224,7 @@ class BootManager: # 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']= 'failboot' + self.VARS['RUN_LEVEL']= 'failboot' raise BootManagerException, "Hardware requirements not met." # runinstaller @@ -245,13 +249,13 @@ class BootManager: if not ConfirmInstallWithUser.Run( self.VARS, self.LOG ): return 0 self.VARS['BOOT_STATE']= 'reinstall' - UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) + UpdateRunLevelWithPLC.Run( self.VARS, self.LOG ) _reinstallRun() def _debugRun(state='failboot'): # implements debug logic, which starts the sshd and just waits around - self.VARS['BOOT_STATE']=state - UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) + self.VARS['RUN_LEVEL']=state + UpdateRunLevelWithPLC.Run( self.VARS, self.LOG ) StartDebug.Run( self.VARS, self.LOG ) # fsck/mount fs if present, and ignore return value if it's not. ValidateNodeInstall.Run( self.VARS, self.LOG ) @@ -262,10 +266,8 @@ class BootManager: _debugRun() # setup state -> function hash table - BootManager.NodeRunStates['install'] = _installRun BootManager.NodeRunStates['reinstall'] = _reinstallRun BootManager.NodeRunStates['boot'] = _bootRun - BootManager.NodeRunStates['failboot'] = _bootRun # should always try to boot. BootManager.NodeRunStates['safeboot'] = lambda : _debugRun('safeboot') BootManager.NodeRunStates['disabled'] = lambda : _debugRun('disabled') @@ -281,6 +283,7 @@ class BootManager: if self.forceState is not None: self.VARS['BOOT_STATE']= self.forceState UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) + UpdateRunLevelWithPLC.Run( self.VARS, self.LOG ) stateRun = BootManager.NodeRunStates.get(self.VARS['BOOT_STATE'],_badstateRun) stateRun()