Remove legacy testing code

The rally integration is no longer maintained, and isn't used
by the current CI.

Change-Id: I84d507c57e5c4888acb72390388481d62db9f60a
This commit is contained in:
Erik Olof Gunnar Andersson 2021-11-29 11:17:09 -08:00
parent c0883a1f3b
commit cc5f321d2a
7 changed files with 0 additions and 499 deletions

View File

@ -18,9 +18,6 @@
- senlin-dsvm-tempest-py35-api
- senlin-tempest-api-ipv6-only
- senlin-dsvm-tempest-py35-functional
experimental:
jobs:
- rally-dsvm-senlin-senlin
- job:
name: senlin-tempest-base
@ -123,29 +120,3 @@
DEFAULT:
cloud_backend: openstack_test
- job:
name: rally-dsvm-senlin-senlin
parent: senlin-tempest-base
run: playbooks/legacy/rally-dsvm-senlin-senlin/run.yaml
post-run: playbooks/legacy/rally-dsvm-senlin-senlin/post.yaml
required-projects:
- openstack/devstack-gate
- openstack/aodh
- openstack/ceilometer
- openstack/diskimage-builder
- openstack/ironic
- openstack/magnum
- openstack/networking-bgpvpn
- openstack/neutron
- openstack/neutron-vpnaas
- openstack/octavia
- openstack/panko
- openstack/python-magnumclient
- openstack/python-senlinclient
- openstack/python-watcherclient
- openstack/python-zaqarclient
- openstack/rally
- openstack/senlin
- openstack/tripleo-image-elements
- openstack/watcher
- openstack/zaqar-ui

View File

@ -326,14 +326,6 @@ command:
senlin_tempest_plugin.tests.integration.test_nova_server_cluster
Stress Tests
~~~~~~~~~~~~
Stress tests are designed to measure a service's performance under certain
workload pressure. In senlin, the stress tests are written to be executed
using the *Rally* framework.
Writing Stress Test Cases
-------------------------

View File

@ -1,41 +0,0 @@
- 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
- 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=/rally-plot/**
- --include=*/
- --exclude=*
- --prune-empty-dirs
- 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=/rally-plot/extra/index.html
- --include=*/
- --exclude=*
- --prune-empty-dirs

View File

