diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py index 401116388fd..023aa779fdd 100644 --- a/lib/ansible/runner/__init__.py +++ b/lib/ansible/runner/__init__.py @@ -404,7 +404,7 @@ class Runner(object): return ReturnData(host=host, comm_ok=False, result=result) module_name = utils.template(self.basedir, module_name, inject) - module_args = utils.template(self.basedir, module_args, inject) + module_args = utils.template(self.basedir, module_args, inject, expand_lists=True) tmp = '' if self.module_name != 'raw': diff --git a/lib/ansible/utils.py b/lib/ansible/utils.py index f664114435e..b317e6a1530 100644 --- a/lib/ansible/utils.py +++ b/lib/ansible/utils.py @@ -280,7 +280,7 @@ def _varFind(text): path.append(text[part_start[0]:var_end]) return {'path': path, 'start': start, 'end': end} -def varReplace(raw, vars, depth=0): +def varReplace(raw, vars, depth=0, expand_lists=False): ''' Perform variable replacement of $variables in string raw using vars dictionary ''' # this code originally from yum @@ -300,10 +300,10 @@ def varReplace(raw, vars, depth=0): try: replacement = _varLookup(m['path'], vars, depth) - if isinstance(replacement, (list, tuple)): + if expand_lists and isinstance(replacement, (list, tuple)): replacement = ",".join(replacement) if isinstance(replacement, (str, unicode)): - replacement = varReplace(replacement, vars, depth=depth + 1) + replacement = varReplace(replacement, vars, depth=depth+1, expand_lists=expand_lists) except VarNotFoundException: replacement = raw[m['start']:m['end']] @@ -376,7 +376,7 @@ def varReplaceWithItems(basedir, varname, vars): return varname -def template(basedir, text, vars): +def template(basedir, text, vars, expand_lists=False): ''' run a text buffer through the templating engine until it no longer changes ''' prev_text = '' @@ -384,7 +384,7 @@ def template(basedir, text, vars): text = text.decode('utf-8') except UnicodeEncodeError: pass # already unicode - text = varReplace(unicode(text), vars) + text = varReplace(unicode(text), vars, expand_lists=expand_lists) text = varReplaceFilesAndPipes(basedir, text) return text diff --git a/test/TestUtils.py b/test/TestUtils.py index fe2a086d898..6a08b21515f 100644 --- a/test/TestUtils.py +++ b/test/TestUtils.py @@ -221,7 +221,7 @@ class TestUtils(unittest.TestCase): } template = 'yum pkg=${list} state=installed' - res = ansible.utils.varReplace(template, vars) + res = ansible.utils.varReplace(template, vars, expand_lists=True) assert res == 'yum pkg=foo,bar,baz state=installed' def test_template_varReplace_iterated(self):