From e4fdd2fece0726dc28753e7dcd0a17972f7f5538 Mon Sep 17 00:00:00 2001 From: "Andrea Frittoli (andreaf)" Date: Wed, 4 Oct 2017 23:36:20 +0100 Subject: [PATCH] Add role to build the stackviz report Add a role to build the stackviz report and include it in the tempest post play. Change-Id: I085460fc7a4fe6baee2d85c8ab3ea3a2128ea54d --- playbooks/post-tempest.yaml | 4 +- roles/process-stackviz/README.rst | 22 ++++++++ roles/process-stackviz/defaults/main.yaml | 3 ++ roles/process-stackviz/tasks/main.yaml | 63 +++++++++++++++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 roles/process-stackviz/README.rst create mode 100644 roles/process-stackviz/defaults/main.yaml create mode 100644 roles/process-stackviz/tasks/main.yaml diff --git a/playbooks/post-tempest.yaml b/playbooks/post-tempest.yaml index 01784f1e42..820e4f6b40 100644 --- a/playbooks/post-tempest.yaml +++ b/playbooks/post-tempest.yaml @@ -8,13 +8,15 @@ - role: process-test-results test_results_dir: '{{ logs_root }}/tempest' tox_envdir: tempest + - role: process-stackviz - role: stage-output zuul_copy_output: { '{{ logs_root }}/tempest/etc/tempest.conf': 'logs', '{{ logs_root }}/tempest/etc/accounts.yaml': 'logs', '{{ logs_root }}/tempest/tempest.log': 'logs', '{{ stage_dir }}/{{ test_results_stage_name }}.subunit': 'logs', - '{{ stage_dir }}/{{ test_results_stage_name }}.html': 'logs' } + '{{ stage_dir }}/{{ test_results_stage_name }}.html': 'logs', + '{{ stage_dir }}/stackviz': 'logs' } extensions_to_txt: - conf - log diff --git a/roles/process-stackviz/README.rst b/roles/process-stackviz/README.rst new file mode 100644 index 0000000000..b05326d402 --- /dev/null +++ b/roles/process-stackviz/README.rst @@ -0,0 +1,22 @@ +Generate stackviz report. + +Generate stackviz report using subunit and dstat data, using +the stackviz archive embedded in test images. + +**Role Variables** + +.. zuul:rolevar:: devstack_base_dir + :default: /opt/stack + + The devstack base directory. + +.. zuul:rolevar:: stage_dir + :default: /opt/stack/logs + + The stage directory where the input data can be found and + the output will be produced. + +.. zuul:rolevar:: test_results_stage_name + :default: test_results + + The name of the subunit file to be used as input. diff --git a/roles/process-stackviz/defaults/main.yaml b/roles/process-stackviz/defaults/main.yaml new file mode 100644 index 0000000000..b1eb8d9c76 --- /dev/null +++ b/roles/process-stackviz/defaults/main.yaml @@ -0,0 +1,3 @@ +devstack_base_dir: /opt/stack +stage_dir: /opt/stack/ +test_results_stage_name: test_results diff --git a/roles/process-stackviz/tasks/main.yaml b/roles/process-stackviz/tasks/main.yaml new file mode 100644 index 0000000000..09de606425 --- /dev/null +++ b/roles/process-stackviz/tasks/main.yaml @@ -0,0 +1,63 @@ +- name: Check if stackviz archive exists + stat: + path: "/opt/cache/files/stackviz-latest.tar.gz" + register: stackviz_archive + +- debug: + msg: "Stackviz archive could not be found in /opt/cache/files/stackviz-latest.tar.gz" + when: not stackviz_archive.stat.exists + +- name: Check if subunit data exists + stat: + path: "{{ stage_dir }}/{{ test_results_stage_name }}.subunit" + register: subunit_input + +- debug: + msg: "Subunit file could not be found at {{ stage_dir }}/{{ test_results_stage_name }}.subunit" + when: not subunit_input.stat.exists + +- name: Install stackviz + pip: + name: "file://{{ stackviz_archive.stat.path }}" + virtualenv: /tmp/stackviz + extra_args: -U + when: + - stackviz_archive.stat.exists + - subunit_input.stat.exists + +- name: Deploy stackviz static html+js + command: cp -pR /tmp/stackviz/share/stackviz-html {{ stage_dir }}/stackviz + when: + - stackviz_archive.stat.exists + - subunit_input.stat.exists + +- name: Check if dstat data exists + stat: + path: "{{ devstack_base_dir }}/logs/dstat-csv.log" + register: dstat_input + when: + - stackviz_archive.stat.exists + - subunit_input.stat.exists + +- name: Run stackviz with dstat + shell: | + cat {{ subunit_input.stat.path }} | \ + /tmp/stackviz/bin/stackviz-export \ + --dstat "{{ devstack_base_dir }}/logs/dstat-csv.log" \ + --env --stdin \ + {{ stage_dir }}/stackviz/data + when: + - stackviz_archive.stat.exists + - subunit_input.stat.exists + - dstat_input.stat.exists + +- name: Run stackviz without dstat + shell: | + cat {{ subunit_input.stat.path }} | \ + /tmp/stackviz/bin/stackviz-export \ + --env --stdin \ + {{ stage_dir }}/stackviz/data + when: + - stackviz_archive.stat.exists + - subunit_input.stat.exists + - not dstat_input.stat.exists