diff options
author | Daniel Watkins <daniel.watkins@canonical.com> | 2015-01-13 11:34:49 +0000 |
---|---|---|
committer | Daniel Watkins <daniel.watkins@canonical.com> | 2015-01-13 11:34:49 +0000 |
commit | 54d1968f026cb0ee79913b599c2c90d9f07ef35d (patch) | |
tree | 4ecddd0e5ea41db07e4cc5d9194117f22f4d711a /cloudinit/config/cc_disk_setup.py | |
parent | ed6219dbb5dc2fada4b9b86e7c9b94d2d35dcb7f (diff) | |
download | vyos-cloud-init-54d1968f026cb0ee79913b599c2c90d9f07ef35d.tar.gz vyos-cloud-init-54d1968f026cb0ee79913b599c2c90d9f07ef35d.zip |
Find disk size differently for GPT.
MBR uses block sizes, which is what the current (apparently portable) code was
producing. GPT uses sectors to determine partition size.
Diffstat (limited to 'cloudinit/config/cc_disk_setup.py')
-rw-r--r-- | cloudinit/config/cc_disk_setup.py | 42 |
1 files changed, 25 insertions, 17 deletions
diff --git a/cloudinit/config/cc_disk_setup.py b/cloudinit/config/cc_disk_setup.py index dc607533..d8553167 100644 --- a/cloudinit/config/cc_disk_setup.py +++ b/cloudinit/config/cc_disk_setup.py @@ -316,22 +316,6 @@ def is_disk_used(device): return False -def get_hdd_size(device): - """ - Returns the hard disk size. - This works with any disk type, including GPT. - """ - - size_cmd = [SFDISK_CMD, '--show-size', device] - size = None - try: - size, _err = util.subp(size_cmd) - except Exception as e: - raise Exception("Failed to get %s size\n%s" % (device, e)) - - return int(size.strip()) - - def get_dyn_func(*args): """ Call the appropriate function. @@ -359,6 +343,30 @@ def get_dyn_func(*args): raise Exception("No such function %s to call!" % func_name) +def get_mbr_hdd_size(device): + size_cmd = [SFDISK_CMD, '--show-size', device] + size = None + try: + size, _err = util.subp(size_cmd) + except Exception as e: + raise Exception("Failed to get %s size\n%s" % (device, e)) + + return int(size.strip()) + + +def get_gpt_hdd_size(device): + out, _ = util.subp([SGDISK_CMD, '-p', device]) + return out.splitlines()[0].split()[2] + + +def get_hdd_size(table_type, device): + """ + Returns the hard disk size. + This works with any disk type, including GPT. + """ + return get_dyn_func("get_%s_hdd_size", table_type, device) + + def check_partition_mbr_layout(device, layout): """ Returns true if the partition layout matches the one on the disk @@ -676,7 +684,7 @@ def mkpart(device, definition): return LOG.debug("Checking for device size") - device_size = get_hdd_size(device) + device_size = get_hdd_size(table_type, device) LOG.debug("Calculating partition layout") part_definition = get_partition_layout(table_type, device_size, layout) |