@ -1,173 +0,0 @@
- hosts: all
name: Autoconverted job legacy-rally-dsvm-senlin-senlin from old job gate-rally-dsvm-senlin-senlin-ubuntu-xenial-nv
tasks:
- 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'
environment: '{{ zuul | zuul_legacy_vars }}'
- shell:
cmd: |
set -e
set -x
if [ $ZUUL_PROJECT == "openstack/rally" ] && [ $ZUUL_BRANCH != "master" ]; then
export DEVSTACK_GATE_FEATURE_MATRIX="/opt/stack/new/rally/devstack/features.yaml"
fi
export PROJECTS="openstack/rally $PROJECTS"
export DEVSTACK_GATE_NEUTRON=1
export DEVSTACK_GATE_HORIZON=1
export DEVSTACK_GATE_NEUTRON_EXTENSIONS=0
export DEVSTACK_GATE_IRONIC=0
export DEVSTACK_GATE_ZAQAR=0
export DEVSTACK_GATE_SENLIN=1
export DEVSTACK_GATE_WATCHER=0
export DEVSTACK_GATE_MAGNUM=0
export DEVSTACK_GATE_HEAT=0
export DEVSTACK_GATE_SWIFT=0
export DEVSTACK_GATE_TELEMETRY=0
export DEVSTACK_GATE_TEMPEST_LARGE_OPS=0
export DEVSTACK_GATE_EXERCISES=0
export DEVSTACK_GATE_PREPOPULATE_USERS=0
export DEVSTACK_GATE_USE_PYTHON3=True
export USE_KEYSTONE_V2API=0
export RALLY_SCENARIO=$ZUUL_SHORT_PROJECT_NAME-senlin
if [ $USE_KEYSTONE_V2API -eq 1 ]; then
export IDENTITY_API_VERSION=2.0
else
export IDENTITY_API_VERSION=3
fi
DEVSTACK_LOCAL_CONFIG="enable_plugin rally https://opendev.org/openstack/rally"
DEVSTACK_LOCAL_CONFIG+=$'\n'"CINDER_ENABLE_V1_API=True"
DEVSTACK_LOCAL_CONFIG+=$'\n'"IDENTITY_API_VERSION=$IDENTITY_API_VERSION"
ENABLED_SERVICES=key,horizon,
ENABLED_SERVICES+=cinder,c-api,c-vol,c-sch,c-bak,
ENABLED_SERVICES+=g-api,g-reg,
ENABLED_SERVICES+=n-api,n-crt,n-cpu,n-sch,n-cond,
ENABLED_SERVICES+=neutron-qos,
if [ $DEVSTACK_GATE_SWIFT -eq 1 ];
then
ENABLED_SERVICES+=s-proxy,s-account,s-container,s-object,
else
export DEVSTACK_LOCAL_CONFIG+=$'\n'"disable_service s-account"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"disable_service s-container"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"disable_service s-object"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"disable_service s-proxy"
fi
if [ $DEVSTACK_GATE_HEAT -ne 0 ]; then
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin heat https://opendev.org/openstack/heat"
fi
export PROJECTS="openstack/neutron $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin neutron https://opendev.org/openstack/neutron"
if [ $DEVSTACK_GATE_NEUTRON_EXTENSIONS -ne 0 ]; then
export PROJECTS="openstack/octavia $PROJECTS"
export PROJECTS="openstack/neutron-fwaas $PROJECTS"
export PROJECTS="openstack/diskimage-builder $PROJECTS"
export PROJECTS="openstack/tripleo-image-elements $PROJECTS"
export PROJECTS="openstack/neutron-vpnaas $PROJECTS"
export PROJECTS="openstack/networking-bgpvpn $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin octavia https://opendev.org/openstack/octavia"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin neutron-fwaas https://opendev.org/openstack/neutron-fwaas"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin neutron-vpnaas https://opendev.org/openstack/neutron-vpnaas"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin networking-bgpvpn https://opendev.org/openstack/networking-bgpvpn.git"
export ENABLED_SERVICES+=q-lbaasv2,octavia,o-cw,o-hk,o-hm,o-api,q-fwaas,q-svc,q-agt,q-dhcp,q-l3,q-meta,
fi
if [ $DEVSTACK_GATE_IRONIC -ne 0 ]; then
export PROJECTS="openstack/ironic $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin ironic https://opendev.org/openstack/ironic"
fi
if [ $DEVSTACK_GATE_ZAQAR -ne 0 ]; then
export PROJECTS="openstack/python-zaqarclient $PROJECTS"
export PROJECTS="openstack/zaqar-ui $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin zaqar https://opendev.org/openstack/zaqar"
fi
if [ $DEVSTACK_GATE_SENLIN -ne 0 ]; then
export PROJECTS="openstack/senlin $PROJECTS"
export PROJECTS="openstack/python-senlinclient $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin senlin https://opendev.org/openstack/senlin"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_service sl-api sl-eng"
fi
if [ $DEVSTACK_GATE_WATCHER -ne 0 ]; then
export PROJECTS="openstack/watcher $PROJECTS"
export PROJECTS="openstack/python-watcherclient $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin watcher https://opendev.org/openstack/watcher"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_service watcher-api watcher-decision-engine watcher-applier"
fi
if [ $DEVSTACK_GATE_MAGNUM -ne 0 ]||[ $RALLY_SCENARIO = "magnum" ]; then
export PROJECTS="openstack/magnum $PROJECTS"
export PROJECTS="openstack/python-magnumclient $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin magnum https://opendev.org/openstack/magnum"
fi
if [ $DEVSTACK_GATE_TELEMETRY -ne 0 ]; then
export PROJECTS="openstack/panko $PROJECTS"
export DEVSTACK_LOCAL_CONFIG+=$'\n'"enable_plugin panko https://opendev.org/openstack/panko"
export ENABLED_SERVICES+=panko-api,
export PROJECTS="openstack/ceilometer $PROJECTS"
export PROJECTS="openstack/aodh $PROJECTS"
export PROJECTS="openstack/gnocchi $PROJECTS"
export CEILOMETER_NOTIFICATION_TOPICS=notifications,profiler
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 gnocchi https://opendev.org/openstack/gnocchi"
export ENABLED_SERVICES+=ceilometer-acompute,ceilometer-acentral,ceilometer-api,
export ENABLED_SERVICES+=ceilometer-anotification,ceilometer-collector,
export ENABLED_SERVICES+=aodh-api,aodh-evaluator,aodh-notifier,
fi
export ENABLED_SERVICES
export DEVSTACK_LOCAL_CONFIG
if [[ "$ZUUL_PROJECT" = "openstack/neutron" ]]; then
function gate_hook {
bash -xe $BASE/new/neutron/neutron/tests/contrib/gate_hook.sh rally $ZUUL_SHORT_PROJECT_NAME-senlin
}
export -f gate_hook
fi
function post_test_hook {
$BASE/new/rally/tests/ci/rally-gate.sh
}
export -f post_test_hook
if [[ "$DEVSTACK_GATE_USE_PYTHON3" = "True" ]]; then
# Switch off glance->swift communication as swift fails under py3.x
function pre_test_hook {
local localconf=$BASE/new/devstack/local.conf
echo "[[post-config|\$GLANCE_API_CONF]]" >> $localconf
echo "[glance_store]" >> $localconf
echo "default_store=file" >> $localconf
}
export -f pre_test_hook
fi
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 }}'

