Don't skip conditional exception on includes (#39377)

* task_executor.py: Raise 'conditional exception' in case of 'include_*'

Fixes #33632

Signed-off-by: Patrick Ringl <patrick_@freenet.de>

* Re-organize tests, add static include test with undefined var

* Remove unnecessary conditional
This commit is contained in:
Matt Martz 2018-04-26 13:39:44 -05:00 committed by GitHub
parent 05830658bc
commit 2f5161628a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
5 changed files with 51 additions and 3 deletions

View file

@ -471,9 +471,7 @@ class TaskExecutor:
# loop error takes precedence
if self._loop_eval_error is not None:
raise self._loop_eval_error # pylint: disable=raising-bad-type
# skip conditional exception in the case of includes as the vars needed might not be available except in the included tasks or due to tags
if self._task.action not in ['include', 'include_tasks', 'include_role']:
raise
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:

View file

@ -59,3 +59,7 @@ rm -f tasks/hello/*.yml
# Inlcuded tasks should inherit attrs from non-dynamic blocks in parent chain
# https://github.com/ansible/ansible/pull/38827
ANSIBLE_STRATEGY='linear' ansible-playbook test_grandparent_inheritance.yml -i ../../inventory "$@"
# undefined_var
ANSIBLE_STRATEGY='linear' ansible-playbook undefined_var/playbook.yml -i ../../inventory "$@"
ANSIBLE_STRATEGY='free' ansible-playbook undefined_var/playbook.yml -i ../../inventory "$@"

View file

@ -0,0 +1,5 @@
---
- debug:
msg: "This message comes from an 'include_tasks'-task! :-)"
register: "_include_tasks_task_result"

View file

@ -0,0 +1,5 @@
- vars:
_undefined: 'yes'
block:
- set_fact:
_include_defined_result: 'good'

View file

@ -0,0 +1,36 @@
---
- hosts: testhost
gather_facts: false
tasks:
- include_tasks: "include_tasks.yml"
ignore_errors: True
register: "_include_tasks_result"
when:
- "_undefined == 'yes'"
- assert:
that:
- "_include_tasks_result is failed"
- "_include_tasks_task_result is not defined"
msg: "'include_tasks' did not evaluate it's attached condition and failed"
- include_role:
name: "no_log"
ignore_errors: True
register: "_include_role_result"
when:
- "_undefined == 'yes'"
- assert:
that:
- "_include_role_result is failed"
msg: "'include_role' did not evaluate it's attached condition and failed"
- include: include_that_defines_var.yml
static: yes
when:
- "_undefined == 'yes'"
- assert:
that:
- _include_defined_result == 'good'