[2.9] Handle post_validate templating errors and add tests (#70240) (#70390)

* Handle post_validate templating errors and fix tests (#70240)

* Handle unexpected templating errors

* Fixes #70050

Fix up tests that weren't running and add tests for graceful templating error handling

(cherry picked from commit 30e70f4b63)

* changelog

ci_complete
pull/70754/head
Sloane Hertel 6 years ago committed by GitHub
parent 93f2f47d4c
commit c00009bc41
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- TaskExecutor - Handle unexpected errors as failed while post validating loops (https://github.com/ansible/ansible/issues/70050).

@ -584,7 +584,12 @@ class TaskExecutor:
return dict(include_args=include_args)
# Now we do final validation on the task, which sets all fields to their final values.
self._task.post_validate(templar=templar)
try:
self._task.post_validate(templar=templar)
except AnsibleError:
raise
except Exception:
return dict(changed=False, failed=True, _ansible_no_log=self._play_context.no_log, exception=to_text(traceback.format_exc()))
if '_variable_params' in self._task.args:
variable_params = self._task.args.pop('_variable_params')
if isinstance(variable_params, dict):

@ -0,0 +1,31 @@
- name: Task that fails due to templating error for plugin option
debug: msg="{{ 5 / 0 | int }}"
ignore_errors: true
register: result
- assert:
that:
- result.failed
- result.exception
- name: Loop that fails due to templating error in first entry and ignores errors
debug: msg="{{ 5 / item }}"
ignore_errors: true
register: result
loop: [0, 0, 1]
- debug: var=result
- assert:
that:
- result.results[0].failed
- result.results[0].exception
- result.results[0].item == 0
- result.results[1].failed
- result.results[1].exception
- result.results[1].item == 0
- not result.results[2].failed
- result.results[2].exception is undefined
- result.results[2].item == 1

@ -288,6 +288,8 @@
that:
- "hello_world_string|trim == 'Hello world!'"
- include_tasks: ./errors.yml
# Vars lookups
- name: Test that we can give it a single value and receive a single value

Loading…
Cancel
Save