Files
tripleo-quickstart-extras/playbooks/tasks/tempest.yml
Arx Cruz 18e0d1e76d Set tempest_test_extra_test variable
This variable on os_tempest allow us to run an alternative test on
tempest. This is required because very often the included list of tests
is empty because of the match with the excluded list.

Depends-On: https://review.opendev.org/c/openstack/openstack-ansible-os_tempest/+/796818

Change-Id: I95128a9b3e0f6fd1b2c3ddf5b502f460969214b1
2021-06-22 13:59:44 +02:00

236 lines
8.9 KiB
YAML

---
# Load the skipp list
- name: Install and run tempest-skip tool
block:
- name: Load tests to be skipped
vars:
list_skipped_release: "{{ release }}"
list_skipped_job: "{{ zuul.job | default(omit) }}"
list_skipped_deployment: "{{ (tempest_cloud_name in ['undercloud']) | ternary('undercloud', 'overcloud') }}"
include_role:
name: list_skipped
- name: Add skiplist tests to tempest_test_blacklist - skip them
set_fact:
tempest_test_blacklist: "{{ tempest_skip_register.skipped_tests }}"
when: not tempest_run_skipped | default(false) | bool
- name: Add skiplist tests to tempest_test_whitelist - run them
set_fact:
tempest_test_whitelist: "{{ tempest_skip_register.skipped_tests }}"
tempest_test_blacklist: []
when: tempest_run_skipped | default(false) | bool
vars:
# when ansible.cfg have the option interpreter_python set to auto, ansible
# executes with the system python instead of virtualenv even though you are
# inside the virtualenv. Setting ansible_python_interpreter here ensures
# that this playbook will be executed the virtualenv python, which have the
# openstac-tempest-skiplist module
ansible_python_interpreter: "{{ local_working_dir }}/bin/python"
list_skipped_yaml_file: "{{ local_working_dir }}/usr/local/share/ansible/roles/validate-tempest/vars/tempest_skip.yml"
when: tempest_use_skiplist | default(true)
delegate_to: localhost
- name: set python_cmd
set_fact:
python_cmd: "python{{ ansible_python.version.major }}"
cacheable: true
when: python_cmd is not defined
- name: Check if virtualenv is in the system
command: "{{ python_cmd }} -m virtualenv --version"
register: virtualenv_exist
failed_when: false
changed_when: false
- when: virtualenv_exist.rc != 0
name: Install virtualenv
become: true
package:
state: present
name: >
{% if ansible_python.version.major == 3 %}
python3-virtualenv
{% else %}
python-virtualenv
{% endif %}
- name: Set the rc file
set_fact:
rc_file: "{{ (tempest_cloud_name in ['undercloud']) | ternary('stackrc', 'overcloudrc') }}"
when: release in ['queens', 'stein']
- name: Create clouds.yaml if it doesn't exist
shell: |
# queens is returning //v3 so we replace with /v3
sed -i 's/\/\/v3/\/v3/g' {{ ansible_user_dir }}/{{ rc_file }}
source {{ ansible_user_dir }}/{{ rc_file }}
mkdir -p {{ ansible_user_dir }}/.config/openstack
cat <<EOF>>{{ ansible_user_dir }}/.config/openstack/clouds.yaml
clouds:
{{ tempest_cloud_name }}:
identity_api_version: $OS_IDENTITY_API_VERSION
region_name: regionOne
auth:
auth_url: $OS_AUTH_URL
password: $OS_PASSWORD
username: $OS_USERNAME
user_domain_name: Default
project_domain_name: Default
project_name: $OS_PROJECT_NAME
EOF
when:
- release in ['queens', 'stein']
- not tempest_cloud_name in ['standalone']
# Ansible requires openstacksdk>=0.12 do the resource setup, however
# queens upper-constraint has openstacksdk==0.11.36, so we need to
# implement a custom venv with the right openstacksdk to make it work
- name: Queens specific settings and tasks
when: release in ['queens']
vars:
sdk_venv_path: "{{ ansible_user_dir }}/.sdk"
block:
- name: Set tempest_service_setup_host_python_interpreter
set_fact:
tempest_service_setup_host_python_interpreter: "{{ sdk_venv_path }}/bin/python"
- name: Prepare openstacksdk venv
import_role:
name: "python_venv_build"
vars:
venv_python_executable: "{{ python_cmd }}"
venv_build_constraints:
- "--constraint https://releases.openstack.org/constraints/upper/rocky"
venv_install_destination_path: "{{ sdk_venv_path }}"
venv_pip_packages:
- 'openstacksdk'
venv_wheel_build_enable: false
# This will execute os_tempest
- name: Execute os_tempest
when: use_os_tempest | default(true)
block:
- name: Fail the tempest playbook on undefined cloud name and install method
fail:
msg: |
The variable tempest_install_method and tempest_cloud_name is required and
has not been set.
when:
- tempest_install_method is not defined
- tempest_cloud_name is not defined
# If tempest is running on undercloud, do not set this variable to true
- name: Initialize neutron service for network creation
set_fact:
tempest_service_available_neutron: true
when: tempest_cloud_name in ['overcloud', 'standalone']
- name: Create /root/.config/openstack directory
file:
state: directory
path: "/root/.config/openstack"
mode: 0700
become: true
- name: Copy clouds.yaml file to /root directory
block:
- name: Copy clouds.yaml file from user's home to /root directory
copy:
src: '{{ ansible_user_dir }}/.config/openstack/clouds.yaml'
remote_src: true
dest: '/root/.config/openstack/clouds.yaml'
mode: 0600
become: true
rescue:
- name: Copy clouds.yaml file /etc/openstack to /root directory
copy:
src: '/etc/openstack/clouds.yaml'
remote_src: true
dest: '/root/.config/openstack/clouds.yaml'
mode: 0600
become: true
- name: Set network vars
set_fact:
tempest_public_net_physical_type: 'datacentre'
tempest_public_subnet_cidr: '{{ tempest_cidr }}'
tempest_public_subnet_gateway_ip: '{{ tempest_cidr|nthhost(1) }}'
tempest_public_subnet_allocation_pools: '{{ tempest_cidr|nthhost(150) ~ "-" ~ tempest_cidr|nthhost(200) }}'
tempest_private_net_seg_id: "{{ (release in ['queens']) | ternary('', omit) }}"
tempest_network_ping_gateway: true
tempest_private_net_provider_type: "{{ (release in ['queens']) | ternary('vlan', 'geneve') }}"
when: tempest_cidr is defined
- name: Handle migration of br-ex network
block:
- name: Check if standalone parameters exists
stat:
path: "{{ working_dir }}/standalone_parameters.yaml"
register: parameter_file
- name: Read content of standalone parameters file if exists
slurp:
src: "{{ working_dir }}/standalone_parameters.yaml"
register: standalone_parameters
when: parameter_file.stat.exists
- name: Parse contents
set_fact:
standalone_parameters_yaml: "{{ standalone_parameters['content'] | b64decode | from_yaml }}"
when: parameter_file.stat.exists
- name: set tempest facts for br-ex network migration
set_fact:
tempest_public_subnet_cidr: '172.16.1.0/24'
tempest_public_subnet_gateway_ip: '172.16.1.2'
tempest_public_subnet_allocation_pools: '172.16.1.100-172.16.1.150'
when:
- parameter_file.stat.exists
- "'NeutronPhysicalBridge' not in (standalone_parameters_yaml | from_yaml)['parameter_defaults']"
when:
- job.environment_type is defined and job.environment_type == "standalone"
- job.bridge_address_prefix is defined and job.bridge_address_prefix == "172.16.1"
- name: Set tempest workspace related vars
set_fact:
tempest_use_tempestconf: true
tempest_service_setup_host: '{{ inventory_hostname }}'
tempest_workspace: "{{ ansible_user_dir }}/tempest"
stackviz_venv_bin: "{{ ansible_user_dir }}/stackviz_venv/bin"
tempest_test_extra_test: ['keystone_tempest_plugin.tests.api']
- name: set facts while running tempest from source
set_fact:
tempest_git_repo: https://opendev.org/openstack/tempest
tempest_tempestconf_git_repo: https://opendev.org/osf/python-tempestconf
tempest_tempestconf_venv_bin: "{{ ansible_user_dir }}/tempestconf_venv/bin"
tempest_venv_bin: "{{ ansible_user_dir }}/tempest_venv/bin"
when: tempest_install_method == 'source'
- name: set cirros image facts for periodic
vars:
default_cirros_image: /opt/cache/files/cirros-0.5.2-x86_64-disk.img
set_fact:
tempest_tempestconf_profile_extras:
image: "{{ featureset_override['cirros_image'] | default(default_cirros_image) }}"
flavor_min_mem: 128
retry_image: true
# stackviz in venv pulls oslo.db due upstream constraints,
# but it dropped py2 support so on such system we need to skip it
# https://bugs.launchpad.net/tripleo/+bug/1862134
- name: disable stackviz in python2 environment
set_fact:
tempest_run_stackviz: false
when:
- ansible_distribution_major_version is version('8', '<')
- name: Run os_tempest role
vars:
ansible_become: true
debug: true
tempest_run: 'yes'
include_role:
name: os_tempest