tempest/roles/run-tempest/tasks/main.yaml
Ghanshyam Mann 5ff5dabd6e Fix stable/train testing with tempest 26.1.0
Tis issue came up before also during we cap the Tempest
version for stable branch tests(the one moved to EM state).

Tempest use the tox constraints file while creating the tempest
virtual env in devstack/lib/tempest, installing the tempest
plugins and running the tests like in run-tempest ansible roles.
If anywhere tox constraints file is used differently then venv
will be recreated and installed tempest plugins will be gone from
that recreated venv so tempest will not be able to run the plugins
tests and fail job.

Current failure: https://aca43ed1a01d95dea0ee-dcdb6cbb330bdac08ffee1284f86c919.ssl.cf2.rackcdn.com/822225/3/check/octavia-v2-dsvm-scenario/f60e4d3/job-output.txt

Earlier I tried to fix it in a generic way by fetching the devstack
localrc - https://review.opendev.org/c/openstack/tempest/+/774913
but this solution does not seems working as we can see it is skipped
in current stable/train testing with tempest 26.1.0

Adding stable/train explicitly in list for using the stable constraint
in run-tempest role also which will be in sync with what devstack/lib/tempest
use. And later I will debug why generic way is not working.

Because of Tempest 26.1.0 and with stestr 2.5.1 (beacause of upper
constraints of stestr 2.5.1 in stable/train) which does not have
new args exclude-regex so let's fallback to old arg if new arg is passed.

Depends-On: https://review.opendev.org/c/openstack/devstack/+/822380
Depends-On: https://review.opendev.org/c/openstack/cinder-tempest-plugin/+/825708

Closes-Bug: #1955418
Change-Id: I105c839c38adfba1f9e22123ec3a99ffc0b5b72e
2022-01-25 17:03:31 +00:00

133 lines
5.2 KiB
YAML

# 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/train
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", "stable/stein", "stable/train"]
- 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'] != 'master'
- 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 != ''
# TODO(kopecmartin) remove the following 'when block' after all consumers of
# the role have switched to tempest_test_exclude_list option, until then it's
# kept here for backward compatibility
- 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
- when:
- tempest_test_exclude_list is defined
block:
- name: Check for test exclude list file
stat:
path: "{{ tempest_test_exclude_list }}"
register:
exclude_list_stat
- name: Build exclude list option
set_fact:
exclude_list_option: "--exclude-list={{ tempest_test_exclude_list|quote }}"
when: exclude_list_stat.stat.exists
- name: stable/train workaround to fallback exclude-list to blacklist
# NOTE(gmann): stable/train use Tempest 26.1.0 and with stestr 2.5.1
# (beacause of upper constraints of stestr 2.5.1 in stable/train) which
# does not have new args exclude-list so let's fallback to old arg
# if new arg is passed.
set_fact:
exclude_list_option: "--blacklist-file={{ tempest_test_exclude_list|quote }}"
when:
- tempest_test_exclude_list is defined
- target_branch == "stable/train"
# TODO(kopecmartin) remove this after all consumers of the role have switched
# to tempest_exclude_regex option, until then it's kept here for the backward
# compatibility
- name: Build exclude regex (old param)
set_fact:
tempest_test_exclude_regex: "--black-regex={{tempest_black_regex|quote}}"
when:
- tempest_black_regex is defined
- tempest_exclude_regex is not defined
- name: Build exclude regex (new param)
set_fact:
tempest_test_exclude_regex: "--exclude-regex={{tempest_exclude_regex|quote}}"
when:
- tempest_black_regex is not defined
- tempest_exclude_regex is defined
- target_branch != "stable/train"
- name: stable/train workaround to fallback exclude-regex to black-regex
# NOTE(gmann): stable/train use Tempest 26.1.0 and with stestr 2.5.1
# (beacause of upper constraints of stestr 2.5.1 in stable/train) which
# does not have new args exclude-regex so let's fallback to old arg
# if new arg is passed.
set_fact:
tempest_test_exclude_regex: "--black-regex={{tempest_exclude_regex|quote}}"
when:
- tempest_black_regex is not defined
- tempest_exclude_regex is defined
- target_branch == "stable/train"
- name: Run Tempest
command: tox -e {{tox_envlist}} {{tox_extra_args}} -- {{tempest_test_regex|quote}} \
{{blacklist_option|default('')}} {{exclude_list_option|default('')}} \
--concurrency={{tempest_concurrency|default(default_concurrency)}} \
{{tempest_test_exclude_regex|default('')}}
args:
chdir: "{{devstack_base_dir}}/tempest"
register: tempest_run_result
become: true
become_user: tempest
environment: "{{ tempest_tox_environment }}"