X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=source%2FBootManager.py;h=32d7ba89669bec83c3f13a6a7d19737ea0566428;hb=7b5214d6358e7aa2599abf78e455dcd0cd96cf96;hp=714aa15cbb15b1f5860f7a8d24dd5fde0b38677c;hpb=373ed1b705da6b5eb52295d4215857ff923f0815;p=bootmanager.git diff --git a/source/BootManager.py b/source/BootManager.py index 714aa15..32d7ba8 100755 --- a/source/BootManager.py +++ b/source/BootManager.py @@ -1,5 +1,5 @@ #!/usr/bin/python -u - +# # Copyright (c) 2003 Intel Corporation # All rights reserved. # @@ -15,6 +15,7 @@ from steps import * from Exceptions import * import notify_messages import BootServerRequest +import utils # all output is written to this file BM_NODE_LOG= "/tmp/bm.log" @@ -109,7 +110,7 @@ class log: self.LogEntry( str, 0, 1 ) # bm log uploading is available back again, as of nodeconfig-5.0-2 - def Upload( self ): + def Upload( self, extra_file=None ): """ upload the contents of the log to the server """ @@ -124,11 +125,29 @@ class log: hostname= self.VARS['INTERFACE_SETTINGS']['hostname'] + "." + \ self.VARS['INTERFACE_SETTINGS']['domainname'] bs_request = BootServerRequest.BootServerRequest(self.VARS) - bs_request.MakeRequest(PartialPath = self.VARS['UPLOAD_LOG_SCRIPT'], - GetVars = None, PostVars = None, - FormData = ["log=@" + self.OutputFilePath, - "hostname=" + hostname, "type=bm.log"], - DoSSL = True, DoCertCheck = True) + try: + # this was working until f10 + bs_request.MakeRequest(PartialPath = self.VARS['UPLOAD_LOG_SCRIPT'], + GetVars = None, PostVars = None, + DoSSL = True, DoCertCheck = True, + FormData = ["log=@" + self.OutputFilePath, + "hostname=" + hostname, + "type=bm.log"]) + except: + # new pycurl + import pycurl + bs_request.MakeRequest(PartialPath = self.VARS['UPLOAD_LOG_SCRIPT'], + GetVars = None, PostVars = None, + DoSSL = True, DoCertCheck = True, + FormData = [('log',(pycurl.FORM_FILE, self.OutputFilePath)), + ("hostname",hostname), + ("type","bm.log")]) + if extra_file is not None: + # NOTE: for code-reuse, evoke the bash function 'upload_logs'; + # by adding --login, bash reads .bash_profile before execution. + # Also, never fail, since this is an optional feature. + utils.sysexec_noerr( """bash --login -c "upload_logs %s" """ % extra_file, self) + ############################## class BootManager: @@ -179,7 +198,7 @@ class BootManager: If requriements not met, but tests were succesfull, return 0. for steps that run within the installer, they are expected to either - complete succesfully and return 1, or throw an execption. + complete succesfully and return 1, or throw an exception. For exact return values and expected operations, see the comments at the top of each of the invididual step functions. @@ -210,8 +229,13 @@ class BootManager: InstallInit.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 ) +# Thierry - feb. 2013 turning off WriteModprobeConfig for now on lxc +# for one thing this won't work at all with f18, as modules.pcimap +# has disappeared (Daniel suggested modules.aliases could be used instead) +# and second, in any case it's been years now that modprobe.conf was deprecated +# so most likely this code has no actual effect + if self.VARS['virt'] == 'vs': + WriteModprobeConfig.Run( self.VARS, self.LOG ) WriteNetworkConfig.Run( self.VARS, self.LOG ) CheckForNewDisks.Run( self.VARS, self.LOG ) SendHardwareConfigToPLC.Run( self.VARS, self.LOG ) @@ -253,6 +277,7 @@ class BootManager: self.VARS['STATE_CHANGE_NOTIFY']= 1 self.VARS['STATE_CHANGE_NOTIFY_MESSAGE']= \ notify_messages.MSG_INSTALL_FINISHED + AnsibleHook.Run( self.VARS, self.LOG ) UpdateBootStateWithPLC.Run( self.VARS, self.LOG ) _bootRun() @@ -265,13 +290,13 @@ class BootManager: if not ConfirmInstallWithUser.Run( self.VARS, self.LOG ): return 0 self.VARS['BOOT_STATE']= 'reinstall' - UpdateRunLevelWithPLC.Run( self.VARS, self.LOG ) + + AnsibleHook.Run( self.VARS, self.LOG ) _reinstallRun() def _debugRun(state='failboot'): # implements debug logic, which starts the sshd and just waits around 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 ) @@ -292,6 +317,7 @@ class BootManager: InitializeBootManager.Run( self.VARS, self.LOG ) ReadNodeConfiguration.Run( self.VARS, self.LOG ) AuthenticateWithPLC.Run( self.VARS, self.LOG ) + UpdateLastBootOnce.Run( self.VARS, self.LOG ) StartRunlevelAgent.Run( self.VARS, self.LOG ) GetAndUpdateNodeDetails.Run( self.VARS, self.LOG ) @@ -299,7 +325,6 @@ 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() @@ -338,7 +363,7 @@ def main(argv): import utils utils.prompt_for_breakpoint_mode() - utils.breakpoint ("Entering BootManager::main") +# utils.breakpoint ("Entering BootManager::main") # set to 1 if error occurred error= 0 @@ -347,6 +372,9 @@ def main(argv): # the data back to PlanetLab central LOG= log( BM_NODE_LOG ) + # NOTE: assume CWD is BM's source directory, but never fail + utils.sysexec_noerr("./setup_bash_history_scripts.sh", LOG) + LOG.LogEntry( "BootManager started at: %s" % \ time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()) )