diff --git a/lib/ansible/utils.py b/lib/ansible/utils.py index 0b2dc345c0..0d5edb44e3 100644 --- a/lib/ansible/utils.py +++ b/lib/ansible/utils.py @@ -269,8 +269,9 @@ def varReplace(raw, vars, do_repr=False, depth=0): # original) try: - replacement = unicode(_varLookup(m.group(2), vars, depth)) - replacement = varReplace(replacement, vars, depth=depth + 1) + replacement = _varLookup(m.group(2), vars, depth) + if isinstance(replacement, (str, unicode)): + replacement = varReplace(replacement, vars, depth=depth + 1) except VarNotFoundException: replacement = m.group() @@ -282,9 +283,9 @@ def varReplace(raw, vars, do_repr=False, depth=0): (raw[start - 1] == '"' and raw[end] == '"'))): start -= 1 end += 1 - done.append(raw[:start]) # Keep stuff leading up to token - done.append(replacement) # Append replacement value - raw = raw[end:] # Continue with remainder of string + 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 return ''.join(done) diff --git a/test/TestUtils.py b/test/TestUtils.py index 471418f464..6537da1b93 100644 --- a/test/TestUtils.py +++ b/test/TestUtils.py @@ -251,6 +251,16 @@ class TestUtils(unittest.TestCase): 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_template_varReplace_iterated(self): template = 'hello $who' vars = {