Merge "Migrate functional test jobs to zuul v3"

This commit is contained in:
Zuul 2020-01-07 09:29:55 +00:00 committed by Gerrit Code Review
commit 5e5d97c2b3
14 changed files with 208 additions and 407 deletions

View File

@ -1,26 +1,106 @@
- job:
name: heat-functional-devstack-base
parent: legacy-dsvm-base
name: heat-functional-base
parent: devstack
abstract: true
run: playbooks/devstack/functional/run.yaml
post-run: playbooks/devstack/functional/post.yaml
description: Base heat functional test job
timeout: 7800
roles:
- zuul: opendev.org/openstack/devstack
- zuul: opendev.org/openstack/tempest
required-projects:
- openstack/devstack-gate
- openstack/aodh
- openstack/barbican
- openstack/barbican-tempest-plugin
- openstack/ceilometer
- openstack/devstack-plugin-amqp1
- openstack/heat
- openstack/heat-templates
- openstack/heat-tempest-plugin
- openstack/neutron
- openstack/octavia
- openstack/neutron
- openstack/oslo.messaging
- openstack/python-barbicanclient
- openstack/python-heatclient
- openstack/heat-agents
- openstack/python-zaqarclient
- openstack/zaqar
- openstack/tempest
vars:
gabbi_tempest_path: heat_tempest_plugin.tests.api.gabbits
tempest_plugins:
- heat-tempest-plugin
devstack_localrc:
TEMPEST_PLUGINS: '/opt/stack/heat-tempest-plugin'
HEAT_USE_MOD_WSGI: True
CEILOMETER_PIPELINE_INTERVAL: 60
devstack_services:
tls-proxy: false
s-account: false
s-container: false
s-object: false
s-proxy: false
tempest: true
devstack_plugins:
barbican: https://opendev.org/openstack/barbican
ceilometer: https://opendev.org/openstack/ceilometer
aodh: https://opendev.org/openstack/aodh
zaqar: https://opendev.org/openstack/zaqar
heat: https://opendev.org/openstack/heat
octavia: https://opendev.org/openstack/octavia
devstack_local_conf:
post-config:
$HEAT_CONF:
DEFAULT:
convergence_engine: true
stack_scheduler_hints: true
hidden_stack_tags: hidden
encrypt_parameters_and_properties: True
logging_exception_prefix: "%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s"
enable_stack_adopt: true
enable_stack_abandon: true
heat_api:
workers: 2
heat_api_cfn:
workers: 2
cache:
enabled: True
eventlet_opts:
client_socket_timeout: 120
oslo_messaging_notifications:
driver: messagingv2
test-config:
$TEMPEST_CONFIG:
service_available:
heat: True
heat_plugin:
convergence_engine_enabled: true
minimal_image_ref: ${DEFAULT_IMAGE_NAME:-cirros-0.3.6-x86_64-disk}
instance_type: m1.heat_int
minimal_instance_type: m1.heat_micro
image_ref: Fedora-Cloud-Base-29-1.2.x86_64
hidden_stack_tag: hidden
heat_config_notify_script: /opt/stack/heat-agents/heat-config/bin/heat-config-notify
boot_config_env: /opt/stack/heat-templates/hot/software-config/boot-config/test_image_env.yaml
credential_secret_id: $OS_CREDENTIAL_SECRET_ID
heat_features_enabled:
multi_cloud: True
# disable cinder backup feature
volume-feature-enabled:
backup: False
test_results_stage_name: test_results
zuul_copy_output:
'{{ devstack_base_dir }}/tempest/etc/tempest.conf': logs
'{{ devstack_base_dir }}/tempest/etc/accounts.yaml': logs
'{{ devstack_base_dir }}/tempest/tempest.log': logs
'{{ stage_dir }}/{{ test_results_stage_name }}.subunit': logs
'{{ stage_dir }}/{{ test_results_stage_name }}.html': logs
'{{ stage_dir }}/stackviz': logs
extensions_to_txt:
conf: true
log: true
yaml: true
yml: true
irrelevant-files:
- ^.*\.rst$
- ^api-ref/.*$
@ -28,44 +108,31 @@
- ^heat/locale/.*$
- ^heat/tests/.*$
- ^releasenotes/.*$
vars:
disable_convergence: 'false'
sql: mysql
use_amqp1: 0
use_apache: 1
use_python3: 1
branch_override: default
- job:
name: heat-functional-legacy
parent: heat-functional-devstack-base
vars:
disable_convergence: 'true'
- job:
name: heat-functional
parent: heat-functional-devstack-base
parent: heat-functional-base
- job:
name: heat-functional-amqp1
parent: heat-functional-devstack-base
voting: false
branches: master
name: heat-functional-legacy
parent: heat-functional-base
vars:
use_amqp1: 1
- job:
name: heat-functional-non-apache
parent: heat-functional-devstack-base
voting: false
vars:
use_apache: 0
devstack_local_conf:
post-config:
$HEAT_CONF:
DEFAULT:
convergence_engine: false
test-config:
$TEMPEST_CONFIG:
heat_plugin:
convergence_engine_enabled: false
- job:
name: grenade-heat
parent: legacy-dsvm-base
run: playbooks/devstack/grenade/run.yaml
post-run: playbooks/devstack/functional/post.yaml
post-run: playbooks/devstack/grenade/post.yaml
timeout: 7800
required-projects:
- openstack/grenade
@ -110,8 +177,6 @@
- grenade-heat-multinode
- heat-functional
- heat-functional-legacy
- heat-functional-amqp1
- heat-functional-non-apache
gate:
queue: heat
jobs:

