diff options
author | Scott Moser <smoser@ubuntu.com> | 2014-10-01 16:10:01 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2014-10-01 16:10:01 -0400 |
commit | dc626ee8750e79518c16769a778e143461d33dc4 (patch) | |
tree | fdb809873eb6b4cfc467ab3436cc345fc7865a87 /cloudinit/util.py | |
parent | a429725ede3395a7e9c21b864a82e2c092657ae2 (diff) | |
parent | 5bb6a49f66c76d9accb912a5612c970a52f5b964 (diff) | |
download | vyos-cloud-init-dc626ee8750e79518c16769a778e143461d33dc4.tar.gz vyos-cloud-init-dc626ee8750e79518c16769a778e143461d33dc4.zip |
cc_mounts: add ability to create swap file
User can now configure setting of a swap file.
Only supports un-encrypted swap for now.
swap:
filename: /swap.img
size: "auto" or size in bytes
maxsize: size in bytes
Also adds 2 util:
read_meminfo: return how much memory on system.
human2bytes: convert human numbers (8G) to bytes.
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r-- | cloudinit/util.py | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py index 76e91951..f236d0bf 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -1957,3 +1957,53 @@ def pathprefix2dict(base, required=None, optional=None, delim=os.path.sep): raise ValueError("Missing required files: %s", ','.join(missing)) return ret + + +def read_meminfo(meminfo="/proc/meminfo", raw=False): + # read a /proc/meminfo style file and return + # a dict with 'total', 'free', and 'available' + mpliers = {'kB': 2**10, 'mB': 2 ** 20, 'B': 1, 'gB': 2 ** 30} + kmap = {'MemTotal:': 'total', 'MemFree:': 'free', + 'MemAvailable:': 'available'} + ret = {} + for line in load_file(meminfo).splitlines(): + try: + key, value, unit = line.split() + except ValueError: + key, value = line.split() + unit = 'B' + if raw: + ret[key] = int(value) * mpliers[unit] + elif key in kmap: + ret[kmap[key]] = int(value) * mpliers[unit] + + return ret + + +def human2bytes(size): + """Convert human string or integer to size in bytes + 10M => 10485760 + .5G => 536870912 + """ + size_in = size + if size.endswith("B"): + size = size[:-1] + + mpliers = {'B': 1, 'K': 2 ** 10, 'M': 2 ** 20, 'G': 2 ** 30, 'T': 2 ** 40} + + num = size + mplier = 'B' + for m in mpliers: + if size.endswith(m): + mplier = m + num = size[0:-len(m)] + + try: + num = float(num) + except ValueError: + raise ValueError("'%s' is not valid input." % size_in) + + if num < 0: + raise ValueError("'%s': cannot be negative" % size_in) + + return int(num * mpliers[mplier]) |