mirror of
https://github.com/ansible-collections/community.general.git
synced 2026-05-08 06:12:51 +00:00
Fixes a dev branch glitch where a conditional could be applied to multiple tasks. Also improves the errors on parsing bad conditionals to make them less confusing to users.
This commit is contained in:
@@ -401,15 +401,29 @@ class Play(object):
|
||||
|
||||
# *************************************************
|
||||
|
||||
def _load_tasks(self, tasks, vars={}, default_vars={}, sudo_vars={}, additional_conditions=[], original_file=None, role_name=None):
|
||||
def _load_tasks(self, tasks, vars=None, default_vars=None, sudo_vars=None, additional_conditions=None, original_file=None, role_name=None):
|
||||
''' handle task and handler include statements '''
|
||||
|
||||
results = []
|
||||
if tasks is None:
|
||||
# support empty handler files, and the like.
|
||||
tasks = []
|
||||
if additional_conditions is None:
|
||||
additional_conditions = []
|
||||
if vars is None:
|
||||
vars = {}
|
||||
if default_vars is None:
|
||||
default_vars = {}
|
||||
if sudo_vars is None:
|
||||
sudo_vars = {}
|
||||
|
||||
old_conditions = list(additional_conditions)
|
||||
|
||||
for x in tasks:
|
||||
|
||||
# prevent assigning the same conditions to each task on an include
|
||||
included_additional_conditions = list(old_conditions)
|
||||
|
||||
if not isinstance(x, dict):
|
||||
raise errors.AnsibleError("expecting dict; got: %s" % x)
|
||||
|
||||
@@ -490,9 +504,11 @@ class Play(object):
|
||||
for x in data:
|
||||
if 'include' in x:
|
||||
x['role_name'] = new_role
|
||||
results += self._load_tasks(data, mv, default_vars, included_sudo_vars, included_additional_conditions, original_file=include_filename, role_name=new_role)
|
||||
loaded = self._load_tasks(data, mv, default_vars, included_sudo_vars, list(included_additional_conditions), original_file=include_filename, role_name=new_role)
|
||||
results += loaded
|
||||
elif type(x) == dict:
|
||||
results.append(Task(self,x,module_vars=task_vars,default_vars=default_vars,additional_conditions=additional_conditions,role_name=role_name))
|
||||
task = Task(self,x,module_vars=task_vars,default_vars=default_vars,additional_conditions=list(additional_conditions),role_name=role_name)
|
||||
results.append(task)
|
||||
else:
|
||||
raise Exception("unexpected task type")
|
||||
|
||||
|
||||
@@ -41,7 +41,7 @@ class Task(object):
|
||||
'sudo_pass', 'when', 'connection', 'environment', 'args',
|
||||
'any_errors_fatal', 'changed_when', 'failed_when', 'always_run', 'delay', 'retries', 'until'
|
||||
]
|
||||
|
||||
|
||||
def __init__(self, play, ds, module_vars=None, default_vars=None, additional_conditions=None, role_name=None):
|
||||
''' constructor loads from a task or handler datastructure '''
|
||||
|
||||
|
||||
Reference in New Issue
Block a user