
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
236 lines
8.9 KiB
YAML
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
|