+
+
+
+def update_vserver_network_files( vserver_dir, vars, log ):
+ """
+ Update the /etc/resolv.conf and /etc/hosts files in the specified
+ vserver directory. If the files do not exist, write them out. If they
+ do exist, rewrite them with new values if the file UPDATE_FILE_FLAG
+ exists it /etc. if this is called with the vserver-reference directory,
+ always update the network config files and create the UPDATE_FILE_FLAG.
+
+ This is currently called when setting up the initial vserver reference,
+ and later when nodes boot to update existing vserver images.
+
+ Expect the following variables from the store:
+ SYSIMG_PATH the path where the system image will be mounted
+ (always starts with TEMP_PATH)
+ NETWORK_SETTINGS A dictionary of the values from the network
+ configuration file
+ """
+
+ try:
+ SYSIMG_PATH= vars["SYSIMG_PATH"]
+ if SYSIMG_PATH == "":
+ raise ValueError, "SYSIMG_PATH"
+
+ NETWORK_SETTINGS= vars["NETWORK_SETTINGS"]
+ if NETWORK_SETTINGS == "":
+ raise ValueError, "NETWORK_SETTINGS"
+
+ 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
+
+ try:
+ ip= NETWORK_SETTINGS['ip']
+ method= NETWORK_SETTINGS['method']
+ hostname= NETWORK_SETTINGS['hostname']
+ domainname= NETWORK_SETTINGS['domainname']
+ except KeyError, var:
+ raise BootManagerException, \
+ "Missing network value %s in var NETWORK_SETTINGS\n" % var
+
+ try:
+ os.listdir(vserver_dir)
+ except OSError:
+ log.write( "Directory %s does not exist to write network conf in.\n" %
+ vserver_dir )
+ return
+
+ file_path= "%s/etc/%s" % (vserver_dir,UPDATE_FILE_FLAG)
+ update_files= 0
+ if os.access(file_path,os.F_OK):
+ update_files= 1
+
+
+ if '/.vref/' in vserver_dir or \
+ '/.vcache/' in vserver_dir or \
+ '/vserver-reference' in vserver_dir:
+ log.write( "Forcing update on vserver reference directory:\n%s\n" %
+ vserver_dir )
+ utils.sysexec_noerr( "echo '%s' > %s/etc/%s" %
+ (UPDATE_FILE_FLAG,vserver_dir,UPDATE_FILE_FLAG),
+ log )
+ update_files= 1
+
+
+ if update_files:
+ log.write( "Updating network files in %s.\n" % vserver_dir )
+
+ file_path= "%s/etc/hosts" % vserver_dir
+ hosts_file= file(file_path, "w" )
+ hosts_file.write( "127.0.0.1 localhost\n" )
+ if method == "static":
+ hosts_file.write( "%s %s.%s\n" % (ip, hostname, domainname) )
+ hosts_file.close()
+ hosts_file= None
+
+
+ file_path= "%s/etc/resolv.conf" % vserver_dir
+ if method == "dhcp":
+ # copy the resolv.conf from the boot cd env.
+ utils.sysexec( "cp /etc/resolv.conf %s/etc" % vserver_dir, log )
+ else:
+ # copy the generated resolv.conf from the system image, since
+ # we generated it via static settings
+ utils.sysexec( "cp %s/etc/resolv.conf %s/etc" % \
+ (SYSIMG_PATH,vserver_dir), log )
+
+ return