From 4b29c2cf74319679deecda19682ab8930e6ff0fc Mon Sep 17 00:00:00 2001 From: Daniel Hokka Zakrisson Date: Fri, 28 Sep 2012 13:58:23 +0200 Subject: [PATCH] Revert pull request #1091 Automatic quoting of variables in only_if breaks existing playbooks where entire statements are put in a variable, and other cases. See issue #1120 for details. --- lib/ansible/runner/__init__.py | 2 +- lib/ansible/utils.py | 13 ++------ test/TestUtils.py | 59 ---------------------------------- 3 files changed, 4 insertions(+), 70 deletions(-) diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 6796fcf438c..50f0a3934d9 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -323,7 +323,7 @@ class Runner(object): new_args = new_args + "%s='%s' " % (k,v) module_args = new_args - conditional = utils.template(self.basedir, self.conditional, inject, do_repr=True) + conditional = utils.template(self.basedir, self.conditional, inject) if not utils.check_conditional(conditional): result = utils.jsonify(dict(skipped=True)) self.callbacks.on_skipped(host, inject.get('item',None)) diff --git a/lib/ansible/utils.py b/lib/ansible/utils.py index c3debbd1c4d..a102acc311f 100644 --- a/lib/ansible/utils.py +++ b/lib/ansible/utils.py @@ -289,7 +289,7 @@ def varLookup(varname, vars): except VarNotFoundException: return None -def varReplace(raw, vars, do_repr=False, depth=0): +def varReplace(raw, vars, depth=0): ''' Perform variable replacement of $variables in string raw using vars dictionary ''' # this code originally from yum @@ -315,13 +315,6 @@ def varReplace(raw, vars, do_repr=False, depth=0): replacement = raw[m['start']:m['end']] start, end = m['start'], m['end'] - if do_repr: - replacement = repr(replacement) - if (start > 0 and - ((raw[start - 1] == "'" and raw[end] == "'") or - (raw[start - 1] == '"' and raw[end] == '"'))): - start -= 1 - end += 1 done.append(raw[:start]) # Keep stuff leading up to token done.append(unicode(replacement)) # Append replacement value raw = raw[end:] # Continue with remainder of string @@ -363,7 +356,7 @@ def varReplaceFilesAndPipes(basedir, raw): return ''.join(done) -def template(basedir, text, vars, do_repr=False): +def template(basedir, text, vars): ''' run a text buffer through the templating engine until it no longer changes ''' prev_text = '' @@ -371,7 +364,7 @@ def template(basedir, text, vars, do_repr=False): text = text.decode('utf-8') except UnicodeEncodeError: pass # already unicode - text = varReplace(unicode(text), vars, do_repr) + text = varReplace(unicode(text), vars) text = varReplaceFilesAndPipes(basedir, text) return text diff --git a/test/TestUtils.py b/test/TestUtils.py index b7b20f678e9..8ce5dacb0c7 100644 --- a/test/TestUtils.py +++ b/test/TestUtils.py @@ -202,65 +202,6 @@ class TestUtils(unittest.TestCase): assert res == 'hello world' - def test_varReplace_repr_basic(self): - vars = { - 'color': '$favorite_color', - 'favorite_color': 'blue', - } - - template = '$color == "blue"' - res = ansible.utils.varReplace(template, vars, do_repr=True) - assert eval(res) - - def test_varReplace_repr_varinvar(self): - vars = { - 'foo': 'foo', - 'bar': 'bar', - 'foobar': '$foo$bar', - 'var': { - 'foo': 'foo', - 'foobar': '$foo$bar', - }, - } - - template = '$foobar == "foobar"' - res = ansible.utils.varReplace(template, vars, do_repr=True) - assert eval(res) - - def test_varReplace_repr_varindex(self): - vars = { - 'foo': 'foo', - 'var': { - 'foo': 'bar', - }, - } - - template = '${var.$foo} == "bar"' - res = ansible.utils.varReplace(template, vars, do_repr=True) - assert eval(res) - - def test_varReplace_repr_varpartindex(self): - vars = { - 'foo': 'foo', - 'var': { - 'foobar': 'foobar', - }, - } - - template = '${var.${foo}bar} == "foobar"' - res = ansible.utils.varReplace(template, vars, do_repr=True) - assert eval(res) - - def test_varReplace_repr_nonstr(self): - vars = { - 'foo': True, - 'bar': 1L, - } - - template = '${foo} == $bar' - res = ansible.utils.varReplace(template, vars, do_repr=True) - assert res == 'True == 1L' - def test_varReplace_consecutive_vars(self): vars = { 'foo': 'foo',