From 068dec2f6694da263147a5a7fbc5e6d30f7d1e0d Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Thu, 20 Apr 2017 13:20:38 -0400 Subject: Fix growpart for some cases when booted with root=PARTUUID. Growing the root partition would fail in either of two cases: a.) if the device /dev/root existed b.) the kernel command line had upper case letters in PARTUUID= the kernel will accept upper case partuuid, but udev creates links with lower case. In that scenario, we need to adjust to a /dev/disk/by- with lower case. The fix here addresses that, and also fixes uuid similarly for the lowercase issue. LP: #1684869 --- cloudinit/config/cc_growpart.py | 6 +++++- cloudinit/util.py | 5 +++-- 2 files changed, 8 insertions(+), 3 deletions(-) diff --git a/cloudinit/config/cc_growpart.py b/cloudinit/config/cc_growpart.py index 089693e8..d2bc6e6c 100644 --- a/cloudinit/config/cc_growpart.py +++ b/cloudinit/config/cc_growpart.py @@ -252,9 +252,13 @@ def devent2dev(devent): container = util.is_container() # Ensure the path is a block device. - if (dev == "/dev/root" and not os.path.exists(dev) and not container): + 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 diff --git a/cloudinit/util.py b/cloudinit/util.py index bfddca67..22af99dd 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -2404,9 +2404,10 @@ def rootdev_from_cmdline(cmdline): 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/disk/by-uuid/" + found[len("UUID="):].lower() if found.startswith("PARTUUID="): - disks_path = "/dev/disk/by-partuuid/" + found[len("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) -- cgit v1.2.3