summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/config/cc_disk_setup.py50
-rw-r--r--cloudinit/util.py57
2 files changed, 24 insertions, 83 deletions
diff --git a/cloudinit/config/cc_disk_setup.py b/cloudinit/config/cc_disk_setup.py
index 5faffefc..e903dd4d 100644
--- a/cloudinit/config/cc_disk_setup.py
+++ b/cloudinit/config/cc_disk_setup.py
@@ -94,15 +94,6 @@ 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
@@ -117,38 +108,19 @@ def update_fs_setup_devices(disk_setup, tformer):
if origname is None:
continue
- transformed = None
- 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, partition = origname.split('.')
- tformed = tformer(base_name)
- LOG.info("base device for %s is %s" % (origname, tformed))
+ (dev, part) = util.expand_dotted_devname(origname)
- 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)
-
- if transformed is None or transformed == origname:
- continue
+ tformed = tformer(dev)
+ if tformed is not None:
+ dev = tformed
+ LOG.debug("%s is mapped to disk=%s part=%s",
+ origname, tformed, part)
+ definition['_origname'] = origname
+ definition['device'] = tformed
- LOG.info("Mapped %s to physical device %s" % (origname, transformed))
- definition['_origname'] = origname
- definition['device'] = transformed
+ if part and 'partition' in definition:
+ definition['_partition'] = definition['partition']
+ definition['partition'] = part
def value_splitter(values, start=None):
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 34d111e7..f9957c67 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -1829,62 +1829,33 @@ def log_time(logfunc, msg, func, args=None, kwargs=None, get_uptime=False):
return ret
-def map_partition(alias):
- """
- Return partition number for devices like ephemeral0.0 or ephemeral0.1
-
- Parameters:
- alaias: the alias, i.e. ephemeral0 or swap0
- device: the actual device to markup
-
- Rules:
- - anything after a . is a parittion
- - device.0 is the same as device
- """
-
- if len(alias.split('.')) == 1:
- return None
-
- suffix = alias.split('.')[-1]
- try:
- if int(suffix) == 0:
- return None
- return int(suffix)
- except ValueError:
- pass
-
- return None
+def expand_dotted_devname(dotted):
+ toks = dotted.rsplit(".", 1)
+ if len(toks) > 1:
+ return toks
+ else:
+ return (dotted, None)
-def map_device_alias(device, partition=None, alias=None):
+def devnode_for_dev_part(device, partition):
"""
Find the name of the partition. While this might seem rather
straight forward, its not since some devices are '<device><partition>'
while others are '<device>p<partition>'. For example, /dev/xvda3 on EC2
will present as /dev/xvda3p1 for the first partition since /dev/xvda3 is
a block device.
-
- The primary use is to map 'ephemeral0.1' in the datasource to a
- real device name
"""
+ if not os.path.exists(device):
+ return None
- if not device:
- raise Exception("Device cannot be undefined!")
-
- if not partition and not alias:
- raise Exception("partition or alias is required")
-
- if alias:
- partition = map_partition(alias)
-
- # if the partition doesn't map, return the device
if not partition:
return device
- short_name = device.split('/')[-1]
+ short_name = os.path.basename(device)
sys_path = "/sys/block/%s" % short_name
if not os.path.exists(sys_path):
+ LOG.debug("did not find entry for %s in /sys/block", short_name)
return None
sys_long_path = sys_path + "/" + short_name
@@ -1895,11 +1866,9 @@ def map_device_alias(device, partition=None, alias=None):
if not os.path.exists(cdisk):
continue
- dev_path = "/dev/%s" % cdisk.split('/')[-1]
+ dev_path = "/dev/%s" % os.path.basename(cdisk)
if os.path.exists(dev_path):
return dev_path
- else:
- LOG.warn("Specificed parition %s does not exist on %s" % (
- partition, device))
+ LOG.debug("Did not fine partition %s for device %s", partition, device)
return None