diff options
author | James Cammarata <jimi@sngx.net> | 2013-09-09 14:50:21 -0500 |
---|---|---|
committer | James Cammarata <jimi@sngx.net> | 2013-09-09 14:50:21 -0500 |
commit | 294451d00243b7caf3c0aaae8476ec2a96149bdb (patch) | |
tree | e9cb99279b38d45afe7cb331faa3727fb99763f6 | |
parent | af139cd56a5aed26edeb9ac2862363b5bde520c8 (diff) | |
download | ansible-294451d00243b7caf3c0aaae8476ec2a96149bdb.tar.gz |
Correctly handle variable issues when evaluating jinja2 when statements
Fixes #4025
-rw-r--r-- | lib/ansible/utils/__init__.py | 15 | ||||
-rw-r--r-- | lib/ansible/utils/template.py | 2 |
2 files changed, 14 insertions, 3 deletions
diff --git a/lib/ansible/utils/__init__.py b/lib/ansible/utils/__init__.py index de6ab6b533..b4b8b24ed3 100644 --- a/lib/ansible/utils/__init__.py +++ b/lib/ansible/utils/__init__.py @@ -170,8 +170,19 @@ def check_conditional(conditional, basedir, inject, fail_on_undefined=False, jin # a Jinja2 evaluation that results in something Python can eval! presented = "{%% if %s %%} True {%% else %%} False {%% endif %%}" % conditional conditional = template.template(basedir, presented, inject) - val = conditional.lstrip().rstrip() - if val == "True": + val = conditional.strip() + if val == presented: + # the templating failed, meaning most likely a + # variable was undefined. If we happened to be + # looking for an undefined variable, return True, + # otherwise fail + if conditional.find("is undefined") != -1: + return True + elif conditional.find("is defined") != -1: + return False + else: + raise errors.AnsibleError("error while evaluating conditional: %s" % conditional) + elif val == "True": return True elif val == "False": return False diff --git a/lib/ansible/utils/template.py b/lib/ansible/utils/template.py index 1284bc00c4..b18a9c968e 100644 --- a/lib/ansible/utils/template.py +++ b/lib/ansible/utils/template.py @@ -430,7 +430,7 @@ def template_from_file(basedir, path, vars): raise errors.AnsibleError("unable to read %s" % realpath) -# Get jinja env overrides from template + # Get jinja env overrides from template if data.startswith(JINJA2_OVERRIDE): eol = data.find('\n') line = data[len(JINJA2_OVERRIDE):eol] |