-#!/usr/bin/python2
-
+#!/usr/bin/python
+#
# Copyright (c) 2003 Intel Corporation
# All rights reserved.
#
import BootServerRequest
import BootAPI
import notify_messages
-import UpdateBootStateWithPLC
+import UpdateRunLevelWithPLC
# two possible names of the configuration files
and read, return 1.
Expect the following variables from the store:
- BOOT_CD_VERSION A tuple of the current bootcd version
- SUPPORT_FILE_DIR directory on the boot servers containing
- scripts and support files
Sets the following variables from the configuration file:
WAS_NODE_ID_IN_CONF Set to 1 if the node id was in the conf file
# make sure we have the variables we need
- try:
- BOOT_CD_VERSION= vars["BOOT_CD_VERSION"]
- if BOOT_CD_VERSION == "":
- raise ValueError, "BOOT_CD_VERSION"
-
- SUPPORT_FILE_DIR= vars["SUPPORT_FILE_DIR"]
- if SUPPORT_FILE_DIR == None:
- raise ValueError, "SUPPORT_FILE_DIR"
-
- except KeyError, var:
- raise BootManagerException, "Missing variable in vars: %s\n" % var
- except ValueError, var:
- raise BootManagerException, "Variable in vars, shouldn't be: %s\n" % var
-
INTERFACE_SETTINGS= {}
INTERFACE_SETTINGS['method']= "dhcp"
conf_file_path= "%s/%s" % (mount_point,NEW_CONF_FILE_NAME)
- log.write( "Checking for existence of %s\n" % conf_file_path )
+# log.write( "Checking for existence of %s\n" % conf_file_path )
if os.access( conf_file_path, os.R_OK ):
try:
conf_file= file(conf_file_path,"r")
utils.sysexec_noerr( "umount %s" % mount_point, log )
if __parse_configuration_file( vars, log, conf_file_contents):
+ log.write("ReadNodeConfiguration: [1] using %s from floppy /dev/fd0\n"%NEW_CONF_FILE_NAME)
return 1
else:
raise BootManagerException( "Found configuration file plnode.txt " \
# try to parse it later...
conf_file_path= "%s/%s" % (mount_point,OLD_CONF_FILE_NAME)
- log.write( "Checking for existence of %s (used later)\n" % conf_file_path )
+# this message really does not convey any useful information
+# log.write( "Checking for existence of %s (used later)\n" % conf_file_path )
if os.access( conf_file_path, os.R_OK ):
try:
old_conf_file= file(conf_file_path,"r")
utils.sysexec_noerr( "umount %s" % mount_point, log )
+ # 2. check flash devices on 3.0 based cds
+ log.write( "Checking flash devices for plnode.txt file.\n" )
+ # this is done the same way the 3.0 cds do it, by attempting
+ # to mount and sd*1 devices that are removable
+ devices= os.listdir("/sys/block/")
- if BOOT_CD_VERSION[0] >= 3:
- # 2. check flash devices on 3.0 based cds
- log.write( "Checking flash devices for plnode.txt file.\n" )
+ for device in devices:
+ if device[:2] != "sd":
+ log.write( "Skipping non-scsi device %s\n" % device )
+ continue
- # this is done the same way the 3.0 cds do it, by attempting
- # to mount and sd*1 devices that are removable
- devices= os.listdir("/sys/block/")
+ # test removable
+ removable_file_path= "/sys/block/%s/removable" % device
+ try:
+ removable= int(file(removable_file_path,"r").read().strip())
+ except ValueError, e:
+ continue
+ except IOError, e:
+ continue
- for device in devices:
- if device[:2] != "sd":
- log.write( "Skipping non-scsi device %s\n" % device )
- continue
+ if not removable:
+ log.write( "Skipping non-removable device %s\n" % device )
+ continue
- # test removable
- removable_file_path= "/sys/block/%s/removable" % device
- try:
- removable= int(file(removable_file_path,"r").read().strip())
- except ValueError, e:
- continue
- except IOError, e:
- continue
+ log.write( "Checking removable device %s\n" % device )
- if not removable:
- log.write( "Skipping non-removable device %s\n" % device )
+ partitions= file("/proc/partitions", "r")
+ for line in partitions:
+ found_file= 0
+ parsed_file= 0
+
+ if not re.search("%s[0-9]*$" % device, line):
continue
- log.write( "Checking removable device %s\n" % device )
+ try:
+ # major minor #blocks name
+ parts= string.split(line)
- partitions= file("/proc/partitions", "r")
- for line in partitions:
- found_file= 0
- parsed_file= 0
-
- if not re.search("%s[0-9]*$" % device, line):
- continue
+ # ok, try to mount it and see if we have a conf file.
+ full_device= "/dev/%s" % parts[3]
+ except IndexError, e:
+ log.write( "Incorrect /proc/partitions line:\n%s\n" % line )
+ continue
- try:
- # major minor #blocks name
- parts= string.split(line)
+ log.write( "Mounting %s on %s\n" % (full_device,mount_point) )
+ try:
+ utils.sysexec( "mount -o ro -t ext2,msdos %s %s" \
+ % (full_device,mount_point), log )
+ except BootManagerException, e:
+ log.write( "Unable to mount, trying next partition\n" )
+ continue
- # ok, try to mount it and see if we have a conf file.
- full_device= "/dev/%s" % parts[3]
- except IndexError, e:
- log.write( "Incorrect /proc/partitions line:\n%s\n" % line )
- continue
+ conf_file_path= "%s/%s" % (mount_point,NEW_CONF_FILE_NAME)
- log.write( "Mounting %s on %s\n" % (full_device,mount_point) )
+ log.write( "Checking for existence of %s\n" % conf_file_path )
+ if os.access( conf_file_path, os.R_OK ):
try:
- utils.sysexec( "mount -o ro -t ext2,msdos %s %s" \
- % (full_device,mount_point), log )
- except BootManagerException, e:
- log.write( "Unable to mount, trying next partition\n" )
- continue
-
- conf_file_path= "%s/%s" % (mount_point,NEW_CONF_FILE_NAME)
-
- log.write( "Checking for existence of %s\n" % conf_file_path )
- if os.access( conf_file_path, os.R_OK ):
- try:
- conf_file= file(conf_file_path,"r")
- conf_file_contents= conf_file.read()
- conf_file.close()
- found_file= 1
- log.write( "Read in contents of file %s\n" % \
- conf_file_path )
-
- if __parse_configuration_file( vars, log, \
- conf_file_contents):
- parsed_file= 1
- except IOError, e:
- log.write( "Unable to read file %s\n" % conf_file_path )
-
- utils.sysexec_noerr( "umount %s" % mount_point, log )
- if found_file:
- if parsed_file:
- return 1
- else:
- raise BootManagerException( \
- "Found configuration file plnode.txt " \
- "on floppy, but was unable to parse it.")
+ conf_file= file(conf_file_path,"r")
+ conf_file_contents= conf_file.read()
+ conf_file.close()
+ found_file= 1
+ log.write( "Read in contents of file %s\n" % \
+ conf_file_path )
+
+ if __parse_configuration_file( vars, log, conf_file_contents):
+ parsed_file= 1
+ except IOError, e:
+ log.write( "Unable to read file %s\n" % conf_file_path )
+
+ utils.sysexec_noerr( "umount %s" % mount_point, log )
+ if found_file:
+ if parsed_file:
+ log.write("ReadNodeConfiguration: [2] using %s from partition %s\n"%\
+ (NEW_CONF_FILE_NAME,full_device))
+ return 1
+ else:
+ raise BootManagerException( \
+ "Found configuration file on %s, but was unable to parse it."%full_device)
# 3. check standard floppy disk for old file name planet.cnf
- log.write( "Checking standard floppy disk for planet.cnf file " \
- "(from earlier.\n" )
+ log.write( "Checking standard floppy disk for planet.cnf file (for legacy nodes).\n" )
if old_conf_file_contents:
if __parse_configuration_file( vars, log, old_conf_file_contents):
+ log.write("ReadNodeConfiguration: [3] using %s from floppy /dev/fd0\n"%OLD_CONF_FILE_NAME)
return 1
else:
raise BootManagerException( "Found configuration file planet.cnf " \
pass
if __parse_configuration_file( vars, log, conf_file_contents):
+ log.write("ReadNodeConfiguration: [4] using %s from ramdisk\n"%NEW_CONF_FILE_NAME)
return 1
else:
raise BootManagerException( "Found configuration file plnode.txt " \
pass
if __parse_configuration_file( vars, log, conf_file_contents):
+ log.write("ReadNodeConfiguration: [5] using %s from CD in /usr/boot\n"%NEW_CONF_FILE_NAME)
return 1
else:
raise BootManagerException( "Found configuration file plnode.txt " \
pass
if __parse_configuration_file( vars, log, conf_file_contents):
+ log.write("ReadNodeConfiguration: [6] using %s from /usr\n"%NEW_CONF_FILE_NAME)
return 1
else:
raise BootManagerException( "Found configuration file plnode.txt " \
of the configuration file is completed.
"""
- BOOT_CD_VERSION= vars["BOOT_CD_VERSION"]
- SUPPORT_FILE_DIR= vars["SUPPORT_FILE_DIR"]
INTERFACE_SETTINGS= vars["INTERFACE_SETTINGS"]
if file_contents is None:
log.write( "Configuration file does not contain the node_id value.\n" )
log.write( "Querying PLC for node_id.\n" )
- bs_request= BootServerRequest.BootServerRequest()
+ bs_request= BootServerRequest.BootServerRequest(vars)
postVars= {"mac_addr" : INTERFACE_SETTINGS["mac"]}
- result= bs_request.DownloadFile( "%s/getnodeid.php" %
- SUPPORT_FILE_DIR,
+ result= bs_request.DownloadFile( "/boot/getnodeid.php",
None, postVars, 1, 1,
"/tmp/node_id")
if result == 0:
# but in binary form, so we need to convert it to ascii the same
# way the old boot scripts did so it matches whats in the db
# (php uses bin2hex,
- if BOOT_CD_VERSION[0] == 2:
- read_mode= "rb"
- else:
- read_mode= "r"
+ read_mode= "r"
try:
nonce_file= file("/tmp/nonce",read_mode)
log.write( "Unable to read nonce from /tmp/nonce\n" )
return 0
- if BOOT_CD_VERSION[0] == 2:
- nonce= nonce.encode('hex')
-
- # there is this nice bug in the php that currently accepts the
- # nonce for the old scripts, in that if the nonce contains
- # null chars (2.x cds sent as binary), then
- # the nonce is truncated. so, do the same here, truncate the nonce
- # at the first null ('00'). This could leave us with an empty string.
- nonce_len= len(nonce)
- for byte_index in range(0,nonce_len,2):
- if nonce[byte_index:byte_index+2] == '00':
- nonce= nonce[:byte_index]
- break
- else:
- nonce= string.strip(nonce)
+ nonce= string.strip(nonce)
log.write( "Read nonce, using as key.\n" )
vars['NODE_KEY']= nonce
vars["INTERFACE_SETTINGS"]= INTERFACE_SETTINGS
- if not hostname_resolve_ok and not vars['DISCONNECTED_OPERATION']:
+ if (not hostname_resolve_ok and not vars['DISCONNECTED_OPERATION'] and
+ 'NAT_MODE' not in vars):
log.write( "Hostname does not resolve correctly, will not continue.\n" )
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" )
raise BootManagerException, \
"Configured node hostname does not resolve."
+ try:
+ log.write("Using NODE_ID %d\n"%vars['NODE_ID'])
+ except:
+ log.write("Unknown NODE_ID")
+
return 1