diff options
author | Steve Langasek <steve.langasek@canonical.com> | 2017-03-28 21:47:50 -0700 |
---|---|---|
committer | Scott Moser <smoser@brickies.net> | 2017-03-29 16:45:32 -0400 |
commit | 0e2030ca7fe783ead06100c748f4714895461799 (patch) | |
tree | fc90d18e34fbc990c81b2226db7e47e9c27a366c /cloudinit/util.py | |
parent | e80dbb80987ba44be2899e34fbbbf7d48389b6b5 (diff) | |
download | vyos-cloud-init-0e2030ca7fe783ead06100c748f4714895461799.tar.gz vyos-cloud-init-0e2030ca7fe783ead06100c748f4714895461799.zip |
support resizing partition and rootfs on system booted without initramfs.
When booted without an initramfs, the root device will be /dev/root, not a
named device. There is partial support for this when resizing filesystems,
but not for growing partitions, without which it doesn't do much good. Move
the /dev/root resolution code to util.py and use it from cc_growpart.py.
Also, booting without an initramfs only works with a root= argument that's
either a kernel device name (which is unstable) or a partition UUID. Handle
the case of root=PARTUUID=value, not just LABEL and UUID.
LP: #1677376
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r-- | cloudinit/util.py | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py index 33019579..17abdf81 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -2382,4 +2382,33 @@ def indent(text, prefix): return ''.join(lines) +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="):] + if found.startswith("PARTUUID="): + disks_path = "/dev/disk/by-partuuid/" + found[len("PARTUUID="):] + 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 |