diff options
-rw-r--r-- | cloudinit/config/cc_disk_setup.py | 50 | ||||
-rw-r--r-- | cloudinit/util.py | 57 |
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 |