-#!/usr/bin/python2
-
-# Copyright (c) 2003 Intel Corporation
-# All rights reserved.
-#
-# Copyright (c) 2004-2006 The Trustees of Princeton University
-# All rights reserved.
-# expected /proc/partitions format
-
-
-import os
-import string
-
-from Exceptions import *
-import utils
-
-
-# if this file is present in the vservers /etc directory,
-# the resolv.conf and hosts files will automatically be updated
-# by the bootmanager
-UPDATE_FILE_FLAG= "AUTO_UPDATE_NET_FILES"
-
-# the name of the vserver-reference directory
-VSERVER_REFERENCE_DIR_NAME='vserver-reference'
-
-
-def Run( vars, log ):
- """
- Setup directories for building vserver reference image.
-
- Except 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
-
- Sets the following variables:
- None
-
- """
-
- log.write( "\n\nStep: Install: Setting up VServer image.\n" )
-
- # make sure we have the variables we need
- 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
-
- vserver_ref_dir= "/vservers/vserver-reference"
- full_vserver_ref_path= "%s/%s" % (SYSIMG_PATH,vserver_ref_dir)
-
- utils.makedirs( full_vserver_ref_path )
- utils.makedirs( "%s/etc" % full_vserver_ref_path )
-
- log.write( "Setting permissions on directories\n" )
- utils.sysexec( "chmod 0000 %s/vservers/" % SYSIMG_PATH, log )
-
- return 1
-
-
-
-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 vserver_dir.find(VSERVER_REFERENCE_DIR_NAME) != -1:
- 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