summaryrefslogtreecommitdiff
path: root/cloudinit/atomic_helper.py
diff options
context:
space:
mode:
authorScott Moser <smoser@brickies.net>2016-09-09 21:46:49 -0400
committerScott Moser <smoser@brickies.net>2016-09-09 21:46:49 -0400
commitea732e69516983b1d9838b0d80540a832594748a (patch)
treef23cbf03e360f913e98e15d232bcf871770806e8 /cloudinit/atomic_helper.py
parenteb5860ec6ed76a90fb837001ab2ed54e1dcf78de (diff)
parent34a26f7f59f2963691e36ca0476bec9fc9ccef63 (diff)
downloadvyos-cloud-init-ea732e69516983b1d9838b0d80540a832594748a.tar.gz
vyos-cloud-init-ea732e69516983b1d9838b0d80540a832594748a.zip
Merge branch 'master' into ubuntu/xenial
Diffstat (limited to 'cloudinit/atomic_helper.py')
-rw-r--r--cloudinit/atomic_helper.py31
1 files changed, 31 insertions, 0 deletions
diff --git a/cloudinit/atomic_helper.py b/cloudinit/atomic_helper.py
new file mode 100644
index 00000000..a3cfd942
--- /dev/null
+++ b/cloudinit/atomic_helper.py
@@ -0,0 +1,31 @@
+#!/usr/bin/python
+# vi: ts=4 expandtab
+
+import json
+import os
+import tempfile
+
+_DEF_PERMS = 0o644
+
+
+def write_file(filename, content, mode=_DEF_PERMS, omode="wb"):
+ # open filename in mode 'omode', write content, set permissions to 'mode'
+ tf = None
+ try:
+ tf = tempfile.NamedTemporaryFile(dir=os.path.dirname(filename),
+ delete=False, mode=omode)
+ tf.write(content)
+ tf.close()
+ os.chmod(tf.name, mode)
+ os.rename(tf.name, filename)
+ except Exception as e:
+ if tf is not None:
+ os.unlink(tf.name)
+ raise e
+
+
+def write_json(filename, data, mode=_DEF_PERMS):
+ # dump json representation of data to file filename.
+ return write_file(
+ filename, json.dumps(data, indent=1, sort_keys=True) + "\n",
+ omode="w", mode=mode)