diff --git a/lib/ansible/executor/task_executor.py b/lib/ansible/executor/task_executor.py index 328e39c7bc..f549e8714a 100644 --- a/lib/ansible/executor/task_executor.py +++ b/lib/ansible/executor/task_executor.py @@ -409,16 +409,18 @@ class TaskExecutor: if not self._task.evaluate_conditional(templar, variables): display.debug("when evaluation failed, skipping this task") return dict(changed=False, skipped=True, skip_reason='Conditional check failed', _ansible_no_log=self._play_context.no_log) - # since we're not skipping, if there was a loop evaluation error - # raised earlier we need to raise it now to halt the execution of - # this task + except AnsibleError: + # loop error takes precedence if self._loop_eval_error is not None: raise self._loop_eval_error - except AnsibleError: # skip conditional exception in the case of includes as the vars needed might not be avaiable except in the included tasks or due to tags if self._task.action not in ['include', 'include_role']: raise + # Not skipping, if we had loop error raised earlier we need to raise it now to halt the execution of this task + if self._loop_eval_error is not None: + raise self._loop_eval_error + # if we ran into an error while setting up the PlayContext, raise it now if context_validation_error is not None: raise context_validation_error