BOOT_VERSION_2X_FILE='/usr/bootme/ID'
BOOT_VERSION_3X_FILE='/pl_version'
+# locations of boot server name/certificate files
+V2X_BOOTCD_SERVER_FILE = "/usr/bootme/BOOTSERVER"
+V2X_BOOTCD_SERVER_CACERT_DIR = "/usr/bootme/cacert"
+V2X_CACERT_NAME = "cacert.pem"
+
+V3X_BOOTCD_SERVER_FILE = "/usr/boot/boot_server"
+V3X_BOOTCD_SERVER_CACERT = "/usr/boot/cacert.pem"
+
# minimium version of the boot os we need to run, as a (major,minor) tuple
MINIMUM_BOOT_VERSION= (2,0)
Sets the following variables:
BOOT_CD_VERSION A two number tuple of the boot cd version
+ MA_BOOT_SERVER The boot server we contacted, identified from
+ files on the boot cd.
+ MA_BOOT_SERVER_CACERT The SSL certificate for the above server
+
"""
log.write( "\n\nStep: Initializing the BootManager.\n" )
-
- log.write( "Opening connection to API server\n" )
- try:
- api_inst= xmlrpclib.Server( vars['BOOT_API_SERVER'], verbose=0 )
- except KeyError, e:
- raise BootManagerException, \
- "configuration file does not specify API server URL"
-
- vars['API_SERVER_INST']= api_inst
if not __check_boot_version( vars, log ):
raise BootManagerException, \
str(vars['BOOT_CD_VERSION']) )
BOOT_CD_VERSION= vars['BOOT_CD_VERSION']
+
+
+ log.write( "Identifying boot server and setting up /etc/planetlab entries" )
+
+ # need to pull the server name we contacted. 2.x cds will have the
+ # info in /usr/bootme; 3.x cds in /usr/boot
+ if BOOT_CD_VERSION[0] == 2:
+ try:
+ boot_server= file(V2X_BOOTCD_SERVER_FILE).read().strip()
+ except IOError:
+ raise BootManagerException, \
+ "It appears we are running on a v2.x boot cd, but could " \
+ "not load contacted boot server from %s" % V2X_BOOTCD_SERVER_FILE
+
+ if boot_server == "":
+ raise BootManagerException, \
+ "It appears we are running on a v2.x boot cd, but %s " \
+ "appears to be blank." % V2X_BOOTCD_SERVER_FILE
+
+ cacert_file= "%s/%s/%s" % (V2X_BOOTCD_SERVER_CACERT_DIR,
+ boot_server, V2X_CACERT_NAME)
+
+ elif BOOT_CD_VERSION[0] == 3:
+ try:
+ boot_server= file(V3X_BOOTCD_SERVER_FILE).read().strip()
+ except IOError:
+ raise BootManagerException, \
+ "It appears we are running on a v3.x boot cd, but could " \
+ "not load contacted boot server from %s" % V3X_BOOTCD_SERVER_FILE
+
+ if boot_server == "":
+ raise BootManagerException, \
+ "It appears we are running on a v3.x boot cd, but %s " \
+ "appears to be blank." % V3X_BOOTCD_SERVER_FILE
+
+ cacert_file= V3X_BOOTCD_SERVER_CACERT
+
+ else:
+ raise BootManagerException, "Unknown boot cd version."
+
+ if not os.access(cacert_file, os.R_OK):
+ raise BootManagerException, \
+ "Could not find the certificate for the " \
+ "specified boot server (at %s)" % cacert_file
+
+ # tell the log instance about the boot server so it knows
+ # where to upload the logs
+ try:
+ log.SetUploadServer( self.VARS['MA_BOOT_SERVER'] )
+ except KeyError, e:
+ log.LogEntry( "configuration does not contain boot server name." )
+ return
+
+
+ # now that we have the boot server name and the location of its certificate,
+ # write out /etc/planetlab/primary_ma with this info.
+ try:
+ primary_ma_file= file("/etc/planetlab/primary_ma","w")
+ primary_ma_file.write( "MA_NAME=\"Unknown\"\n" )
+ primary_ma_file.write( "MA_BOOT_SERVER=\"%s\"\n" % boot_server )
+ primary_ma_file.write( "MA_BOOT_SERVER_CACERT=\"%s\"\n" % cacert_file )
+ primary_ma_file.close()
+ primary_ma_file= None
+ except IOError:
+ raise BootManagerException, "Unable to write out /etc/planetlab/primary_ma"
+
+ vars['MA_BOOT_SERVER']= boot_server
+ vars['MA_BOOT_SERVER_CACRET']= cacert_file
+
+ self.Message( "Using boot server %s with certificate" %
+ (boot_server,cacert_file) )
+
+
+ log.write( "Opening connection to API server\n" )
+ api_server_url= "https://%s/PLCAPI/" % vars['MA_BOOT_SERVER']
+ api_inst= xmlrpclib.Server( api_server_url, verbose=0 )
+ vars['API_SERVER_INST']= api_inst
+
# old cds need extra modules loaded for compaq smart array
if BOOT_CD_VERSION[0] == 2: