mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-06-27 10:40:22 -07:00
Allow infinite depth task includes
This commit is contained in:
parent
4555cdc49c
commit
a1877b2213
1 changed files with 6 additions and 8 deletions
|
@ -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):
|
||||||
|
|
||||||
# *************************************************
|
# *************************************************
|
||||||
|
|
||||||
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):
|
||||||
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")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue