mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Revert "remove complex_args_hack as it was only needed for Baby JSON"
This reverts commit a6029264b8
.
Fixes #9400
This commit is contained in:
parent
be972225a5
commit
b4f9631e4c
2 changed files with 22 additions and 0 deletions
|
@ -253,6 +253,26 @@ class Runner(object):
|
|||
|
||||
# ensure we are using unique tmp paths
|
||||
random.seed()
|
||||
# *****************************************************
|
||||
|
||||
def _complex_args_hack(self, complex_args, module_args):
|
||||
"""
|
||||
ansible-playbook both allows specifying key=value string arguments and complex arguments
|
||||
however not all modules use our python common module system and cannot
|
||||
access these. An example might be a Bash module. This hack allows users to still pass "args"
|
||||
as a hash of simple scalars to those arguments and is short term. We could technically
|
||||
just feed JSON to the module, but that makes it hard on Bash consumers. The way this is implemented
|
||||
it does mean values in 'args' have LOWER priority than those on the key=value line, allowing
|
||||
args to provide yet another way to have pluggable defaults.
|
||||
"""
|
||||
if complex_args is None:
|
||||
return module_args
|
||||
if not isinstance(complex_args, dict):
|
||||
raise errors.AnsibleError("complex arguments are not a dictionary: %s" % complex_args)
|
||||
for (k,v) in complex_args.iteritems():
|
||||
if isinstance(v, basestring):
|
||||
module_args = "%s=%s %s" % (k, pipes.quote(v), module_args)
|
||||
return module_args
|
||||
|
||||
# *****************************************************
|
||||
|
||||
|
|
|
@ -36,6 +36,8 @@ class ActionModule(object):
|
|||
def run(self, conn, tmp, module_name, module_args, inject, complex_args=None, **kwargs):
|
||||
''' transfer & execute a module that is not 'copy' or 'template' '''
|
||||
|
||||
module_args = self.runner._complex_args_hack(complex_args, module_args)
|
||||
|
||||
if self.runner.noop_on_check(inject):
|
||||
if module_name in [ 'shell', 'command' ]:
|
||||
return ReturnData(conn=conn, comm_ok=True, result=dict(skipped=True, msg='check mode not supported for %s' % module_name))
|
||||
|
|
Loading…
Reference in a new issue