View File

@ -1,11 +0,0 @@
This directory contains rally jobs to be run by OpenStack CI.
Structure:
* senlin-senlin.yaml describes rally tasks that will be run in rally-gate.
* plugins - directory containing rally plugins for senlin. These plugins
will be loaded by rally-gate automatically when job is run at gate
side. User can also manually copy those plugins to `~/.rally/plugins`
or `/opt/rally/plugins` to make them work if test is done locally.
Please find more information about rally plugins at the following link:
- https://rally.readthedocs.io/en/latest/plugins/index.html

View File

@ -1,146 +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.
from oslo_config import cfg
from rally import consts
from rally.plugins.openstack import scenario
from rally.plugins.openstack.scenarios.senlin import utils as senlin_utils
from rally.task import atomic
from rally.task import utils
from rally.task import validation
CONF = cfg.CONF
class SenlinPlugin(senlin_utils.SenlinScenario):
"""Base class for Senlin scenarios with basic atomic actions."""
def _get_action(self, action_id):
"""Get action details.
:param action_id: ID of action to get
:returns: object of action
"""
return self.admin_clients("senlin").get_action(action_id)
@atomic.action_timer("senlin.resize_cluster")
def _resize_cluster(self, cluster, adj_type=None, number=None,
min_size=None, max_size=None, min_step=None,
strict=True):
"""Adjust cluster size.
:param cluster: cluster object to resize.
:param adj_type: type of adjustment. If specified, must be one of the
strings defined in `consts.ADJUSTMENT_TYPES`.
:param number: number for adjustment. It is interpreted as the new
desired_capacity of the cluster if `adj_type` is set
to `EXACT_CAPACITY`; it is interpreted as the relative
number of nodes to add/remove when `adj_type` is set
to `CHANGE_IN_CAPACITY`; it is treated as a percentage
when `adj_type` is set to `CHANGE_IN_PERCENTAGE`.
:param min_size: new lower bound of the cluster size, if specified.
:param max_size: new upper bound of the cluster size, if specified.
A value of negative means no upper limit is imposed.
:param min_step: the number of nodes to be added or removed when
`adj_type` is set to value `CHANGE_IN_PERCENTAGE`
and the number calculated is less than 1.
:param strict: whether Senlin should try a best-effort style resizing
or just rejects the request when scaling beyond its
current size constraint.
"""
kwargs = {}
if adj_type:
kwargs['adjustment_type'] = adj_type
if number:
kwargs['number'] = number
if min_size:
kwargs['min_size'] = min_size
if max_size:
kwargs['max_size'] = max_size
if min_step:
kwargs['min_step'] = min_step
kwargs['strict'] = strict
res = self.admin_clients("senlin").cluster_resize(cluster.id, **kwargs)
action = self._get_action(res['action'])
utils.wait_for_status(
action,
ready_statuses=["SUCCEEDED"],
failure_statuses=["FAILED"],
update_resource=self._get_action,
timeout=senlin_utils.CONF.benchmark.senlin_action_timeout)
@atomic.action_timer("senlin.cluster_scale_in")
def _scale_in_cluster(self, cluster, count):
"""Cluster scale in.
:param cluster: cluster object.
:param count: number of nodes to be removed from the cluster.
"""
res = self.admin_clients("senlin").cluster_scale_in(cluster.id, count)
action = self._get_action(res["action"])
utils.wait_for_status(
action,
ready_statuses=["SUCCEEDED"],
failure_statuses=["FAILED"],
update_resource=self._get_action,
timeout=senlin_utils.CONF.benchmark.senlin_action_timeout)
@validation.required_openstack(admin=True)
@validation.required_services(consts.Service.SENLIN)
@validation.required_contexts("profiles")
@scenario.configure(context={"cleanup": ["senlin"]})
def create_resize_delete_cluster(self, create_params,
resize_params, timeout=3600):
"""Create a cluster, resize it and then delete it.
Measure the `senlin cluster-create`, `senlin cluster-resize`
and `senlin cluster-delete` commands performance.
:param create_params: the dictionary provides the parameters for
cluster creation
:param resize_params: the dictionary provides the parameters
for cluster resizing
:param timeout: The timeout value in seconds for each cluster
action, including creation, deletion and resizing
"""
profile_id = self.context["tenant"]["profile"]
cluster = self._create_cluster(profile_id, timeout=timeout,
**create_params)
self._resize_cluster(cluster, **resize_params)
self._delete_cluster(cluster)
@validation.required_openstack(admin=True)
@validation.required_services(consts.Service.SENLIN)
@validation.required_contexts("profiles")
@scenario.configure(context={"cleanup": ["senlin"]})
def create_scale_in_delete_cluster(self, desired_capacity=1,
min_size=0, max_size=-1,
count=1):
"""Create a cluster, scale-in it and then delete it.
Measure the `senlin cluster-create`, `senlin cluster-scale-in`
and `senlin cluster-delete` commands performance.
:param desired_capacity: The capacity or initial number of nodes
owned by the cluster
:param min_size: The minimum number of nodes owned by the cluster
:param max_size: The maximum number of nodes owned by the cluster.
-1 means no limit
:param count: The number of nodes will be removed from the cluster.
"""
profile_id = self.context["tenant"]["profile"]
cluster = self._create_cluster(profile_id, desired_capacity,
min_size, max_size)
self._scale_in_cluster(cluster, count)
self._delete_cluster(cluster)

