mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
ISSUE 25470 - junit report failure on changes
This commit provides an environment option to change the behaviour so that it's possible to declare any changes shoudl be considered a junit failure. This is useful when carrying out idempotent testing to ensure that multiple runs are safe and any changes should be considered a test failure. In a CI test of an ansible role the practice would be to run the role once without this to configure the test system, and tehn to run a second time including this environment vairable so that the CI engine processing the junit report recognise any changes to be a test fail.
This commit is contained in:
parent
e7763204e9
commit
fc274bda8a
2 changed files with 11 additions and 1 deletions
|
@ -115,6 +115,7 @@ Ansible Changes By Release
|
||||||
* Update ipaddr Jinja filters to replace existing non RFC compliant ones. Added additional filters for easier use
|
* Update ipaddr Jinja filters to replace existing non RFC compliant ones. Added additional filters for easier use
|
||||||
of handling IP addresses. (PR# 26566)
|
of handling IP addresses. (PR# 26566)
|
||||||
* datetime filter updated to use default format of datetime.datetime (ISO8601)
|
* datetime filter updated to use default format of datetime.datetime (ISO8601)
|
||||||
|
* The junit plugin now has an option to report a junit test failure on changes for idempotent testing.
|
||||||
|
|
||||||
#### New Callbacks:
|
#### New Callbacks:
|
||||||
- full_skip
|
- full_skip
|
||||||
|
|
|
@ -58,6 +58,8 @@ class CallbackModule(CallbackBase):
|
||||||
Default: ~/.ansible.log
|
Default: ~/.ansible.log
|
||||||
JUNIT_TASK_CLASS (optional): Configure the output to be one class per yaml file
|
JUNIT_TASK_CLASS (optional): Configure the output to be one class per yaml file
|
||||||
Default: False
|
Default: False
|
||||||
|
JUNIT_FAIL_ON_CHANGE (optional): Consider any tasks reporting "changed" as a junit test failure
|
||||||
|
Default: False
|
||||||
|
|
||||||
Requires:
|
Requires:
|
||||||
junit_xml
|
junit_xml
|
||||||
|
@ -74,6 +76,7 @@ class CallbackModule(CallbackBase):
|
||||||
|
|
||||||
self._output_dir = os.getenv('JUNIT_OUTPUT_DIR', os.path.expanduser('~/.ansible.log'))
|
self._output_dir = os.getenv('JUNIT_OUTPUT_DIR', os.path.expanduser('~/.ansible.log'))
|
||||||
self._task_class = os.getenv('JUNIT_TASK_CLASS', 'False').lower()
|
self._task_class = os.getenv('JUNIT_TASK_CLASS', 'False').lower()
|
||||||
|
self._fail_on_change = os.getenv('JUNIT_FAIL_ON_CHANGE', 'False').lower()
|
||||||
self._playbook_path = None
|
self._playbook_path = None
|
||||||
self._playbook_name = None
|
self._playbook_name = None
|
||||||
self._play_name = None
|
self._play_name = None
|
||||||
|
@ -129,6 +132,9 @@ class CallbackModule(CallbackBase):
|
||||||
|
|
||||||
task_data = self._task_data[task_uuid]
|
task_data = self._task_data[task_uuid]
|
||||||
|
|
||||||
|
if self._fail_on_change == 'true' and status == 'changed':
|
||||||
|
status = 'failed'
|
||||||
|
|
||||||
if status == 'failed' and 'EXPECTED FAILURE' in task_data.name:
|
if status == 'failed' and 'EXPECTED FAILURE' in task_data.name:
|
||||||
status = 'ok'
|
status = 'ok'
|
||||||
|
|
||||||
|
@ -224,7 +230,10 @@ class CallbackModule(CallbackBase):
|
||||||
self._finish_task('failed', result)
|
self._finish_task('failed', result)
|
||||||
|
|
||||||
def v2_runner_on_ok(self, result):
|
def v2_runner_on_ok(self, result):
|
||||||
self._finish_task('ok', result)
|
if result._result.get('changed', False):
|
||||||
|
self._finish_task('changed', result)
|
||||||
|
else:
|
||||||
|
self._finish_task('ok', result)
|
||||||
|
|
||||||
def v2_runner_on_skipped(self, result):
|
def v2_runner_on_skipped(self, result):
|
||||||
self._finish_task('skipped', result)
|
self._finish_task('skipped', result)
|
||||||
|
|
Loading…
Reference in a new issue