From 29a31124f3e7d936ad2ff3ffbf5fdc35d29615dc Mon Sep 17 00:00:00 2001 From: Thierry Parmentelat Date: Fri, 11 Jan 2008 17:11:34 +0000 Subject: [PATCH] First draft of a dual method for installing extensions - core tarball always installed through the tarball - extensions (nodegroups) are then attempted by the same method i.e. by fetching PlanetLab-Bootstrap-%s.tar.bz2 - if that fails, then we try via yum groupinstall extension NOTE. due to a bug with GetNodes that causes the nodegroups fetching part to fail I could not have the tests completed yet However nodes should correctly install the core software --- source/steps/InstallBootstrapRPM.py | 43 +++++++++++++++++++++++------ 1 file changed, 34 insertions(+), 9 deletions(-) diff --git a/source/steps/InstallBootstrapRPM.py b/source/steps/InstallBootstrapRPM.py index 5ee0ccd..910fe48 100644 --- a/source/steps/InstallBootstrapRPM.py +++ b/source/steps/InstallBootstrapRPM.py @@ -91,35 +91,55 @@ def Run( vars, log ): vars['ROOT_MOUNTED']= 1 # check which nodegroups we are part of (>=4.0) - tarballs = ["PlanetLab-Bootstrap.tar.bz2"] + extensions = [ "__main__" ] + utils.breakpoint("querying nodegroups") try: +# for (k,v) in vars.iteritems(): +# print "vars['%s']='%s'"%(k,v) +# print 'NODE_ID=%d'%NODE_ID nodes = BootAPI.call_api_function(vars, "GetNodes", ([NODE_ID], ['nodegroup_ids'])) node = nodes[0] nodegroups = BootAPI.call_api_function(vars, "GetNodeGroups", (node['nodegroup_ids'], ['name'])) - for nodegroup in nodegroups: - tarballs.append("PlanetLab-Bootstrap-%s.tar.bz2" % nodegroup['name'].lower()) + extensions += [ nodegroup['name'].lower() for nodegroup in nodegroups] + except: + log.write("WARNING : Failed to query nodegroups - installing only core software\n") + utils.breakpoint('query failure') pass # download and extract support tarball for this step, which has # everything we need to successfully run - for step_support_file in tarballs: - source_file= "%s/%s" % (SUPPORT_FILE_DIR,step_support_file) - dest_file= "%s/%s" % (SYSIMG_PATH, step_support_file) + + # we first try to find a tarball, if it is not found we use yum instead + yum_extensions = [] + # download and extract support tarball for this step, which has + for extension in extensions: + if extension == "__main__": + tarball = "PlanetLab-Bootstrap.tar.bz2" + else: + tarball = "PlanetLab-Bootstrap-%s.tar.bz2"%extension + source_file= "%s/%s" % (SUPPORT_FILE_DIR,tarball) + dest_file= "%s/%s" % (SYSIMG_PATH, tarball) # 30 is the connect timeout, 14400 is the max transfer time in # seconds (4 hours) - log.write( "downloading %s\n" % step_support_file ) + log.write( "downloading %s\n" % tarball ) result= bs_request.DownloadFile( source_file, None, None, 1, 1, dest_file, 30, 14400) if result: log.write( "extracting %s in %s\n" % (dest_file,SYSIMG_PATH) ) result= utils.sysexec( "tar -C %s -xpjf %s" % (SYSIMG_PATH,dest_file), log ) + log.write( "Done\n") utils.removefile( dest_file ) else: - raise BootManagerException, "Unable to download %s from server." % \ - source_file + # the main tarball is required + if extension == "__main__": + raise BootManagerException, "Unable to download %s from server." % \ + source_file + else: + log.write("tarball for %s not found, scheduling a yum attempt\n"%extension) + yum_extensions.append(extension) # copy resolv.conf from the base system into our temp dir # so DNS lookups work correctly while we are chrooted @@ -154,4 +174,9 @@ def Run( vars, log ): utils.sysexec("chroot %s rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-planetlab" % \ SYSIMG_PATH) + for extension in yum_extensions: + yum_command="yum groupinstall extension%s"%extension + log.write("Attempting to install extension %s through yum\n"%extension) + utils.sysexec("chroot %s %s" % (SYSIMG_PATH,yum_command)) + return 1 -- 2.43.0