diff --git a/playbooks/devstack-tempest-ipv6.yaml b/playbooks/devstack-tempest-ipv6.yaml index d56fb73567..568077e20c 100644 --- a/playbooks/devstack-tempest-ipv6.yaml +++ b/playbooks/devstack-tempest-ipv6.yaml @@ -16,4 +16,17 @@ # address is IPv6 etc. This is invoked before tests are run so that we can # fail early if anything missing the IPv6 settings or deployments. - devstack-ipv6-only-deployments-verification - - run-tempest + tasks: + - name: Run Tempest version <= 26.0.0 + include_role: + name: run-tempest-26 + when: + - zuul.branch is defined + - zuul.branch in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky", "stable/stein"] + + - name: Run Tempest + include_role: + name: run-tempest + when: + - zuul.branch is defined + - zuul.branch not in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky", "stable/stein"] diff --git a/playbooks/devstack-tempest.yaml b/playbooks/devstack-tempest.yaml index 3b969f2946..269999c7c8 100644 --- a/playbooks/devstack-tempest.yaml +++ b/playbooks/devstack-tempest.yaml @@ -29,9 +29,17 @@ (run_tempest_cleanup is defined and run_tempest_cleanup | bool) or (run_tempest_fail_if_leaked_resources is defined and run_tempest_fail_if_leaked_resources | bool) + - name: Run Tempest version <= 26.0.0 + include_role: + name: run-tempest-26 + when: (zuul.branch is defined and zuul.branch in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky", "stable/stein"]) or + (zuul.override_checkout is defined and zuul.override_checkout in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky", "stable/stein"]) + - name: Run Tempest include_role: name: run-tempest + when: (zuul.branch is defined and zuul.branch not in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky", "stable/stein"] and zuul.override_checkout is not defined) or + (zuul.override_checkout is defined and zuul.override_checkout not in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky", "stable/stein"]) - name: Run tempest cleanup dry-run include_role: diff --git a/roles/run-tempest-26/README.rst b/roles/run-tempest-26/README.rst new file mode 100644 index 0000000000..3643edb4e4 --- /dev/null +++ b/roles/run-tempest-26/README.rst @@ -0,0 +1,83 @@ +Run Tempest + +The result of the tempest run is stored in the `tempest_run_result` +variable (through the `register` statement). + +**Role Variables** + +.. zuul:rolevar:: devstack_base_dir + :default: /opt/stack + + The devstack base directory. + +.. zuul:rolevar:: tempest_concurrency + :default: 0 + + The number of parallel test processes. + +.. zuul:rolevar:: tempest_test_regex + :default: '' + + A regular expression used to select the tests. + + It works only when used with some specific tox environments + ('all', 'all-plugin'.) + + In the following example only api scenario and third party tests + will be executed. + + :: + vars: + tempest_test_regex: (tempest\.(api|scenario|thirdparty)).*$ + +.. zuul:rolevar:: tempest_test_blacklist + + Specifies a blacklist file to skip tests that are not needed. + + Pass a full path to the file. + +.. zuul:rolevar:: tox_envlist + :default: smoke + + The Tempest tox environment to run. + +.. zuul:rolevar:: tempest_black_regex + :default: '' + + A regular expression used to skip the tests. + + It works only when used with some specific tox environments + ('all', 'all-plugin'.) + + :: + vars: + tempest_black_regex: (tempest.api.identity).*$ + +.. zuul:rolevar:: tox_extra_args + :default: '' + + String of extra command line options to pass to tox. + + Here is an example of running tox with --sitepackages option: + + :: + vars: + tox_extra_args: --sitepackages + +.. zuul:rolevar:: tempest_test_timeout + :default: '' + + The timeout (in seconds) for each test. + +.. zuul:rolevar:: stable_constraints_file + :default: '' + + Upper constraints file to be used for stable branch till stable/rocky. + +.. zuul:rolevar:: tempest_tox_environment + :default: '' + + Environment variable to set for run-tempst task. + + Env variables set in this variable will be combined with some more + defaults env variable set at runtime. diff --git a/roles/run-tempest-26/defaults/main.yaml b/roles/run-tempest-26/defaults/main.yaml new file mode 100644 index 0000000000..cbac76d2c6 --- /dev/null +++ b/roles/run-tempest-26/defaults/main.yaml @@ -0,0 +1,12 @@ +devstack_base_dir: /opt/stack +tempest_test_regex: '' +tox_envlist: smoke +tempest_black_regex: '' +tox_extra_args: '' +tempest_test_timeout: '' +stable_constraints_file: "{{ devstack_base_dir }}/requirements/upper-constraints.txt" +target_branch: "{{ zuul.branch }}" +tempest_tox_environment: {} +# NOTE(gmann): external_bridge_mtu shows as undefined for run-tempest role +# defining default value here to avoid that error. +external_bridge_mtu: 0 \ No newline at end of file diff --git a/roles/run-tempest-26/tasks/main.yaml b/roles/run-tempest-26/tasks/main.yaml new file mode 100644 index 0000000000..b197856221 --- /dev/null +++ b/roles/run-tempest-26/tasks/main.yaml @@ -0,0 +1,73 @@ +# NOTE(andreaf) The number of vcpus is not available on all systems. +# See https://github.com/ansible/ansible/issues/30688 +# When not available, we fall back to ansible_processor_cores +- name: Get hw.logicalcpu from sysctl + shell: sysctl hw.logicalcpu | cut -d' ' -f2 + register: sysctl_hw_logicalcpu + when: ansible_processor_vcpus is not defined + +- name: Number of cores + set_fact: + num_cores: "{{ansible_processor_vcpus|default(sysctl_hw_logicalcpu.stdout)}}" + +- name: Set concurrency for cores == 3 or less + set_fact: + default_concurrency: "{{ num_cores }}" + when: num_cores|int <= 3 + +- name: Limit max concurrency when more than 3 vcpus are available + set_fact: + default_concurrency: "{{ num_cores|int // 2 }}" + when: num_cores|int > 3 + +- name: Override target branch + set_fact: + target_branch: "{{ zuul.override_checkout }}" + when: zuul.override_checkout is defined + +- name: Use stable branch upper-constraints till stable/stein + set_fact: + # TOX_CONSTRAINTS_FILE is new name, UPPER_CONSTRAINTS_FILE is old one, best to set both + tempest_tox_environment: "{{ tempest_tox_environment | combine({'UPPER_CONSTRAINTS_FILE': stable_constraints_file}) | combine({'TOX_CONSTRAINTS_FILE': stable_constraints_file}) }}" + when: target_branch in ["stable/ocata", "stable/pike", "stable/queens", "stable/rocky"] + +- name: Use Configured upper-constraints for non-master Tempest + set_fact: + # TOX_CONSTRAINTS_FILE is new name, UPPER_CONSTRAINTS_FILE is old one, best to set both + tempest_tox_environment: "{{ tempest_tox_environment | combine({'UPPER_CONSTRAINTS_FILE': devstack_localrc['TEMPEST_VENV_UPPER_CONSTRAINTS']}) | combine({'TOX_CONSTRAINTS_FILE': devstack_localrc['TEMPEST_VENV_UPPER_CONSTRAINTS']}) }}" + when: + - devstack_localrc is defined + - "'TEMPEST_BRANCH' in devstack_localrc" + - "'TEMPEST_VENV_UPPER_CONSTRAINTS' in devstack_localrc" + - devstack_localrc['TEMPEST_BRANCH'] != 'master' + - devstack_localrc['TEMPEST_VENV_UPPER_CONSTRAINTS'] != 'default' + +- name: Set OS_TEST_TIMEOUT if requested + set_fact: + tempest_tox_environment: "{{ tempest_tox_environment | combine({'OS_TEST_TIMEOUT': tempest_test_timeout}) }}" + when: tempest_test_timeout != '' + +- when: + - tempest_test_blacklist is defined + block: + - name: Check for test blacklist file + stat: + path: "{{ tempest_test_blacklist }}" + register: + blacklist_stat + + - name: Build blacklist option + set_fact: + blacklist_option: "--blacklist-file={{ tempest_test_blacklist|quote }}" + when: blacklist_stat.stat.exists + +- name: Run Tempest + command: tox -e {{tox_envlist}} {{tox_extra_args}} -- {{tempest_test_regex|quote}} {{blacklist_option|default('')}} \ + --concurrency={{tempest_concurrency|default(default_concurrency)}} \ + --black-regex={{tempest_black_regex|quote}} + args: + chdir: "{{devstack_base_dir}}/tempest" + register: tempest_run_result + become: true + become_user: tempest + environment: "{{ tempest_tox_environment }}"