Use older run-tempest for stable branches

run-tempest is changed recently to add the new variables but
keep supporting the old ones too, for example:
tempest_black_regex, tempest_exclude_regex. and if both
old and new var are used in job definition (parent and child) then
new variables are picked. Because Tempest is branchless, zuul pick
the Tempest master playbooks/roles. That is why job running on stable
branch gate will pick the base job definition from Tempest master.
This way if any stable jobs which were defining the old var and using old
Tempest are broken if any of their parent job define the new var.

This commit pin the older run-tempest role for such stable branches.

Change-Id: If49ab0c31aca5b7837636727096a9bc83f891b1b
This commit is contained in:
Ghanshyam Mann 2021-04-21 18:25:18 -05:00
parent cc0e3d1693
commit 1e4cb1da36
5 changed files with 190 additions and 1 deletions

View File

@ -16,4 +16,17 @@
# address is IPv6 etc. This is invoked before tests are run so that we can # 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. # fail early if anything missing the IPv6 settings or deployments.
- devstack-ipv6-only-deployments-verification - 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"]

View File

@ -29,9 +29,17 @@
(run_tempest_cleanup is defined and run_tempest_cleanup | bool) or (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) (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 - name: Run Tempest
include_role: include_role:
name: run-tempest 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 - name: Run tempest cleanup dry-run
include_role: include_role:

View File

@ -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.

View File

@ -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

View File

@ -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 }}"