Allow with_items to specify a variable
This commit is contained in:
parent
933b5e8631
commit
a05da2d312
3 changed files with 11 additions and 3 deletions
|
@ -89,6 +89,8 @@ class Play(object):
|
|||
items = y.get('with_items',None)
|
||||
if items is None:
|
||||
items = [ '' ]
|
||||
elif isinstance(items, basestring):
|
||||
items = utils.varLookup(items, task_vars)
|
||||
for item in items:
|
||||
mv = task_vars.copy()
|
||||
mv['item'] = item
|
||||
|
|
|
@ -201,7 +201,7 @@ def parse_json(data):
|
|||
|
||||
_LISTRE = re.compile(r"(\w+)\[(\d+)\]")
|
||||
|
||||
def varLookup(name, vars):
|
||||
def _varLookup(name, vars):
|
||||
''' find the contents of a possibly complex variable in vars. '''
|
||||
path = name.split('.')
|
||||
space = vars
|
||||
|
@ -223,6 +223,12 @@ def varLookup(name, vars):
|
|||
_KEYCRE = re.compile(r"\$(?P<complex>\{){0,1}((?(complex)[\w\.\[\]]+|\w+))(?(complex)\})")
|
||||
# if { -> complex if complex, allow . and need trailing }
|
||||
|
||||
def varLookup(varname, vars):
|
||||
m = _KEYCRE.search(varname)
|
||||
if not m:
|
||||
return None
|
||||
return _varLookup(m.group(2), vars)
|
||||
|
||||
def varReplace(raw, vars):
|
||||
'''Perform variable replacement of $vars
|
||||
|
||||
|
@ -245,7 +251,7 @@ def varReplace(raw, vars):
|
|||
# original)
|
||||
varname = m.group(2)
|
||||
|
||||
replacement = unicode(varLookup(varname, vars) or m.group())
|
||||
replacement = unicode(_varLookup(varname, vars) or m.group())
|
||||
|
||||
start, end = m.span()
|
||||
done.append(raw[:start]) # Keep stuff leading up to token
|
||||
|
|
|
@ -17,7 +17,7 @@ class TestUtils(unittest.TestCase):
|
|||
}
|
||||
}
|
||||
|
||||
res = ansible.utils.varLookup('data.who', vars)
|
||||
res = ansible.utils._varLookup('data.who', vars)
|
||||
|
||||
assert sorted(res) == sorted(vars['data']['who'])
|
||||
|
||||
|
|
Loading…
Reference in a new issue