From: Marc Fiuczynski Date: Wed, 24 Dec 2008 15:02:50 +0000 (+0000) Subject: applied Daniel's patch to bring rawdisk support to the branch X-Git-Tag: BootManager-3.2-15~4 X-Git-Url: http://git.onelab.eu/?a=commitdiff_plain;h=20c30f74d8ce8bb6b0b81c51bd4124d8d1355803;p=bootmanager.git applied Daniel's patch to bring rawdisk support to the branch --- diff --git a/source/ModelOptions.py b/source/ModelOptions.py index 697b701..78adad0 100644 --- a/source/ModelOptions.py +++ b/source/ModelOptions.py @@ -18,6 +18,7 @@ NUMA = 0x020 GEODE = 0x040 BADHD = 0x080 LAST = 0x100 +RAWDISK = 0x200 modeloptions = {'smp':SMP, 'x64':X86_64, @@ -28,7 +29,8 @@ modeloptions = {'smp':SMP, 'numa':NUMA, 'geode':GEODE, 'badhd':BADHD, - 'minhw':MINHW} + 'minhw':MINHW, + 'rawdisk':RAWDISK} def Get(model): modelinfo = string.split(model,'/') diff --git a/source/configuration b/source/configuration index 5d98812..152cc75 100644 --- a/source/configuration +++ b/source/configuration @@ -51,6 +51,11 @@ ROOT_SIZE=7G SWAP_SIZE=1G +# in raw disk mode, the size of /vservers +# if unset or -1, use the entire first disk +VSERVERS_SIZE=-1 + + # whether or not to skip hardware requirement check SKIP_HARDWARE_REQUIREMENT_CHECK=0 diff --git a/source/steps/CheckForNewDisks.py b/source/steps/CheckForNewDisks.py index a952b09..2a31d73 100644 --- a/source/steps/CheckForNewDisks.py +++ b/source/steps/CheckForNewDisks.py @@ -15,6 +15,8 @@ import compatibility import utils import os +import ModelOptions + def Run( vars, log ): """ @@ -24,6 +26,7 @@ def Run( vars, log ): SYSIMG_PATH the path where the system image will be mounted BOOT_CD_VERSION A tuple of the current bootcd version MINIMUM_DISK_SIZE any disks smaller than this size, in GB, are not used + NODE_MODEL_OPTIONS the node's model options Set the following variables upon successfully running: ROOT_MOUNTED the node root file system is mounted @@ -47,6 +50,7 @@ def Run( vars, log ): if PARTITIONS == None: raise ValueError, "PARTITIONS" + NODE_MODEL_OPTIONS= vars["NODE_MODEL_OPTIONS"] except KeyError, var: raise BootManagerException, "Missing variable in vars: %s\n" % var except ValueError, var: @@ -107,16 +111,21 @@ def Run( vars, log ): log.write("To paranoid to add %s to vservers lvm.\n" % device) continue - log.write( "Attempting to add %s to the volume group\n" % device ) - if not InstallPartitionDisks.single_partition_device( device, vars, log ): log.write( "Unable to partition %s, not using it.\n" % device ) continue - log.write( "Successfully initialized %s\n" % device ) + log.write( "Successfully partitioned %s\n" % device ) + + if NODE_MODEL_OPTIONS & ModelOptions.RAWDISK: + log.write( "Running on a raw disk node, not using it.\n" ) + continue part_path= InstallPartitionDisks.get_partition_path_from_device( device, vars, log ) + + log.write( "Attempting to add %s to the volume group\n" % device ) + if not InstallPartitionDisks.create_lvm_physical_volume( part_path, vars, log ): log.write( "Unable to create lvm physical volume %s, not using it.\n" % diff --git a/source/steps/InstallPartitionDisks.py b/source/steps/InstallPartitionDisks.py index e49f0f9..01c0683 100644 --- a/source/steps/InstallPartitionDisks.py +++ b/source/steps/InstallPartitionDisks.py @@ -61,6 +61,13 @@ def Run( vars, log ): if PARTITIONS == None: raise ValueError, "PARTITIONS" + if NODE_MODEL_OPTIONS & ModelOptions.RAWDISK: + VSERVERS_SIZE= "-1" + if "VSERVER_SIZE" in vars: + VSERVERS_SIZE= vars["VSERVERS_SIZE"] + if VSERVERS_SIZE == "" or VSERVERS_SIZE == 0: + raise ValueError, "VSERVERS_SIZE" + except KeyError, var: raise BootManagerException, "Missing variable in vars: %s\n" % var except ValueError, var: @@ -90,11 +97,15 @@ def Run( vars, log ): used_devices= [] - for device in INSTALL_BLOCK_DEVICES: + for device in sorted(INSTALL_BLOCK_DEVICES): if single_partition_device( device, vars, log ): - used_devices.append( device ) - log.write( "Successfully initialized %s\n" % device ) + if (len(used_devices) > 0 and + (vars['NODE_MODEL_OPTIONS'] & ModelOptions.RAWDISK)): + log.write( "Running in raw disk mode, not using %s.\n" % device ) + else: + used_devices.append( device ) + log.write( "Successfully initialized %s\n" % device ) else: log.write( "Unable to partition %s, not using it.\n" % device ) continue @@ -122,11 +133,16 @@ def Run( vars, log ): # create root logical volume utils.sysexec( "lvcreate -L%s -nroot planetlab" % ROOT_SIZE, log ) - # create vservers logical volume with all remaining space - # first, we need to get the number of remaining extents we can use - remaining_extents= get_remaining_extents_on_vg( vars, log ) - - utils.sysexec( "lvcreate -l%s -nvservers planetlab" % remaining_extents, log ) + if vars['NODE_MODEL_OPTIONS'] & ModelOptions.RAWDISK and VSERVERS_SIZE != "-1": + utils.sysexec( "lvcreate -L%s -nvservers planetlab" % VSERVERS_SIZE, log ) + remaining_extents= get_remaining_extents_on_vg( vars, log ) + utils.sysexec( "lvcreate -l%s -nrawdisk planetlab" % remaining_extents, log ) + else: + # create vservers logical volume with all remaining space + # first, we need to get the number of remaining extents we can use + remaining_extents= get_remaining_extents_on_vg( vars, log ) + + utils.sysexec( "lvcreate -l%s -nvservers planetlab" % remaining_extents, log ) # activate volume group (should already be active) #utils.sysexec( TEMP_PATH + "vgchange -ay planetlab", log )