From 5f855ae47132a99985d535777bc474da44f4c46b Mon Sep 17 00:00:00 2001 From: Edoardo Putti Date: Sun, 9 Oct 2016 17:15:59 +0200 Subject: [PATCH] add draft for writing files to container from ansible --- library/container_file_write.py | 109 ++++++++++++++++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 library/container_file_write.py diff --git a/library/container_file_write.py b/library/container_file_write.py new file mode 100644 index 0000000..b827f9c --- /dev/null +++ b/library/container_file_write.py @@ -0,0 +1,109 @@ +#!/usr/bin/env python +# -*- coding: utf-8 -*- + +from __future__ import print_function +from ansible.module_utils.basic import * + +DOCUMENTATION = ''' +--- +module: container_file_write +author: Edoardo Putti +short_description: Write to a file in a container +description: + - Write the content to a file +options: + name: + required: true + description: + - Name of the container + path: + required: true + description: + - path of the file to check + text: + required: true + description: + - content to write + append: + required: false + default: false + description: + - append instead of overwrite +''' +def write_file_in_container(path, text): + with open(path, 'w') as out: + out.write(text) + return 0 + +def append_file_in_container(path, text): + with open(path, 'a') as out: + out.write(text) + return 0 + +def main(): + module = AnsibleModule( + argument_spec = dict( + name = dict( + required = True, + type = 'str', + ), + path = dict( + required = True, + type = 'str', + ), + text = dict( + required = True, + type = 'str', + ), + append = dict( + default = False, + required = False, + type = 'bool', + ), + ), + ) + + try: + import lxc + + except ImportError: + module.fail_json( + changed = False, + failed = True, + msg = 'Error importing lxc, is python-lxc installed?', + ) + + container_name = module.params.get('name') + file_path = module.params.get('path') + text = module.params.get('text') + append = module.params.get('append') + + result = {} + result['name'] = container_name + result['path'] = file_path + + if container_name in lxc.list_containers(): + + container = lxc.Container(container_name) + + if append: + writing_function = append_file_in_container + else: + writing_function = write_file_in_container + + file_exists = container.attach_wait( + writing_function, + file_path, + text, + env_policy = lxc.LXC_ATTACH_CLEAR_ENV, + ) + + else: + result['changed'] = False + result['failed'] = True + result['msg'] = "Target container does not exists" + + module.exit_json(**result) + +if __name__ == '__main__': + main()