summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/config/cc_disk_setup.py21
-rw-r--r--cloudinit/config/cc_mounts.py13
-rw-r--r--cloudinit/sources/DataSourceAzure.py4
-rw-r--r--cloudinit/sources/DataSourceSmartOS.py4
-rw-r--r--cloudinit/util.py11
5 files changed, 35 insertions, 18 deletions
diff --git a/cloudinit/config/cc_disk_setup.py b/cloudinit/config/cc_disk_setup.py
index e744cd57..554dfdd3 100644
--- a/cloudinit/config/cc_disk_setup.py
+++ b/cloudinit/config/cc_disk_setup.py
@@ -104,13 +104,30 @@ def update_fs_setup_devices(disk_setup, tformer):
continue
origname = definition.get('device')
+
if origname is None:
continue
- transformed = tformer(origname)
+ transformed = None
+ if len(origname.split('.')) > 1:
+ # 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]
+ 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))
+
+ else:
+ transformed = tformer(origname)
+
if transformed is None or transformed == origname:
continue
+ LOG.info("Mapped %s to physical device %s" % (origname, transformed))
definition['_origname'] = origname
definition['device'] = transformed
@@ -497,7 +514,7 @@ def purge_disk(device):
try:
LOG.info("Purging filesystem on /dev/%s" % d['name'])
util.subp(wipefs_cmd)
- except Exception as e:
+ except Exception:
raise Exception("Failed FS purge of /dev/%s" % d['name'])
purge_disk_ptable(device)
diff --git a/cloudinit/config/cc_mounts.py b/cloudinit/config/cc_mounts.py
index f4c2e3d8..6b47d326 100644
--- a/cloudinit/config/cc_mounts.py
+++ b/cloudinit/config/cc_mounts.py
@@ -217,14 +217,15 @@ def disk_or_part(device):
short_name = device.split('/')[-1]
sys_path = "/sys/block/%s" % short_name
- if not os.path.exists(sys_path):
- LOG.warn("Device %s does not exist in sysfs" % device)
- return None
+ # if the sys path does not exist but the device exists,
+ # then the device is a partition, no sense looking any further
+ if not os.path.exists(sys_path) and os.path.exists(device):
+ return device
sys_long_path = sys_path + "/" + short_name + "%s"
- valid_mappings = [ sys_long_path % "1",
- sys_long_path % "p1",
- sys_path ]
+ valid_mappings = [sys_long_path % "1",
+ sys_long_path % "p1",
+ sys_path]
for cdisk in valid_mappings:
if not os.path.exists(cdisk):
diff --git a/cloudinit/sources/DataSourceAzure.py b/cloudinit/sources/DataSourceAzure.py
index b7de0187..8321dee0 100644
--- a/cloudinit/sources/DataSourceAzure.py
+++ b/cloudinit/sources/DataSourceAzure.py
@@ -177,9 +177,7 @@ class DataSourceAzureNet(sources.DataSource):
return True
def device_name_to_device(self, name):
- device = name.split('.')[0]
- return util.map_device_alias(self.ds_cfg['disk_aliases'].get(device),
- alias=name)
+ return self.ds_cfg['disk_aliases'].get(name)
def get_config_obj(self):
return self.cfg
diff --git a/cloudinit/sources/DataSourceSmartOS.py b/cloudinit/sources/DataSourceSmartOS.py
index 9b3fdf1a..666129ec 100644
--- a/cloudinit/sources/DataSourceSmartOS.py
+++ b/cloudinit/sources/DataSourceSmartOS.py
@@ -156,9 +156,7 @@ class DataSourceSmartOS(sources.DataSource):
return True
def device_name_to_device(self, name):
- device = name.split('.')[0]
- return util.map_device_alias(self.ds_cfg['disk_aliases'].get(device),
- alias=name)
+ return self.ds_cfg['disk_aliases'].get(name)
def get_config_obj(self):
return self.cfg
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 14519586..053e1efc 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -1869,7 +1869,7 @@ def map_device_alias(device, partition=None, alias=None):
"""
if not device:
- return None
+ raise Exception("Device cannot be undefined!")
if not partition and not alias:
raise Exception("partition or alias is required")
@@ -1877,9 +1877,9 @@ def map_device_alias(device, partition=None, alias=None):
if alias:
partition = map_partition(alias)
- # if the partition doesn't map, return the device
- if not partition:
- return device
+ # if the partition doesn't map, return the device
+ if not partition:
+ return device
short_name = device.split('/')[-1]
sys_path = "/sys/block/%s" % short_name
@@ -1898,6 +1898,9 @@ def map_device_alias(device, partition=None, alias=None):
dev_path = "/dev/%s" % cdisk.split('/')[-1]
if os.path.exists(dev_path):
return dev_path
+ else:
+ LOG.warn("Specificed parition %s does not exist on %s" % (
+ partition, device))
return None