Fix merge action plugins verbose output

This change fixes the output 'module_args' information of the plugins
'merge_configs' and 'merge_yaml' when Ansible is executed in maximum
verbose mode. Now all the plugin options are displayed instead of
standard 'copy' plugin options only.

Also, this change contains fixes already applied in the Kayobe
project to improve and synchronize the code of the plugins between
projects.

Change-Id: Ie2d9a0501fe29bfd854eb31258f282b197855948
Signed-off-by: Maksim Malchuk <maksim.malchuk@gmail.com>
This commit is contained in:
Maksim Malchuk 2023-04-01 23:55:46 +03:00
parent da48d99eef
commit 8972241dc9
2 changed files with 16 additions and 9 deletions

View File

@ -171,12 +171,12 @@ class ActionModule(action.ActionBase):
del tmp # not used del tmp # not used
sources = self._task.args.get('sources', None) sources = self._task.args.get('sources', None)
whitespace = self._task.args.get('whitespace', True)
if not isinstance(sources, list): if not isinstance(sources, list):
sources = [sources] sources = [sources]
config = OverrideConfigParser( config = OverrideConfigParser(whitespace=whitespace)
whitespace=self._task.args.get('whitespace', True))
for source in sources: for source in sources:
self.read_config(source, config) self.read_config(source, config)
@ -213,7 +213,11 @@ class ActionModule(action.ActionBase):
loader=self._loader, loader=self._loader,
templar=self._templar, templar=self._templar,
shared_loader_obj=self._shared_loader_obj) shared_loader_obj=self._shared_loader_obj)
result.update(copy_action.run(task_vars=task_vars)) copy_result = copy_action.run(task_vars=task_vars)
copy_result['invocation']['module_args'].update({
'src': result_file, 'sources': sources,
'whitespace': whitespace})
result.update(copy_result)
finally: finally:
shutil.rmtree(local_tempdir) shutil.rmtree(local_tempdir)
return result return result

15
ansible/action_plugins/merge_yaml.py Executable file → Normal file
View File

@ -17,8 +17,7 @@ import os
import shutil import shutil
import tempfile import tempfile
from yaml import dump import yaml
from yaml import safe_load
from ansible import constants from ansible import constants
from ansible import errors as ansible_errors from ansible import errors as ansible_errors
@ -81,7 +80,7 @@ class ActionModule(action.ActionBase):
def read_config(self, source): def read_config(self, source):
result = None result = None
# Only use config if present # Only use config if present
if os.access(source, os.R_OK): if source and os.access(source, os.R_OK):
with open(source, 'r') as f: with open(source, 'r') as f:
template_data = f.read() template_data = f.read()
@ -94,7 +93,7 @@ class ActionModule(action.ActionBase):
self._templar.environment.loader.searchpath = searchpath self._templar.environment.loader.searchpath = searchpath
template_data = self._templar.template(template_data) template_data = self._templar.template(template_data)
result = safe_load(template_data) result = yaml.safe_load(template_data)
return result or {} return result or {}
def run(self, tmp=None, task_vars=None): def run(self, tmp=None, task_vars=None):
@ -128,7 +127,7 @@ class ActionModule(action.ActionBase):
try: try:
result_file = os.path.join(local_tempdir, 'source') result_file = os.path.join(local_tempdir, 'source')
with open(result_file, 'w') as f: with open(result_file, 'w') as f:
f.write(dump(output, default_flow_style=False)) f.write(yaml.dump(output, default_flow_style=False))
new_task = self._task.copy() new_task = self._task.copy()
new_task.args.pop('sources', None) new_task.args.pop('sources', None)
@ -147,7 +146,11 @@ class ActionModule(action.ActionBase):
loader=self._loader, loader=self._loader,
templar=self._templar, templar=self._templar,
shared_loader_obj=self._shared_loader_obj) shared_loader_obj=self._shared_loader_obj)
result.update(copy_action.run(task_vars=task_vars)) copy_result = copy_action.run(task_vars=task_vars)
copy_result['invocation']['module_args'].update({
'src': result_file, 'sources': sources,
'extend_lists': extend_lists})
result.update(copy_result)
finally: finally:
shutil.rmtree(local_tempdir) shutil.rmtree(local_tempdir)
return result return result