Get with_items to work with new play/task architecture.

pull/603/head
Michael DeHaan 13 years ago
parent ecb944892d
commit 4664e354c3

@ -80,13 +80,23 @@ class Play(object):
include_file = tokens[0] include_file = tokens[0]
data = utils.parse_yaml_from_file(utils.path_dwim(self.playbook.basedir, include_file)) data = utils.parse_yaml_from_file(utils.path_dwim(self.playbook.basedir, include_file))
for y in data: for y in data:
items = y.get('with_items',None)
if items is None:
items = [ '' ]
for item in items:
t = Task(self,y) t = Task(self,y)
# TODO: rename this to just 'vars' mv = self.vars.copy()
t.module_vars = self.vars.copy() mv.update(task_vars)
t.module_vars.update(task_vars) mv['item'] = item
results.append(t) results.append(Task(self,y,module_vars=mv))
elif type(x) == dict: elif type(x) == dict:
results.append(Task(self, x)) items = x.get('with_items', None)
if items is None:
items = [ '' ]
for item in items:
mv = self.vars.copy()
mv['item'] = item
results.append(Task(self,x,module_vars=mv))
else: else:
raise Exception("unexpected task type") raise Exception("unexpected task type")
return results return results

@ -18,6 +18,7 @@
############################################# #############################################
from ansible import errors from ansible import errors
from ansible import utils
class Task(object): class Task(object):
@ -26,10 +27,13 @@ class Task(object):
'notify', 'module_name', 'module_args', 'module_vars', 'play', 'notified_by', 'notify', 'module_name', 'module_args', 'module_vars', 'play', 'notified_by',
] ]
def __init__(self, play, ds): def __init__(self, play, ds, module_vars=None):
''' constructor loads from a task or handler datastructure ''' ''' constructor loads from a task or handler datastructure '''
# TODO: more error handling # TODO: more error handling
# include task specific vars
self.module_vars = module_vars
self.play = play self.play = play
self.name = ds.get('name', None) self.name = ds.get('name', None)
@ -55,8 +59,10 @@ class Task(object):
if len(tokens) > 1: if len(tokens) > 1:
self.module_args = tokens[1] self.module_args = tokens[1]
# include task specific vars
self.module_vars = ds.get('vars', {}) self.name = utils.template(self.name, self.module_vars)
self.action = utils.template(self.name, self.module_vars)
if 'first_available_file' in ds: if 'first_available_file' in ds:
self.module_vars['first_available_file'] = ds.get('first_available_file') self.module_vars['first_available_file'] = ds.get('first_available_file')

Loading…
Cancel
Save