Fix for saving conditionals in variable expressions.
This commit is contained in:
parent
ca512c7d2f
commit
62b39d3de5
4 changed files with 14 additions and 7 deletions
|
@ -89,6 +89,7 @@ Misc changes:
|
||||||
* added Jinja2 filters: skipped, whether a result was skipped
|
* added Jinja2 filters: skipped, whether a result was skipped
|
||||||
* added Jinja2 filters: quote, quotes a string if it needs to be quoted
|
* added Jinja2 filters: quote, quotes a string if it needs to be quoted
|
||||||
* allow force=yes to affect apt upgrades
|
* allow force=yes to affect apt upgrades
|
||||||
|
* fix for saving conditionals in variable names
|
||||||
|
|
||||||
1.2.2 "Hear About It Later" (reprise) -- July 4, 2013
|
1.2.2 "Hear About It Later" (reprise) -- July 4, 2013
|
||||||
|
|
||||||
|
|
|
@ -528,8 +528,7 @@ class Runner(object):
|
||||||
self.conditional = [ self.conditional ]
|
self.conditional = [ self.conditional ]
|
||||||
|
|
||||||
for cond in self.conditional:
|
for cond in self.conditional:
|
||||||
cond = template.template(self.basedir, cond, inject, expand_lists=False)
|
if not utils.check_conditional(cond, self.basedir, inject):
|
||||||
if not utils.check_conditional(cond):
|
|
||||||
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)
|
||||||
|
|
|
@ -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(template.template(self.runner.basedir, self.runner.conditional, data)):
|
if not check_conditional(self.runner.basedir, self.runner.conditional, data):
|
||||||
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(' ','-')
|
||||||
|
|
|
@ -155,7 +155,16 @@ 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):
|
def check_conditional(conditional, basedir, inject):
|
||||||
|
|
||||||
|
if conditional.startswith("jinja2_compare"):
|
||||||
|
conditional = conditional.replace("jinja2_compare ","")
|
||||||
|
# allow variable names
|
||||||
|
if conditional in inject:
|
||||||
|
conditional = inject[conditional]
|
||||||
|
conditional = template.template(basedir, conditional, inject)
|
||||||
|
# a Jinja2 evaluation that results in something Python can eval!
|
||||||
|
presented = "{% if " + conditional + " %} True {% else %} False {% endif %}"
|
||||||
|
|
||||||
if not isinstance(conditional, basestring):
|
if not isinstance(conditional, basestring):
|
||||||
return conditional
|
return conditional
|
||||||
|
@ -667,9 +676,7 @@ def compile_when_to_only_if(expression):
|
||||||
|
|
||||||
# the stock 'when' without qualification (new in 1.2), assumes Jinja2 terms
|
# the stock 'when' without qualification (new in 1.2), assumes Jinja2 terms
|
||||||
elif tokens[0] == 'jinja2_compare':
|
elif tokens[0] == 'jinja2_compare':
|
||||||
# a Jinja2 evaluation that results in something Python can eval!
|
return " ".join(tokens)
|
||||||
presented = "{% if " + " ".join(tokens[1:]).strip() + " %} True {% else %} False {% endif %}"
|
|
||||||
return presented
|
|
||||||
else:
|
else:
|
||||||
raise errors.AnsibleError("invalid usage of when_ operator: %s" % expression)
|
raise errors.AnsibleError("invalid usage of when_ operator: %s" % expression)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue