diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index ea8cbc37a48..fd80d7833ed 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -870,10 +870,6 @@ class Runner(object): if type(module_args) == dict: new_args = [] for (k, v) in module_args.iteritems(): - # see if the value is OMIT_PLACE_HOLDER, if it is, skip it - arg_value = template.template(self.basedir, v, inject, fail_on_undefined=self.error_on_undefined_vars) - if arg_value.strip() == OMIT_PLACE_HOLDER: - continue new_args.append("%s='%s'" % (k, v)) module_args = ' '.join(new_args) @@ -897,6 +893,13 @@ class Runner(object): except jinja2.exceptions.UndefinedError, e: raise errors.AnsibleUndefinedVariable("One or more undefined variables: %s" % str(e)) + # filter omitted arguments out + new_complex_args = {} + for key, value in complex_args.iteritems(): + if value == OMIT_PLACE_HOLDER: + continue + new_complex_args[key] = value + complex_args = new_complex_args result = handler.run(conn, tmp, module_name, module_args, inject, complex_args) # Code for do until feature diff --git a/lib/ansible/runner/filter_plugins/core.py b/lib/ansible/runner/filter_plugins/core.py index 0b08582fb23..1096cf378ee 100644 --- a/lib/ansible/runner/filter_plugins/core.py +++ b/lib/ansible/runner/filter_plugins/core.py @@ -32,6 +32,7 @@ from ansible.utils import md5s, OMIT_PLACE_HOLDER from distutils.version import LooseVersion, StrictVersion from random import SystemRandom from jinja2.filters import environmentfilter +from jinja2.runtime import Undefined def to_nice_yaml(*a, **kw): @@ -237,13 +238,11 @@ def rand(environment, end, start=None, step=None): else: raise errors.AnsibleFilterError('random can only be used on sequences and integers') + def default_omit(a): - try: - a - except NameError: + if isinstance(a, Undefined): return OMIT_PLACE_HOLDER - else: - return a + return a class FilterModule(object):