diff -rup cloud-init-0.7.9/cloudinit/config/cc_growpart.py cloud-init-0.7.9-new/cloudinit/config/cc_growpart.py --- cloud-init-0.7.9/cloudinit/config/cc_growpart.py 2016-12-23 08:37:45.000000000 -0800 +++ cloud-init-0.7.9-new/cloudinit/config/cc_growpart.py 2017-04-28 17:55:53.083355910 -0700 @@ -247,7 +247,20 @@ def devent2dev(devent): result = util.get_mount_info(devent) if not result: raise ValueError("Could not determine device of '%s' % dev_ent") - return result[0] + dev = result[0] + + container = util.is_container() + + # Ensure the path is a block device. + if (dev == "/dev/root" and not container): + dev = util.rootdev_from_cmdline(util.get_cmdline()) + if dev is None: + if os.path.exists(dev): + # if /dev/root exists, but we failed to convert + # that to a "real" /dev/ path device, then return it. + return dev + raise ValueError("Unable to find device '/dev/root'") + return dev def resize_devices(resizer, devices): diff -rup cloud-init-0.7.9/cloudinit/config/cc_resizefs.py cloud-init-0.7.9-new/cloudinit/config/cc_resizefs.py --- cloud-init-0.7.9/cloudinit/config/cc_resizefs.py 2016-12-23 08:37:45.000000000 -0800 +++ cloud-init-0.7.9-new/cloudinit/config/cc_resizefs.py 2017-04-28 17:55:33.095356361 -0700 @@ -71,25 +71,6 @@ RESIZE_FS_PREFIXES_CMDS = [ NOBLOCK = "noblock" -def rootdev_from_cmdline(cmdline): - found = None - for tok in cmdline.split(): - if tok.startswith("root="): - found = tok[5:] - break - if found is None: - return None - - if found.startswith("/dev/"): - return found - if found.startswith("LABEL="): - return "/dev/disk/by-label/" + found[len("LABEL="):] - if found.startswith("UUID="): - return "/dev/disk/by-uuid/" + found[len("UUID="):] - - return "/dev/" + found - - def handle(name, cfg, _cloud, log, args): if len(args) != 0: resize_root = args[0] @@ -121,7 +102,7 @@ def handle(name, cfg, _cloud, log, args) # Ensure the path is a block device. if (devpth == "/dev/root" and not os.path.exists(devpth) and not container): - devpth = rootdev_from_cmdline(util.get_cmdline()) + devpth = util.rootdev_from_cmdline(util.get_cmdline()) if devpth is None: log.warn("Unable to find device '/dev/root'") return diff -rup cloud-init-0.7.9/cloudinit/util.py cloud-init-0.7.9-new/cloudinit/util.py --- cloud-init-0.7.9/cloudinit/util.py 2016-12-23 08:37:45.000000000 -0800 +++ cloud-init-0.7.9-new/cloudinit/util.py 2017-04-28 17:55:57.435355811 -0700 @@ -2402,4 +2402,34 @@ def system_is_snappy(): return True return False +def rootdev_from_cmdline(cmdline): + found = None + for tok in cmdline.split(): + if tok.startswith("root="): + found = tok[5:] + break + if found is None: + return None + + if found.startswith("/dev/"): + return found + if found.startswith("LABEL="): + return "/dev/disk/by-label/" + found[len("LABEL="):] + if found.startswith("UUID="): + return "/dev/disk/by-uuid/" + found[len("UUID="):].lower() + if found.startswith("PARTUUID="): + disks_path = ("/dev/disk/by-partuuid/" + + found[len("PARTUUID="):].lower()) + if os.path.exists(disks_path): + return disks_path + results = find_devs_with(found) + if results: + return results[0] + # we know this doesn't exist, but for consistency return the path as + # it /would/ exist + return disks_path + + return "/dev/" + found + + # vi: ts=4 expandtab