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