From 4664e354c301b61ef9a80bbc41a8ae48f01b2753 Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Sat, 26 May 2012 01:49:23 -0400 Subject: [PATCH] Get with_items to work with new play/task architecture. --- lib/ansible/playbook/play.py | 22 ++++++++++++++++------ lib/ansible/playbook/task.py | 12 +++++++++--- 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/lib/ansible/playbook/play.py b/lib/ansible/playbook/play.py index 4ad9e7d9306..269aaf25af3 100644 --- a/lib/ansible/playbook/play.py +++ b/lib/ansible/playbook/play.py @@ -80,13 +80,23 @@ class Play(object): include_file = tokens[0] data = utils.parse_yaml_from_file(utils.path_dwim(self.playbook.basedir, include_file)) for y in data: - t = Task(self,y) - # TODO: rename this to just 'vars' - t.module_vars = self.vars.copy() - t.module_vars.update(task_vars) - results.append(t) + items = y.get('with_items',None) + if items is None: + items = [ '' ] + for item in items: + t = Task(self,y) + mv = self.vars.copy() + mv.update(task_vars) + mv['item'] = item + results.append(Task(self,y,module_vars=mv)) 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: raise Exception("unexpected task type") return results diff --git a/lib/ansible/playbook/task.py b/lib/ansible/playbook/task.py index a3d94c6bd77..304b8ef8035 100644 --- a/lib/ansible/playbook/task.py +++ b/lib/ansible/playbook/task.py @@ -18,6 +18,7 @@ ############################################# from ansible import errors +from ansible import utils class Task(object): @@ -26,10 +27,13 @@ class Task(object): '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 ''' # TODO: more error handling + # include task specific vars + + self.module_vars = module_vars self.play = play self.name = ds.get('name', None) @@ -55,8 +59,10 @@ class Task(object): if len(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: self.module_vars['first_available_file'] = ds.get('first_available_file')