cosmetic
[bootmanager.git] / source / BootManager.py
index c5e27f3..f2462bc 100755 (executable)
@@ -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:
@@ -77,6 +80,7 @@ class log:
         """
 
         if self.OutputFile is not None:
+            self.LogEntry( "NOTE: upload logs is known to be broken (beg)")
             self.LogEntry( "Uploading logs to %s" % UPLOAD_LOG_PATH )
             
             self.OutputFile.close()
@@ -87,6 +91,7 @@ class log:
                                    GetVars = None, PostVars = None,
                                    FormData = ["log=@" + self.OutputFilePath],
                                    DoSSL = True, DoCertCheck = True)
+            self.LogEntry( "NOTE: upload logs is known to be broken (end)")
         
     
 
@@ -175,7 +180,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,29 +198,26 @@ 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 )
-            InstallBuildVServer.Run( self.VARS, self.LOG )
             InstallUninitHardware.Run( self.VARS, self.LOG )
             self.VARS['BOOT_STATE']= 'boot'
             self.VARS['STATE_CHANGE_NOTIFY']= 1
@@ -227,19 +229,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 )
 
@@ -250,11 +252,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:
@@ -295,12 +298,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
@@ -310,7 +320,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
@@ -327,7 +337,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
 
@@ -349,7 +359,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