From 4eea76a0545774fae808b29d94227be100872bf7 Mon Sep 17 00:00:00 2001 From: Stephen Soltesz Date: Fri, 24 Jul 2009 20:42:29 +0000 Subject: [PATCH] remove 'failboot' from possible boot states update run level rather than the boot state only upudate boot state for manual calls and reinstall->boot --- source/BootManager.py | 17 +++++++---------- source/steps/ChainBootNode.py | 1 - source/steps/GetAndUpdateNodeDetails.py | 1 + source/steps/ReadNodeConfiguration.py | 6 +++--- source/steps/UpdateBootStateWithPLC.py | 4 ++++ source/steps/WriteModprobeConfig.py | 2 +- source/steps/__init__.py | 1 + 7 files changed, 17 insertions(+), 15 deletions(-) diff --git a/source/BootManager.py b/source/BootManager.py index 1c3e78f..7460fd8 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, } @@ -173,7 +171,7 @@ class BootManager: def _nodeNotInstalled(): # called by the _xxxState() functions below upon failure - self.VARS['BOOT_STATE']= 'failboot' + self.VARS['RUN_LEVEL']= 'failboot' self.VARS['STATE_CHANGE_NOTIFY']= 1 self.VARS['STATE_CHANGE_NOTIFY_MESSAGE']= \ notify_messages.MSG_NODE_NOT_INSTALLED @@ -220,7 +218,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 +243,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 +260,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 +277,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() diff --git a/source/steps/ChainBootNode.py b/source/steps/ChainBootNode.py index f246162..e92ad58 100644 --- a/source/steps/ChainBootNode.py +++ b/source/steps/ChainBootNode.py @@ -11,7 +11,6 @@ import string import re import os -import UpdateBootStateWithPLC import UpdateNodeConfiguration from Exceptions import * import utils diff --git a/source/steps/GetAndUpdateNodeDetails.py b/source/steps/GetAndUpdateNodeDetails.py index 594683a..950466b 100644 --- a/source/steps/GetAndUpdateNodeDetails.py +++ b/source/steps/GetAndUpdateNodeDetails.py @@ -73,6 +73,7 @@ def Run( vars, log ): ['boot_state', 'nodegroup_ids', 'interface_ids', 'model', 'site_id']))[0] vars['BOOT_STATE']= node_details['boot_state'] + vars['RUN_LEVEL']= node_details['boot_state'] vars['NODE_MODEL']= string.strip(node_details['model']) vars['SITE_ID'] = node_details['site_id'] log.write( "Successfully retrieved node record.\n" ) diff --git a/source/steps/ReadNodeConfiguration.py b/source/steps/ReadNodeConfiguration.py index 370f5c5..caef8fe 100644 --- a/source/steps/ReadNodeConfiguration.py +++ b/source/steps/ReadNodeConfiguration.py @@ -17,7 +17,7 @@ from Exceptions import * import BootServerRequest import BootAPI import notify_messages -import UpdateBootStateWithPLC +import UpdateRunLevelWithPLC # two possible names of the configuration files @@ -605,12 +605,12 @@ def __parse_configuration_file( vars, log, file_contents ): if can_make_api_call: log.write( "Notifying contacts of problem.\n" ) - vars['BOOT_STATE']= 'failboot' + vars['RUN_LEVEL']= 'failboot' vars['STATE_CHANGE_NOTIFY']= 1 vars['STATE_CHANGE_NOTIFY_MESSAGE']= \ notify_messages.MSG_HOSTNAME_NOT_RESOLVE - UpdateBootStateWithPLC.Run( vars, log ) + UpdateRunLevelWithPLC.Run( vars, log ) log.write( "\n\n" ) log.write( "The hostname and/or ip in the network configuration\n" ) diff --git a/source/steps/UpdateBootStateWithPLC.py b/source/steps/UpdateBootStateWithPLC.py index 3c052be..9f65d1b 100644 --- a/source/steps/UpdateBootStateWithPLC.py +++ b/source/steps/UpdateBootStateWithPLC.py @@ -15,6 +15,10 @@ def Run( vars, log ): """ Change this nodes boot state at PLC. + The only valid transition is from reinstall to boot. All other changes to + the boot state of a node should be performed by the Admin, Tech or PI + through the API or Web interface. + The current value of the BOOT_STATE key in vars is used. Optionally, notify the contacts of the boot state change. If this is the case, the following keys/values diff --git a/source/steps/WriteModprobeConfig.py b/source/steps/WriteModprobeConfig.py index 63347ef..81f01bd 100644 --- a/source/steps/WriteModprobeConfig.py +++ b/source/steps/WriteModprobeConfig.py @@ -100,7 +100,7 @@ def Run( vars, log, filename = "/etc/modprobe.conf"): if eth_count == 0: log.write( "\nIt appears we don't have any network drivers. Aborting.\n" ) - vars['BOOT_STATE']= 'failboot' + vars['RUN_LEVEL']= 'failboot' vars['STATE_CHANGE_NOTIFY']= 1 vars['STATE_CHANGE_NOTIFY_MESSAGE']= \ notify_messages.MSG_NO_DETECTED_NETWORK diff --git a/source/steps/__init__.py b/source/steps/__init__.py index 82619f0..0f90a20 100644 --- a/source/steps/__init__.py +++ b/source/steps/__init__.py @@ -16,6 +16,7 @@ __all__ = ["ReadNodeConfiguration", "GetAndUpdateNodeDetails", "ConfirmInstallWithUser", "UpdateBootStateWithPLC", + "UpdateRunLevelWithPLC", "CheckHardwareRequirements", "SendHardwareConfigToPLC", "InitializeBootManager", -- 2.43.0