From badb41a49c4b304bc525ba3fb997ef9288e3a6e9 Mon Sep 17 00:00:00 2001 From: Doug Szumski Date: Tue, 30 Oct 2018 15:38:14 +0000 Subject: Support merging nested yaml config Closes-Bug: 1786741 Change-Id: Ic217f3f8194cdcb5e28045e771a0160c1f12280e --- ansible/action_plugins/merge_yaml.py | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) (limited to 'ansible/action_plugins') diff --git a/ansible/action_plugins/merge_yaml.py b/ansible/action_plugins/merge_yaml.py index 371905d0d..0bff14dc2 100755 --- a/ansible/action_plugins/merge_yaml.py +++ b/ansible/action_plugins/merge_yaml.py @@ -32,6 +32,7 @@ except ImportError: from ansible import constants from ansible.plugins import action +import six class ActionModule(action.ActionBase): @@ -76,7 +77,7 @@ class ActionModule(action.ActionBase): if not isinstance(sources, list): sources = [sources] for source in sources: - output.update(self.read_config(source)) + Utils.update_nested_conf(output, self.read_config(source)) # restore original vars self._templar.set_available_variables(old_vars) @@ -109,3 +110,14 @@ class ActionModule(action.ActionBase): finally: shutil.rmtree(local_tempdir) return result + + +class Utils(object): + @staticmethod + def update_nested_conf(conf, update): + for k, v in six.iteritems(update): + if isinstance(v, dict): + conf[k] = Utils.update_nested_conf(conf.get(k, {}), v) + else: + conf[k] = v + return conf -- cgit v1.2.3