Implement default omit correctly

This commit is contained in:
Victor Lin 2014-07-28 18:44:40 -07:00 committed by James Cammarata
parent 0b4d7f1574
commit bce6642ab6
2 changed files with 11 additions and 9 deletions

View file

@ -870,10 +870,6 @@ class Runner(object):
if type(module_args) == dict: if type(module_args) == dict:
new_args = [] new_args = []
for (k, v) in module_args.iteritems(): 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)) new_args.append("%s='%s'" % (k, v))
module_args = ' '.join(new_args) module_args = ' '.join(new_args)
@ -897,6 +893,13 @@ class Runner(object):
except jinja2.exceptions.UndefinedError, e: except jinja2.exceptions.UndefinedError, e:
raise errors.AnsibleUndefinedVariable("One or more undefined variables: %s" % str(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) result = handler.run(conn, tmp, module_name, module_args, inject, complex_args)
# Code for do until feature # Code for do until feature

View file

@ -32,6 +32,7 @@ from ansible.utils import md5s, OMIT_PLACE_HOLDER
from distutils.version import LooseVersion, StrictVersion from distutils.version import LooseVersion, StrictVersion
from random import SystemRandom from random import SystemRandom
from jinja2.filters import environmentfilter from jinja2.filters import environmentfilter
from jinja2.runtime import Undefined
def to_nice_yaml(*a, **kw): def to_nice_yaml(*a, **kw):
@ -237,12 +238,10 @@ def rand(environment, end, start=None, step=None):
else: else:
raise errors.AnsibleFilterError('random can only be used on sequences and integers') raise errors.AnsibleFilterError('random can only be used on sequences and integers')
def default_omit(a): def default_omit(a):
try: if isinstance(a, Undefined):
a
except NameError:
return OMIT_PLACE_HOLDER return OMIT_PLACE_HOLDER
else:
return a return a