Added support for 'ephmeral0.<auto|any|0>' for device mappings in disk

formating support.
This commit is contained in:
Ben Howard 2013-10-03 17:30:57 -06:00
parent 798a7527c6
commit 64c0b1f508
2 changed files with 33 additions and 5 deletions

View File

@ -94,6 +94,15 @@ def update_disk_setup_devices(disk_setup, tformer):
LOG.debug("updated disk_setup device entry '%s' to '%s'",
origname, transformed)
def reset_part_definition(definition, value):
if not value and 'partition' in definition:
definition['opartition'] = definition['partition']
del definition['partition']
else:
definition['partition'] = value
return definition
def update_fs_setup_devices(disk_setup, tformer):
# update 'fs_setup' dictionary anywhere were a device may occur
@ -109,17 +118,27 @@ def update_fs_setup_devices(disk_setup, tformer):
continue
transformed = None
if len(origname.split('.')) > 1:
if len(origname.split('.')) == 2:
# this maps ephemeralX.Y to a proper disk name. For example,
# if the origname is 'ephemeral0.1' and transformed is /dev/sdb
# then the returned device will be /dev/sdb1 _if_ /dev/sdb1 exists
# otherwise NONE
base_name = origname.split('.')[0]
base_name, partition = origname.split('.')
tformed = tformer(base_name)
LOG.info("base device for %s is %s" % (origname, tformed))
transformed = util.map_device_alias(tformed, alias=origname)
LOG.info("%s is mapped to %s" % (origname, transformed))
if partition == "0":
transformed = tformed
definition = reset_part_definition(definition, None)
elif partition in ("auto", "any"):
definition = reset_part_definition(definition, partition)
transformed = tformed
else:
definition = reset_part_definition(definition, None)
transformed = util.map_device_alias(tformed, alias=origname)
LOG.info("%s is mapped to %s" % (origname, transformed))
else:
transformed = tformer(origname)

View File

@ -170,6 +170,7 @@ The general format is:
device: <DEVICE>
partition: <PART_VALUE>
overwrite: <OVERWRITE>
replace_fs: <FS_TYPE>
Where:
<LABEL>: The file system label to be used. If set to None, no label is
@ -189,7 +190,10 @@ Where:
If you define the device as 'ephemeralX.Y' then Y will be interpetted
as a partition value. However, ephermalX.0 is the _same_ as ephemeralX.
<PART_VALUE>: The valid options are:
<PART_VALUE>:
Partition definitions are overwriten if you use the '<DEVICE>.Y' notation.
The valid options are:
"auto|any": tell cloud-init not to care whether there is a partition
or not. Auto will use the first partition that does not contain a
file system already. In the absence of a partition table, it will
@ -238,5 +242,10 @@ Where:
"false": If an existing file system exists, skip the creation.
<REPLACE_FS>: This is a special directive, used for Windows Azure that
instructs cloud-init to replace a file system of <FS_TYPE>. NOTE:
unless you define a label, this requires the use of the 'any' partition
directive.
Behavior Caveat: The default behavior is to _check_ if the file system exists.
If a file system matches the specification, then the operation is a no-op.