Allow infinite depth task includes

parent 4555cdc4
...@@ -82,8 +82,8 @@ class Play(object): ...@@ -82,8 +82,8 @@ class Play(object):
self._update_vars_files_for_host(None) self._update_vars_files_for_host(None)
self._tasks = self._load_tasks(self._ds, 'tasks') self._tasks = self._load_tasks(self._ds.get('tasks', []))
self._handlers = self._load_tasks(self._ds, 'handlers') self._handlers = self._load_tasks(self._ds.get('handlers', []))
if self.tags is None: if self.tags is None:
self.tags = [] self.tags = []
...@@ -97,14 +97,14 @@ class Play(object): ...@@ -97,14 +97,14 @@ class Play(object):
# ************************************************* # *************************************************
def _load_tasks(self, ds, keyname): def _load_tasks(self, tasks, vars={}):
''' handle task and handler include statements ''' ''' handle task and handler include statements '''
tasks = ds.get(keyname, [])
results = [] results = []
for x in tasks: for x in tasks:
task_vars = self.vars.copy()
task_vars.update(vars)
if 'include' in x: if 'include' in x:
task_vars = self.vars.copy()
tokens = shlex.split(x['include']) tokens = shlex.split(x['include'])
items = [''] items = ['']
for k in x: for k in x:
...@@ -124,10 +124,8 @@ class Play(object): ...@@ -124,10 +124,8 @@ class Play(object):
mv[k] = utils.template_ds(self.basedir, v, mv) mv[k] = utils.template_ds(self.basedir, v, mv)
include_file = utils.template(self.basedir, tokens[0], mv) include_file = utils.template(self.basedir, tokens[0], mv)
data = utils.parse_yaml_from_file(utils.path_dwim(self.basedir, include_file)) data = utils.parse_yaml_from_file(utils.path_dwim(self.basedir, include_file))
for y in data: results += self._load_tasks(data, mv)
results.append(Task(self,y,module_vars=mv.copy()))
elif type(x) == dict: elif type(x) == dict:
task_vars = self.vars.copy()
results.append(Task(self,x,module_vars=task_vars)) results.append(Task(self,x,module_vars=task_vars))
else: else:
raise Exception("unexpected task type") raise Exception("unexpected task type")
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment