summaryrefslogtreecommitdiff
path: root/cloudinit/util.py
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2014-10-01 16:10:01 -0400
committerScott Moser <smoser@ubuntu.com>2014-10-01 16:10:01 -0400
commitdc626ee8750e79518c16769a778e143461d33dc4 (patch)
treefdb809873eb6b4cfc467ab3436cc345fc7865a87 /cloudinit/util.py
parenta429725ede3395a7e9c21b864a82e2c092657ae2 (diff)
parent5bb6a49f66c76d9accb912a5612c970a52f5b964 (diff)
downloadvyos-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.py50
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])