summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael DeHaan <michael.dehaan@gmail.com>2012-10-17 19:35:12 -0400
committerMichael DeHaan <michael.dehaan@gmail.com>2012-10-17 19:35:12 -0400
commit25162c98ec22b73daf60fd606728f40abaef0ed6 (patch)
treeae0a659c2d62606ae9b6f4031c88fce5d066e4b5
parentd21d3677a68a8e87f4e23c8a18e37d4de9d87f93 (diff)
downloadansible-25162c98ec22b73daf60fd606728f40abaef0ed6.tar.gz
Only expand lists in templating inside of module action lines, to avoid breaking usage with with_items and "in" statements, etc
-rw-r--r--lib/ansible/runner/__init__.py2
-rw-r--r--lib/ansible/utils.py10
-rw-r--r--test/TestUtils.py2
3 files changed, 7 insertions, 7 deletions
diff --git a/lib/ansible/runner/__init__.py b/lib/ansible/runner/__init__.py
index 401116388f..023aa779fd 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 f664114435..b317e6a153 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 fe2a086d89..6a08b21515 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):