Allow args: var to be used to pass a variable in bare, and also templated versions should also DWIM.

This commit is contained in:
Michael DeHaan 2013-04-22 22:17:55 -04:00
parent 6c778acd91
commit e12f91799c
2 changed files with 14 additions and 3 deletions

View file

@ -382,10 +382,18 @@ class Runner(object):
inject['item'] = ",".join(items)
items = None
# logic to decide how to run things depends on whether with_items is used
# logic to replace complex args if possible
complex_args = self.complex_args
if isinstance(complex_args, basestring):
if complex_args in inject:
complex_args = inject[complex_args]
else:
complex_args = template.template(self.basedir, complex_args, inject)
complex_args = utils.safe_eval(complex_args)
# logic to decide how to run things depends on whether with_items is used
if items is None:
return self._executor_internal_inner(host, self.module_name, self.module_args, inject, port, complex_args=self.complex_args)
return self._executor_internal_inner(host, self.module_name, self.module_args, inject, port, complex_args=complex_args)
elif len(items) > 0:
# executing using with_items, so make multiple calls
@ -404,7 +412,7 @@ class Runner(object):
self.module_args,
inject,
port,
complex_args=self.complex_args
complex_args=complex_args
)
results.append(result.result)
if result.comm_ok == False:

View file

@ -703,6 +703,9 @@ def safe_eval(str):
return var.startswith("$") or '{{' in var
# do not allow method calls to modules
if not isinstance(str, basestring):
# already templated to a datastructure, perhaps?
return str
if re.search(r'\w\.\w+\(', str):
return str
# do not allow imports