diff options
Diffstat (limited to 'cloudinit/atomic_helper.py')
| -rw-r--r-- | cloudinit/atomic_helper.py | 31 |
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) |
