integration: Collect subject results
Add a playbook to pull down the integration and e2e testing logs/xml. By default they will appear in a 'artifacts' subdirectory of wherever the ``results.yml`` playbook lives. If the ``$WORKSPACE`` env. var is set and non-empty, the subdirectory will be created there instead. Inside the ``artifacts`` directory, further sub-directories are created, one for each subject's Ansible inventory name. Within those sub-directories are all the collected logs from that host. In this way, automation may simply archive the entire 'artifacts' directory to capture the important log files. (Depends on PR #935) Signed-off-by: Chris Evich <cevich@redhat.com>
This commit is contained in:
parent
76e25eea42
commit
a30a118fe6
3 changed files with 88 additions and 13 deletions
67
contrib/test/integration/results.yml
Normal file
67
contrib/test/integration/results.yml
Normal file
|
@ -0,0 +1,67 @@
|
|||
---
|
||||
# vim-syntax: ansible
|
||||
|
||||
- hosts: '{{ hosts | default("all") }}'
|
||||
vars:
|
||||
# Paths use rsync 'source' conventions
|
||||
crio_integration_filepath: "/root/src/github.com/kubernetes-incubator/cri-o/testout.txt"
|
||||
# N/B: This needs coordination with e2e.yml
|
||||
crio_node_e2e_filepath: "/root/go-tools/src/k8s.io/kubernetes/artifacts/" # everything
|
||||
# Treat empty env. var as "undefined and use default()
|
||||
result_dest_basedir: '{{ lookup("env","WORKSPACE") |
|
||||
default(playbook_dir, True) }}/artifacts'
|
||||
_result_filepaths: [] # do not use
|
||||
_dstfnbuff: [] # do not use
|
||||
tasks:
|
||||
- name: The crio_integration_filepath is required
|
||||
tags:
|
||||
- integration
|
||||
set_fact:
|
||||
_result_filepaths: "{{ _result_filepaths + [crio_integration_filepath] }}"
|
||||
|
||||
- name: The crio_node_e2e_filepath is required
|
||||
tags:
|
||||
- e2e
|
||||
set_fact:
|
||||
_result_filepaths: "{{ _result_filepaths + [crio_node_e2e_filepath] }}"
|
||||
|
||||
- name: Verify expectations
|
||||
assert:
|
||||
that:
|
||||
- 'result_dest_basedir | default(False, True)'
|
||||
- '_result_filepaths | default(False, True)'
|
||||
- '_dstfnbuff == []'
|
||||
- 'results_fetched is undefined'
|
||||
|
||||
- name: Results directory exists
|
||||
file:
|
||||
path: "{{ result_dest_basedir }}"
|
||||
state: directory
|
||||
delegate_to: localhost
|
||||
|
||||
- name: destination file paths are buffered for overwrite-checking and jUnit conversion
|
||||
set_fact:
|
||||
_dstfnbuff: >
|
||||
{{ _dstfnbuff |
|
||||
union( [result_dest_basedir ~ "/" ~ inventory_hostname ~ "/" ~ item | basename] ) }}
|
||||
with_items: '{{ _result_filepaths }}'
|
||||
|
||||
- name: Overwriting existing results assumed very very bad
|
||||
fail:
|
||||
msg: "Cowardly refusing to overwrite {{ item }}"
|
||||
when: item | exists
|
||||
delegate_to: localhost
|
||||
with_items: '{{ _dstfnbuff }}'
|
||||
|
||||
# fetch module doesn't support directories
|
||||
- name: Retrieve results from all hosts
|
||||
synchronize:
|
||||
checksum: True # Don't rely on date/time being in sync
|
||||
archive: False # Don't bother with permissions or times
|
||||
copy_links: True # We want files, not links to files
|
||||
recursive: True
|
||||
mode: pull
|
||||
dest: '{{ result_dest_basedir }}/{{ inventory_hostname }}/' # must end in /
|
||||
src: '{{ item }}'
|
||||
register: results_fetched
|
||||
with_items: '{{ _result_filepaths }}'
|
Loading…
Add table
Add a link
Reference in a new issue