View File

@ -1,91 +0,0 @@
---
SenlinClusters.create_and_delete_cluster:
-
args:
desired_capacity: 3
min_size: 0
max_size: 5
runner:
type: "constant"
times: 3
concurrency: 2
context:
users:
tenants: 2
users_per_tenant: 2
profiles:
type: os.nova.server
version: "1.0"
properties:
name: cirros_server
flavor: 1
image: "cirros-0.3.5-x86_64-disk"
networks:
- network: public
sla:
failure_rate:
max: 0
SenlinPlugin.create_resize_delete_cluster:
-
args:
create_params:
desired_capacity: 0
min_size: 0
max_size: 1
resize_params:
adj_type: CHANGE_IN_CAPACITY
number: 3
min_size: 0
max_size: 3
strict: false
runner:
type: constant
times: 3
concurrency: 2
context:
users:
tenants: 2
users_per_tenant: 2
profiles:
type: os.nova.server
version: "1.0"
properties:
name: cirros_server
flavor: 1
image: "cirros-0.3.5-x86_64-disk"
networks:
- network: public
sla:
failure_rate:
max: 0
SenlinPlugin.create_scale_in_delete_cluster:
-
args:
desired_capacity: 3
min_size: 0
max_size: 5
count: 3
runner:
type: constant
times: 3
concurrency: 2
context:
users:
tenants: 2
users_per_tenant: 2
profiles:
type: os.nova.server
version: "1.0"
properties:
name: cirros_server
flavor: 1
image: "cirros-0.3.5-x86_64-disk"
networks:
- network: public
sla:
failure_rate:
max: 0