View File

@ -441,15 +441,56 @@ function create_heat_accounts {
# NOTE (gmann): Configure all the Tempest setting for Heat service in
# this function.
function configure_tempest_for_heat {
if is_service_enabled tempest; then
iniset $TEMPEST_CONFIG service_available heat True
# Skip SoftwareConfigIntegrationTest because it requires a custom image
# Skip AutoscalingLoadBalancerTest and AutoscalingLoadBalancerv2Test as deprecated neutron-lbaas service is not enabled
iniset $TEMPEST_CONFIG heat_plugin skip_scenario_test_list 'AutoscalingLoadBalancerTest, AutoscalingLoadBalancerv2Test, SoftwareConfigIntegrationTest'
# Skip LoadBalancerv2Test as deprecated neutron-lbaas service is not enabled
iniset $TEMPEST_CONFIG heat_plugin skip_functional_test_list 'LoadBalancerv2Test, NotificationTest'
openstack flavor show m1.heat_int || openstack flavor create m1.heat_int --ram 512 --disk 4
openstack flavor show m1.heat_micro || openstack flavor create m1.heat_micro --ram 128 --disk 1
source $TOP_DIR/openrc demo demo
openstack network show heat-net || openstack network create heat-net
openstack subnet show heat-subnet || openstack subnet create heat-subnet --network heat-net --subnet-range 10.0.5.0/24
openstack router add subnet router1 heat-subnet
iniset $TEMPEST_CONFIG heat_plugin username $OS_USERNAME
iniset $TEMPEST_CONFIG heat_plugin password $OS_PASSWORD
iniset $TEMPEST_CONFIG heat_plugin project_name $OS_PROJECT_NAME
iniset $TEMPEST_CONFIG heat_plugin auth_url $OS_AUTH_URL
iniset $TEMPEST_CONFIG heat_plugin user_domain_id $OS_USER_DOMAIN_ID
iniset $TEMPEST_CONFIG heat_plugin project_domain_id $OS_PROJECT_DOMAIN_ID
iniset $TEMPEST_CONFIG heat_plugin user_domain_name $OS_USER_DOMAIN_NAME
iniset $TEMPEST_CONFIG heat_plugin project_domain_name $OS_PROJECT_DOMAIN_NAME
iniset $TEMPEST_CONFIG heat_plugin region $OS_REGION_NAME
iniset $TEMPEST_CONFIG heat_plugin auth_version $OS_IDENTITY_API_VERSION
source $TOP_DIR/openrc admin admin
iniset $TEMPEST_CONFIG heat_plugin admin_username $OS_USERNAME
iniset $TEMPEST_CONFIG heat_plugin admin_password $OS_PASSWORD
if [[ -e /etc/ci/mirror_info.sh ]]; then
source /etc/ci/mirror_info.sh
fi
export HEAT_TEST_FEDORA_IMAGE=${NODEPOOL_FEDORA_MIRROR:-https://download.fedoraproject.org/pub/fedora/linux}/releases/29/Cloud/x86_64/images/Fedora-Cloud-Base-29-1.2.x86_64.qcow2
TOKEN=$(openstack token issue -c id -f value)
local image_exists=$( openstack image list | grep "Fedora-Cloud-Base-29-1.2.x86_64" )
if [[ -z $image_exists ]]; then
if is_service_enabled g-reg; then
upload_image $HEAT_TEST_FEDORA_IMAGE $TOKEN
fi
fi
if is_service_enabled tls-proxy; then
iniset $TEMPEST_CONFIG heat_plugin ca_file $SSL_BUNDLE_FILE
fi
# add application credential and secret to support test multi-cloud
app_cred_id=$(openstack application credential show heat_multicloud || openstack application credential create heat_multicloud \
--secret secret --unrestricted -c id -f value)
export OS_CREDENTIAL_SECRET_ID=$(openstack secret store -n heat-multi-cloud-test-cred --payload \
'{"auth_type": "v3applicationcredential", "auth": {"auth_url": $OS_AUTH_URL, "application_credential_id": $app_cred_id, "application_credential_secret": "secret"}}'\
-c "Secret href" -f value)
}
# Restore xtrace
$_XTRACE_HEAT
# Tell emacs to use shell-script-mode
## Local variables:
## mode: shell-script
## End:

View File

@ -18,7 +18,8 @@ if is_heat_enabled; then
elif [[ "$1" == "stack" && "$2" == "test-config" ]]; then
if is_service_enabled tempest; then
setup_develop $TEMPEST_DIR
echo_summary "Configuring Tempest for Heat"
configure_tempest_for_heat
fi
elif [[ "$1" == "stack" && "$2" == "post-config" ]]; then
@ -35,10 +36,6 @@ if is_heat_enabled; then
# Start the heat API and heat taskmgr components
echo_summary "Starting heat"
start_heat
elif [[ "$1" == "stack" && "$2" == "test-config" ]]; then
echo_summary "Configuring Tempest for Heat"
configure_tempest_for_heat
fi
if [[ "$1" == "unstack" ]]; then

View File

@ -14,16 +14,14 @@
import os
import unittest
from heat_integrationtests.common import config
from oslo_log import log as logging
from tempest import config
LOG = logging.getLogger(__name__, project=__name__)
def load_tests(loader, standard_tests, pattern):
logging.setup(config.init_conf(), __name__)
logging.setup(config.CONF, __name__)
suite = unittest.TestSuite()
heat_integration_dir = os.path.dirname(os.path.abspath(__file__))

View File

@ -12,7 +12,7 @@
# License for the specific language governing permissions and limitations
# under the License.
# This script is executed inside post_test_hook function in devstack gate.
# This script is executed in devstack gate.
set -ex

View File

@ -1,147 +0,0 @@
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
import os
from oslo_config import cfg
from oslo_log import log as logging
import heat_integrationtests
_CONF = None
heat_group = cfg.OptGroup(name="heat_plugin",
title="Heat Service Options")
HeatGroup = [
cfg.StrOpt("catalog_type",
default="orchestration",
help="Catalog type of the orchestration service."),
cfg.StrOpt('username',
help="Username to use for non admin API requests."),
cfg.StrOpt('password',
help="Non admin API key to use when authenticating.",
secret=True),
cfg.StrOpt('admin_username',
help="Username to use for admin API requests."),
cfg.StrOpt('admin_password',
help="Admin API key to use when authentication.",
secret=True),
cfg.StrOpt('project_name',
help="Project name to use for API requests.",
deprecated_opts=[cfg.DeprecatedOpt('tenant_name',
group='heat_plugin')]),
cfg.StrOpt('admin_project_name',
default='admin',
help="Admin project name to use for admin API requests.",
deprecated_opts=[cfg.DeprecatedOpt('admin_tenant_name',
group='heat_plugin')]),
cfg.StrOpt('auth_url',
help="Full URI of the OpenStack Identity API (Keystone)."),
cfg.StrOpt('auth_version',
help="OpenStack Identity API version."),
cfg.StrOpt('user_domain_name',
help="User domain name, if keystone v3 auth_url "
"is used"),
cfg.StrOpt('project_domain_name',
help="Project domain name, if keystone v3 auth_url "
"is used"),
cfg.StrOpt('user_domain_id',
help="User domain id, if keystone v3 auth_url "
"is used"),
cfg.StrOpt('project_domain_id',
help="Project domain id, if keystone v3 auth_url "
"is used"),
cfg.StrOpt('region',
help="The region name to use"),
cfg.StrOpt('instance_type',
help="Instance type for tests. Needs to be big enough for a "
"full OS plus the test workload"),
cfg.StrOpt('minimal_instance_type',
help="Instance type enough for simplest cases."),
cfg.StrOpt('image_ref',
help="Name of image to use for tests which boot servers."),
cfg.StrOpt('keypair_name',
help="Name of existing keypair to launch servers with."),
cfg.StrOpt('minimal_image_ref',
help="Name of minimal (e.g cirros) image to use when "
"launching test instances."),
cfg.BoolOpt('disable_ssl_certificate_validation',
default=False,
help="Set to True if using self-signed SSL certificates."),
cfg.StrOpt('ca_file',
help="CA certificate to pass for servers that have "
"https endpoint."),
cfg.IntOpt('build_interval',
default=4,
help="Time in seconds between build status checks."),
cfg.IntOpt('build_timeout',
default=1200,
help="Timeout in seconds to wait for a stack to build."),
cfg.StrOpt('network_for_ssh',
default='heat-net',
help="Network used for SSH connections."),
cfg.StrOpt('fixed_network_name',
default='heat-net',
help="Visible fixed network name "),
cfg.StrOpt('floating_network_name',
default='public',
help="Visible floating network name "),
cfg.StrOpt('fixed_subnet_name',
default='heat-subnet',
help="Visible fixed sub-network name "),
cfg.BoolOpt('skip_functional_tests',
default=False,
help="Skip all functional tests"),
cfg.ListOpt('skip_functional_test_list',
help="List of functional test class or class.method "
"names to skip ex. AutoscalingGroupTest, "
"InstanceGroupBasicTest.test_size_updates_work"),
cfg.ListOpt('skip_test_stack_action_list',
help="List of stack actions in tests to skip "
"ex. ABANDON, ADOPT, SUSPEND, RESUME"),
cfg.BoolOpt('convergence_engine_enabled',
default=True,
help="Test features that are only present for stacks with "
"convergence enabled."),
cfg.IntOpt('connectivity_timeout',
default=120,
help="Timeout in seconds to wait for connectivity to "
"server."),
]
def init_conf(read_conf=True):
global _CONF
if _CONF is not None:
return _CONF
default_config_files = None
if read_conf:
confpath = os.path.join(
os.path.dirname(os.path.realpath(heat_integrationtests.__file__)),
'heat_integrationtests.conf')
if os.path.isfile(confpath):
default_config_files = [confpath]
_CONF = cfg.ConfigOpts()
logging.register_options(_CONF)
_CONF(args=[], project='heat_integrationtests',
default_config_files=default_config_files)
for group, opts in list_opts():
_CONF.register_opts(opts, group=group)
return _CONF
def list_opts():
yield heat_group.name, HeatGroup

View File

@ -23,11 +23,11 @@ from oslo_log import log as logging
from oslo_utils import timeutils
import six
from six.moves import urllib
from tempest import config
import testscenarios
import testtools
from heat_integrationtests.common import clients
from heat_integrationtests.common import config
from heat_integrationtests.common import exceptions
LOG = logging.getLogger(__name__)
@ -71,8 +71,7 @@ def requires_convergence(test_method):
The decorated test will be skipped when convergence is disabled.
'''
convergence_enabled = config.init_conf(
).heat_plugin.convergence_engine_enabled
convergence_enabled = config.CONF.heat_plugin.convergence_engine_enabled
skipper = testtools.skipUnless(convergence_enabled,
"Convergence-only tests are disabled")
return skipper(test_method)
@ -84,7 +83,7 @@ class HeatIntegrationTest(testscenarios.WithScenarios,
def setUp(self):
super(HeatIntegrationTest, self).setUp()
self.conf = config.init_conf().heat_plugin
self.conf = config.CONF.heat_plugin
self.assertIsNotNone(self.conf.auth_url,
'No auth_url configured')

View File

@ -1,27 +0,0 @@
#!/bin/bash
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# This script is executed inside post_test_hook function in devstack gate.
set -ex
export DEST=${DEST:-/opt/stack/new}
export TOP_DIR=${TOP_DIR:-/opt/stack/new/devstack}
sudo -E $DEST/heat/heat_integrationtests/prepare_test_env.sh
sudo -E $DEST/heat/heat_integrationtests/prepare_test_network.sh
cd $DEST/tempest
sudo tox -evenv-tempest -- stestr --test-path=$DEST/heat/heat_integrationtests --top-dir=$DEST/heat --group_regex='heat_tempest_plugin\.tests\.api\.test_heat_api[._]([^_]+)' run
sudo -E $DEST/heat/heat_integrationtests/cleanup_test_env.sh

View File

@ -1,53 +0,0 @@
#!/bin/bash
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may
# not use this file except in compliance with the License. You may obtain
# a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
# License for the specific language governing permissions and limitations
# under the License.
# This script is executed inside pre_test_hook function in devstack gate.
set -x
localconf=$BASE/new/devstack/local.conf
echo -e '[[post-config|$HEAT_CONF]]\n[DEFAULT]\n' >> $localconf
if [ "$DISABLE_CONVERGENCE" == "true" ] ; then
echo -e 'convergence_engine=false\n' >> $localconf
fi
echo -e 'stack_scheduler_hints=true\n' >> $localconf
echo -e 'hidden_stack_tags=hidden\n' >> $localconf
echo -e 'encrypt_parameters_and_properties=True\n' >> $localconf
echo -e 'logging_exception_prefix=%(asctime)s.%(msecs)03d %(process)d TRACE %(name)s %(instance)s\n' >> $localconf
echo -e '[heat_api]\nworkers=2\n' >> $localconf
echo -e '[heat_api_cfn]\nworkers=2\n' >> $localconf
echo -e '[cache]\nenabled=True\n' >> $localconf
echo -e '[eventlet_opts]\nclient_socket_timeout=120\n' >> $localconf
echo -e '[oslo_messaging_notifications]\ndriver=messagingv2\n' >> $localconf
echo "[[local|localrc]]" >> $localconf
# NOTE(mnaser): This will use the region local mirrors to avoid going out
# to network
if [[ -e /etc/ci/mirror_info.sh ]]; then
source /etc/ci/mirror_info.sh
echo "IMAGE_URLS+=${NODEPOOL_FEDORA_MIRROR}/releases/29/Cloud/x86_64/images/Fedora-Cloud-Base-29-1.2.x86_64.qcow2" >> $localconf
else
echo "IMAGE_URLS+=https://download.fedoraproject.org/pub/fedora/linux/releases/29/Cloud/x86_64/images/Fedora-Cloud-Base-29-1.2.x86_64.qcow2" >> $localconf
fi
echo "CEILOMETER_PIPELINE_INTERVAL=60" >> $localconf
echo "HEAT_ENABLE_ADOPT_ABANDON=True" >> $localconf

View File

@ -1,15 +1,19 @@
- hosts: primary
name: Clear test env
tasks:
- name: clear test env
shell:
cmd: |
/opt/stack/heat/heat_integrationtests/cleanup_test_env.sh
executable: /bin/bash
chdir: "{{ zuul.project.src_dir }}"
environment:
DEVSTACK_BASE_DIR: "{{ devstack_base_dir }}"
become: true
- name: Copy files from {{ ansible_user_dir }}/workspace/ on node
synchronize:
src: '{{ ansible_user_dir }}/workspace/'
dest: '{{ zuul.executor.log_root }}'
mode: pull
copy_links: true
verify_host: true
rsync_opts:
- --include=/logs/**
- --include=*/
- --exclude=*
- --prune-empty-dirs
- hosts: tempest
become: true
roles:
- role: fetch-subunit-output
zuul_work_dir: '{{ devstack_base_dir }}/tempest'
- role: process-stackviz

View File

@ -1,116 +1,15 @@
- hosts: all
name: Job for functional tests
tasks:
roles:
- orchestrate-devstack
- name: Ensure legacy workspace directory
file:
path: '{{ ansible_user_dir }}/workspace'
state: directory
- shell:
cmd: |
set -e
set -x
cat > clonemap.yaml << EOF
clonemap:
- name: openstack/devstack-gate
dest: devstack-gate
EOF
/usr/zuul-env/bin/zuul-cloner -m clonemap.yaml --cache-dir /opt/git \
https://opendev.org \
openstack/devstack-gate
executable: /bin/bash
chdir: '{{ ansible_user_dir }}/workspace'
- shell:
cmd: |
set -e
set -x
export PYTHONUNBUFFERED=true
services=rabbit,tempest,mysql,dstat,key
services+=,n-api,n-api-meta,n-cpu,n-cond,n-sch,n-crt
services+=,placement-api,placement-client
services+=,g-api,g-reg
services+=,c-sch,c-api,c-vol,c-bak
services+=,neutron-api,neutron-dhcp,neutron-metadata-agent,neutron-agent,neutron-l3,neutron-trunk
if [ "{{ use_python3 }}" -eq 1 ] ; then
export DEVSTACK_GATE_USE_PYTHON3=True
# Swift does not work so skip s-* for python3x for now
else
export DEVSTACK_GATE_USE_PYTHON3=False
services+=,s-proxy,s-object,s-container,s-account
fi
export DEVSTACK_GATE_NEUTRON=1
export DEVSTACK_GATE_TEMPEST=1
export DEVSTACK_GATE_TEMPEST_NOTESTS=1
export DEVSTACK_GATE_INSTALL_TESTONLY=1
export DEVSTACK_PROJECT_FROM_GIT=python-heatclient
export KEEP_LOCALRC=1
export PROJECTS="openstack/ceilometer $PROJECTS"
export PROJECTS="openstack/aodh $PROJECTS"
export PROJECTS="openstack/zaqar $PROJECTS"
export PROJECTS="openstack/heat-agents $PROJECTS"
export PROJECTS="openstack/python-zaqarclient $PROJECTS"
export PROJECTS="openstack/neutron $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ceilometer https://opendev.org/openstack/ceilometer"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin aodh https://opendev.org/openstack/aodh"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin zaqar https://opendev.org/openstack/zaqar"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin neutron https://opendev.org/openstack/neutron"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin heat https://opendev.org/openstack/heat"
# Enable octavia plugin and services
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin octavia https://opendev.org/openstack/octavia"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"OCTAVIA_AMP_IMAGE_FILE=/tmp/test-only-amphora-x64-haproxy-ubuntu-bionic.qcow2"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"OCTAVIA_AMP_IMAGE_SIZE=3"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"OCTAVIA_AMP_IMAGE_NAME=test-only-amphora-x64-haproxy-ubuntu-bionic"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"OCTAVIA_AMPHORA_DRIVER=amphora_noop_driver"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"OCTAVIA_COMPUTE_DRIVER=compute_noop_driver"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"OCTAVIA_NETWORK_DRIVER=network_noop_driver"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"DISABLE_AMP_IMAGE_BUILD=True"
services+=,octavia,o-cw,o-hk,o-hm,o-api
export PROJECTS="openstack/octavia $PROJECTS"
export PROJECTS="openstack/barbican $PROJECTS"
export PROJECTS="openstack/python-barbicanclient $PROJECTS"
export PROJECTS="openstack/barbican-tempest-plugin $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin barbican https://opendev.org/openstack/barbican"
# use heat-tempest-plugin
export PROJECTS="openstack/heat-tempest-plugin $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"TEMPEST_PLUGINS+=' /opt/stack/new/heat-tempest-plugin'"
export OVERRIDE_ENABLED_SERVICES=$services
if [ "{{ branch_override }}" != "default" ] ; then
export OVERRIDE_ZUUL_BRANCH=$BRANCH_OVERRIDE
fi
if [ "{{ use_apache }}" -eq 0 ] ; then
export DEVSTACK_LOCAL_CONFIG+=$'\n'"HEAT_USE_MOD_WSGI=False"
fi
if [ "{{ use_amqp1 }}" -eq 1 ] ; then
export PROJECTS="openstack/devstack-plugin-amqp1 $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"export AMQP1_SERVICE=qpid-hybrid"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin devstack-plugin-amqp1 https://opendev.org/openstack/devstack-plugin-amqp1"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"export CELLSV2_SETUP=singleconductor"
export DEVSTACK_PROJECT_FROM_GIT="oslo.messaging,$DEVSTACK_PROJECT_FROM_GIT"
fi
export DISABLE_CONVERGENCE="{{ disable_convergence }}"
function pre_test_hook {
cd /opt/stack/new/heat/heat_integrationtests
source ./pre_test_hook.sh
}
export -f pre_test_hook
function post_test_hook {
cd /opt/stack/new/heat/heat_integrationtests
source ./post_test_hook.sh
}
export -f post_test_hook
cp devstack-gate/devstack-vm-gate-wrap.sh ./safe-devstack-vm-gate-wrap.sh
./safe-devstack-vm-gate-wrap.sh
executable: /bin/bash
chdir: '{{ ansible_user_dir }}/workspace'
environment: '{{ zuul | zuul_legacy_vars }}'
- hosts: tempest
environment:
# This enviroment variable is used by the optional tempest-gabbi
# job provided by the gabbi-tempest plugin. It can be safely ignored
# if that plugin is not being used.
GABBI_TEMPEST_PATH: "{{ gabbi_tempest_path | default('') }}"
roles:
- setup-tempest-run-dir
- setup-tempest-data-dir
- acl-devstack-files
- run-heat-tests

View File

@ -0,0 +1,14 @@
- hosts: primary
tasks:
- name: Copy files from {{ ansible_user_dir }}/workspace/ on node
synchronize:
src: '{{ ansible_user_dir }}/workspace/'
dest: '{{ zuul.executor.log_root }}'
mode: pull
copy_links: true
verify_host: true
rsync_opts:
- --include=/logs/**
- --include=*/
- --exclude=*
- --prune-empty-dirs

View File

@ -0,0 +1,2 @@
devstack_base_dir: /opt/stack
tempest_test_timeout: ''

View File

@ -0,0 +1,9 @@
- name: Run heat tests
command: tox -evenv-tempest -- stestr --test-path={{devstack_base_dir}}/heat/heat_integrationtests \
--top-dir={{devstack_base_dir}}/heat \
--group_regex='heat_tempest_plugin\.tests\.api\.test_heat_api[._]([^_]+)' run
args:
chdir: "{{devstack_base_dir}}/tempest"
become: true
become_user: tempest
environment: '{{ {"OS_TEST_TIMEOUT": tempest_test_timeout} if tempest_test_timeout else {} }}'