diff --git a/.zuul.yaml b/.zuul.yaml index 5698607..9dc1825 100644 --- a/.zuul.yaml +++ b/.zuul.yaml @@ -11,6 +11,7 @@ vars: devstack_localrc: USE_PYTHON3: true + run_validation: true irrelevant-files: - ^.*\.rst$ - ^doc/.*$ diff --git a/roles/fetch_validations/tasks/main.yaml b/roles/fetch_validations/tasks/main.yaml index 5b82851..745bd37 100644 --- a/roles/fetch_validations/tasks/main.yaml +++ b/roles/fetch_validations/tasks/main.yaml @@ -20,6 +20,6 @@ group: false loop: - dest: "{{ log_path }}/validations-logs" - src: "logs" + src: "artifacts" loop_control: loop_var: vf_output diff --git a/roles/validations/defaults/main.yaml b/roles/validations/defaults/main.yaml index 9bd0d52..211117e 100644 --- a/roles/validations/defaults/main.yaml +++ b/roles/validations/defaults/main.yaml @@ -1,30 +1,18 @@ --- -log_dir: "{{ ansible_user_dir }}/logs" -zuul_work_virtualenv: "{{ ansible_user_dir }}/.venv" -ansible_dir: "{{ zuul_work_virtualenv }}/share/ansible/" -validation_dir: "{{ zuul_work_virtualenv }}/share/ansible/validation-playbooks" -vf_log_dir: "/var/log/validations" -val_exec: "source {{ zuul_work_virtualenv }}/bin/activate; validation" -command: - - output: "{{ log_dir }}/run.log" - action: "run" - command: >- - {{ val_exec }} run --validation check-ftype,512e - --validation-dir {{ validation_dir }} - --ansible-base-dir {{ ansible_dir }} - --output-log {{ log_dir }}/run.log - - output: "{{ log_dir }}/run-group.log" - action: "run" - command: >- - {{ val_exec }} run --group prep --validation-dir {{ validation_dir }} - --ansible-base-dir {{ ansible_dir }} - --output-log {{ log_dir }}/run-group.log - --extra-vars minimal_ram_gb=7 - - output: "{{ log_dir }}/list.log" - action: "list" - command: >- - {{ val_exec }} list --validation-dir {{ validation_dir }} -f json > {{ log_dir }}/list.log 2>&1 - - output: "{{ log_dir }}/show.log" - action: "show" - command: >- - {{ val_exec }} show --validation-dir {{ validation_dir }} check-ram -f json > {{ log_dir }}/show.log 2>&1 +user_dir: "{{ ansible_env.HOME | default('') }}" +val_working_dir: "{{ ansible_env.HOME | default('') }}" +zuul_work_virtualenv: "{{ user_dir }}/.venv" +vf_log_dir: "{{ ansible_user_dir }}/logs" +ansible_dir: "" + +inventory: "localhost" +component: "{{ job.component|default('validation') }}" +# both commands can be used: +# "openstack tripleo validator" or "validation" +# the default is validation because this is the 1st entry available on +# a system for validation. +# The openstack command needs to install python-tripleoclient and its +# dependencies first. This value should be override as needed in the roles/vars +# calls. +command: "validation" +run_validation: true diff --git a/roles/validations/tasks/list.yaml b/roles/validations/tasks/list.yaml new file mode 100644 index 0000000..1245c33 --- /dev/null +++ b/roles/validations/tasks/list.yaml @@ -0,0 +1,6 @@ +--- +- name: List Validation + register: list_output + shell: + cmd: "{{ validation_command }} list {{ validation_dir }} -f json > {{ val_working_dir }}/list.log 2>&1" + executable: /bin/bash diff --git a/roles/validations/tasks/main.yaml b/roles/validations/tasks/main.yaml index 4e8c53d..2853969 100644 --- a/roles/validations/tasks/main.yaml +++ b/roles/validations/tasks/main.yaml @@ -9,22 +9,46 @@ group: "{{ ansible_user }}" recurse: true -# @matbu: TODO make the /var/log/validations as a parameter -# We should be able to write validation logs outside of the /var/log path -# This statement will have to be remove then. -- name: Create Validations log symlink - file: - src: "{{ vf_log_dir }}" - dest: "{{ log_dir }}" - owner: "{{ ansible_user }}" - group: "{{ ansible_user }}" - state: link +- name: check if virtualenv is used + register: is_virtualenv + stat: + path: "{{ zuul_work_virtualenv }}" -# @matbu: TODO make ansible-runner depends on Ansible -- name: Install Ansible - pip: - name: ansible - virtualenv: "{{ zuul_work_virtualenv }}" +- name: Set commmand if virtualenv exists + set_fact: + validation_command: "source {{ zuul_work_virtualenv }}/bin/activate; validation" + when: is_virtualenv.stat.exists -- include: validations.yaml validation_command="{{ item.command }}" val_output="{{ item.output }}" action="{{ item.action }}" - loop: "{{command}}" +- name: Set Validation directory if virtualenv exists + set_fact: + validation_dir: "--validation-dir {{ zuul_work_virtualenv }}/share/ansible/validation-playbooks" + when: is_virtualenv.stat.exists + +- name: Set Ansible base directory if virtualenv exists + set_fact: + ansible_dir: "--ansible-base-dir {{ zuul_work_virtualenv }}/share/ansible/" + when: is_virtualenv.stat.exists + +- name: Set commmand without virtualenv + set_fact: + validation_command: "validation" + when: not is_virtualenv.stat.exists + +- name: Set validation dir without virtualenv + set_fact: + validation_dir: "--validation-dir /usr/share/ansible/validation-playbooks" + when: not is_virtualenv.stat.exists + +- include: run.yaml name="{{ item }}" + when: + - run_validation|default(false)|bool + - component | length > 0 + with_dict: "{{ validations_list[component] }}" + +- include: list.yaml + +- include: show.yaml name="{{ item }}" + when: + - run_validation|default(false)|bool + - component | length > 0 + with_dict: "{{ validations_list[component] }}" diff --git a/roles/validations/tasks/run.yaml b/roles/validations/tasks/run.yaml new file mode 100644 index 0000000..5da41d2 --- /dev/null +++ b/roles/validations/tasks/run.yaml @@ -0,0 +1,31 @@ +--- +- name: Run validations + register: run_validation + shell: + cmd: "{{ validation_command }} run --validation {{ name.key }} {{ validation_dir }} {{ ansible_dir }} \ + --inventory {{ inventory }} --output-log validation_{{ name.key }}.log {{ name.value.extra_args }}" + executable: /bin/bash + +- name: Get Run results + block: + - name: Get run results + register: result + shell: + cmd: "cat validation_{{ name.key }}.log" + executable: /bin/bash + + - name: Get json data + set_fact: + jsondata: "{{ result.stdout | from_json }}" + + - name: Get Validations Status + set_fact: + status: "{{ jsondata | json_query(jsonres) }}" + vars: + jsonres: 'results[*].Status' + + - fail: + msg: "Validation failed: some of the validations has failed." + when: + - item != "PASSED" + loop: "{{ status }}" diff --git a/roles/validations/tasks/show.yaml b/roles/validations/tasks/show.yaml new file mode 100644 index 0000000..ee40981 --- /dev/null +++ b/roles/validations/tasks/show.yaml @@ -0,0 +1,6 @@ +--- +- name: Show Validation + register: show_output + shell: + cmd: "{{ validation_command }} show {{ validation_dir }} --validation {{ name.key }} -f json > {{ val_working_dir }}/show.log 2>&1" + executable: /bin/bash diff --git a/roles/validations/vars/main.yaml b/roles/validations/vars/main.yaml new file mode 100644 index 0000000..3226d6c --- /dev/null +++ b/roles/validations/vars/main.yaml @@ -0,0 +1,23 @@ +--- +validations_list: + compute: + - nova-status: + extra_args: "" + network: + - undercloud-neutron-sanity-check: + extra_args: "" + validation: + - check-cpu: + extra_args: "--extra-vars minimal_cpu_count=2" + - 512e: + extra_args: "" + - check-ram: + extra_args: "--extra-vars minimal_ram_gb=2" + tripleo: + - undercloud-process-count: + extra_args: "" +validations_group: + compute: + - compute + network: + - network