From a419a9539ddff10fa4d3fd7460b117a9f4dd2691 Mon Sep 17 00:00:00 2001 From: Kaarle Ritvanen Date: Thu, 19 Sep 2019 10:58:07 +0300 Subject: [PATCH] new module: lbu Alpine Linux Local Backup Utility --- lib/ansible/modules/system/lbu.py | 131 ++++++++++++++++++++++++++++++ 1 file changed, 131 insertions(+) create mode 100644 lib/ansible/modules/system/lbu.py diff --git a/lib/ansible/modules/system/lbu.py b/lib/ansible/modules/system/lbu.py new file mode 100644 index 0000000000..9952ec29f1 --- /dev/null +++ b/lib/ansible/modules/system/lbu.py @@ -0,0 +1,131 @@ +#!/usr/bin/python + +# Copyright: (c) 2019, Kaarle Ritvanen +# GNU General Public License v3.0+ (see COPYING or https://www.gnu.org/licenses/gpl-3.0.txt) + +from __future__ import absolute_import, division, print_function +__metaclass__ = type + +ANSIBLE_METADATA = { + 'metadata_version': '1.1', + 'status': ['preview'], + 'supported_by': 'community' +} + +DOCUMENTATION = ''' +--- +module: lbu + +short_description: Local Backup Utility for Alpine Linux + +version_added: "2.10" + +description: +- Manage Local Backup Utility of Alpine Linux in run-from-RAM mode + +options: + commit: + description: + - Control whether to commit changed files. + type: bool + exclude: + description: + - List of paths to exclude. + type: list + include: + description: + - List of paths to include. + type: list + +author: +- Kaarle Ritvanen (@kunkku) +''' + +EXAMPLES = ''' +# Commit changed files (if any) +- name: Commit + lbu: + commit: true + +# Exclude path and commit +- name: Exclude directory + lbu: + commit: true + exclude: + - /etc/opt + +# Include paths without committing +- name: Include file and directory + lbu: + include: + - /root/.ssh/authorized_keys + - /var/lib/misc +''' + +RETURN = ''' +msg: + description: Error message + type: str + returned: on failure +''' + +from ansible.module_utils.basic import AnsibleModule + +import os.path + + +def run_module(): + module = AnsibleModule( + argument_spec={ + 'commit': {'type': 'bool'}, + 'exclude': {'type': 'list', 'elements': 'str'}, + 'include': {'type': 'list', 'elements': 'str'} + }, + supports_check_mode=True + ) + + changed = False + + def run_lbu(*args): + code, stdout, stderr = module.run_command( + [module.get_bin_path('lbu', required=True)] + list(args) + ) + if code: + module.fail_json(changed=changed, msg=stderr) + return stdout + + update = False + commit = False + + for param in ('include', 'exclude'): + if module.params[param]: + paths = run_lbu(param, '-l').split('\n') + for path in module.params[param]: + if os.path.normpath('/' + path)[1:] not in paths: + update = True + + if module.params['commit']: + commit = update or run_lbu('status') > '' + + if module.check_mode: + module.exit_json(changed=update or commit) + + if update: + for param in ('include', 'exclude'): + if module.params[param]: + run_lbu(param, *module.params[param]) + changed = True + + if commit: + run_lbu('commit') + changed = True + + module.exit_json(changed=changed) + + +def main(): + run_module() + + +if __name__ == '__main__': + main() -- 2.20.1