ansible: support environment: too.

wip-fakessh-exit-status
David Wilson 6 years ago
parent f74a56daf3
commit 7080751f13

@ -96,7 +96,7 @@ def monkey_fail_json(self, **kwargs):
raise ModuleError(kwargs.get('msg'), kwargs)
def run_module(module, raw_params=None, args=None):
def run_module(module, raw_params=None, args=None, env=None):
"""
Set up the process environment in preparation for running an Ansible
module. This monkey-patches the Ansible libraries in various places to
@ -114,6 +114,10 @@ def run_module(module, raw_params=None, args=None):
'ANSIBLE_MODULE_ARGS': args
})
if env:
original_env = os.environ.copy()
os.environ.update((k, str(v)) for k, v in env.iteritems())
try:
mod = __import__(module, {}, {}, [''])
# Ansible modules begin execution on import. Thus the above __import__
@ -123,16 +127,22 @@ def run_module(module, raw_params=None, args=None):
# explicitly.
mod.main()
except (Exit, ModuleError), e:
return json.dumps(e.dct)
result = json.dumps(e.dct)
if env:
os.environ.clear()
os.environ.update(original_env)
return result
def _async_main(job_id, module, raw_params, args):
def _async_main(job_id, module, raw_params, args, env):
"""
Implementation for the thread that implements asynchronous module
execution.
"""
try:
rc = run_module(module, raw_params, args)
rc = run_module(module, raw_params, args, env)
except Exception, e:
rc = mitogen.core.CallError(e)

@ -165,11 +165,15 @@ class ActionModuleMixin(ansible.plugins.action.ActionBase):
else:
helper = ansible_mitogen.helpers.run_module
env = {}
self._compute_environment_string(env)
# replaces 110 lines
js = self.call(
helper,
get_command_module_name(module_name),
args=cast(module_args),
env=cast(env),
)
data = self._parse_returned_data({

@ -0,0 +1,17 @@
---
# Ensure environment: is preserved during call.
- hosts: all
gather_facts: false
tasks:
- shell: echo $SOME_ENV
environment:
SOME_ENV: 123
register: result
- debug: msg={{result}}
- assert:
that: "result.stdout == '123'"
Loading…
Cancel
Save