Work in progress on merging changed_when.

This commit is contained in:
Michael DeHaan 2013-07-21 10:34:47 -04:00
parent 88720516a1
commit 7f462a346a
3 changed files with 8 additions and 6 deletions

View file

@ -528,7 +528,8 @@ class Runner(object):
self.conditional = [ self.conditional ] self.conditional = [ self.conditional ]
for cond in self.conditional: for cond in self.conditional:
if not utils.check_conditional(cond, self.basedir, inject):
if not utils.check_conditional(cond, self.basedir, inject, fail_on_undefined=self.error_on_undefined_vars):
result = utils.jsonify(dict(changed=False, skipped=True)) result = utils.jsonify(dict(changed=False, skipped=True))
self.callbacks.on_skipped(host, inject.get('item',None)) self.callbacks.on_skipped(host, inject.get('item',None))
return ReturnData(host=host, result=result) return ReturnData(host=host, result=result)
@ -636,8 +637,7 @@ class Runner(object):
if 'stdout' in data: if 'stdout' in data:
data['stdout_lines'] = data['stdout'].splitlines() data['stdout_lines'] = data['stdout'].splitlines()
inject[register] = data inject[register] = data
changed = template.template(self.basedir, changed_when, inject, fail_on_undefined=self.error_on_undefined_vars) data['changed'] = utils.check_conditional(changed_when, self.basedir, inject, fail_on_undefined=self.error_on_undefined_vars)
data['changed'] = utils.check_conditional(changed)
if is_chained: if is_chained:
# no callbacks # no callbacks

View file

@ -58,7 +58,7 @@ class ActionModule(object):
data = {} data = {}
data.update(inject) data.update(inject)
data.update(inject['hostvars'][host]) data.update(inject['hostvars'][host])
if not check_conditional(self.runner.basedir, self.runner.conditional, data): if not check_conditional(self.runner.basedir, self.runner.conditional, data, fail_on_undefined=self.runner.error_on_undefined_vars):
continue continue
group_name = template.template(self.runner.basedir, args['key'], data) group_name = template.template(self.runner.basedir, args['key'], data)
group_name = group_name.replace(' ','-') group_name = group_name.replace(' ','-')

View file

@ -155,16 +155,18 @@ def is_changed(result):
return (result.get('changed', False) in [ True, 'True', 'true']) return (result.get('changed', False) in [ True, 'True', 'true'])
def check_conditional(conditional, basedir, inject): def check_conditional(conditional, basedir, inject, fail_on_undefined=False):
if conditional.startswith("jinja2_compare"): if conditional.startswith("jinja2_compare"):
conditional = conditional.replace("jinja2_compare ","") conditional = conditional.replace("jinja2_compare ","")
# allow variable names # allow variable names
if conditional in inject: if conditional in inject:
conditional = inject[conditional] conditional = inject[conditional]
conditional = template.template(basedir, conditional, inject) print "INJECTIFYING: %s" % inject
conditional = template.template(basedir, conditional, inject, fail_on_undefined=fail_on_undefined)
# a Jinja2 evaluation that results in something Python can eval! # a Jinja2 evaluation that results in something Python can eval!
presented = "{% if " + conditional + " %} True {% else %} False {% endif %}" presented = "{% if " + conditional + " %} True {% else %} False {% endif %}"
return presented
if not isinstance(conditional, basestring): if not isinstance(conditional, basestring):
return conditional return conditional