remove 'failboot' from possible boot states
authorStephen Soltesz <soltesz@cs.princeton.edu>
Fri, 24 Jul 2009 20:42:29 +0000 (20:42 +0000)
committerStephen Soltesz <soltesz@cs.princeton.edu>
Fri, 24 Jul 2009 20:42:29 +0000 (20:42 +0000)
update run level rather than the boot state
only upudate boot state for manual calls and reinstall->boot

source/BootManager.py
source/steps/ChainBootNode.py
source/steps/GetAndUpdateNodeDetails.py
source/steps/ReadNodeConfiguration.py
source/steps/UpdateBootStateWithPLC.py
source/steps/WriteModprobeConfig.py
source/steps/__init__.py

index 1c3e78f..7460fd8 100755 (executable)
@@ -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()
index f246162..e92ad58 100644 (file)
@@ -11,7 +11,6 @@ import string
 import re
 import os
 
-import UpdateBootStateWithPLC
 import UpdateNodeConfiguration
 from Exceptions import *
 import utils
index 594683a..950466b 100644 (file)
@@ -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" )
index 370f5c5..caef8fe 100644 (file)
@@ -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" )
index 3c052be..9f65d1b 100644 (file)
@@ -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
index 63347ef..81f01bd 100644 (file)
@@ -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
index 82619f0..0f90a20 100644 (file)
@@ -16,6 +16,7 @@ __all__ = ["ReadNodeConfiguration",
            "GetAndUpdateNodeDetails",
            "ConfirmInstallWithUser",
            "UpdateBootStateWithPLC",
+           "UpdateRunLevelWithPLC",
            "CheckHardwareRequirements",
            "SendHardwareConfigToPLC",
            "InitializeBootManager",