From 24f6de3abec95545584a6f8944266b85f0233d2c Mon Sep 17 00:00:00 2001 From: Johnathan Kupferer <jkupfere@redhat.com> Date: Sun, 01 Mar 2020 16:35:45 +0100 Subject: [PATCH] Add agnosticd_user_info per-user data (#1212) --- ansible/action_plugins/agnosticd_user_info.py | 37 +++++++++++++++++++++++++++++++++---- 1 files changed, 33 insertions(+), 4 deletions(-) diff --git a/ansible/action_plugins/agnosticd_user_info.py b/ansible/action_plugins/agnosticd_user_info.py index 04c1fbf..48afe8a 100644 --- a/ansible/action_plugins/agnosticd_user_info.py +++ b/ansible/action_plugins/agnosticd_user_info.py @@ -20,7 +20,15 @@ __metaclass__ = type import json +import yaml import os + +# Force yaml string representation for safe dump +yaml.SafeDumper.yaml_representers[None] = lambda self, data: \ + yaml.representer.SafeRepresenter.represent_str( + self, + str(data), + ) from ansible.errors import AnsibleError, AnsibleUndefinedVariable from ansible.module_utils.six import string_types @@ -31,7 +39,7 @@ '''Print statements during execution and save user info to file''' TRANSFERS_FILES = False - _VALID_ARGS = frozenset(('msg','data')) + _VALID_ARGS = frozenset(('msg','data','user')) def run(self, tmp=None, task_vars=None): self._supports_check_mode = True @@ -44,6 +52,7 @@ msg = self._task.args.get('msg') data = self._task.args.get('data') + user = self._task.args.get('user') if msg: result['msg'] = 'user.info: ' + msg @@ -70,9 +79,29 @@ fh.write('- ' + json.dumps(msg) + "\n") fh.close() if data: - fh = open(os.path.join(output_dir, 'user-data.yaml'), 'a') - for k, v in data.items(): - fh.write("{0}: {1}\n".format(k, json.dumps(v))) + user_data = None + try: + fh = open(os.path.join(output_dir, 'user-data.yaml'), 'r') + user_data = yaml.safe_load(fh) + fh.close() + except FileNotFoundError: + pass + + if user_data == None: + user_data = {} + + if user: + if 'users' not in user_data: + user_data['users'] = {} + if user in user_data['users']: + user_data['users'][user].update(data) + else: + user_data['users'][user] = data + else: + user_data.update(data) + + fh = open(os.path.join(output_dir, 'user-data.yaml'), 'w') + yaml.safe_dump(user_data, stream=fh, explicit_start=True) fh.close() result['failed'] = False except Exception as e: -- Gitblit v1.9.3