Add scenarios directory for ci
This directoy contains scenarios to be run by jenkins. Add script which runs specified scenario and plot graph. Add abbility to specify cloud by --name in "rally use deployment" Removed rally/exercises Change-Id: I7803a6950ec5fce3be11277ae0e4d830f0cf6bad Related: blueprint rally-gate-jobs
This commit is contained in:
parent
d04111628b
commit
b0a2a14e47
@ -1,46 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
# **rally.sh**
|
||||
|
||||
echo "*********************************************************************"
|
||||
echo "Begin DevStack Exercise: $0"
|
||||
echo "*********************************************************************"
|
||||
|
||||
# This script exits on an error so that errors don't compound and you see
|
||||
# only the first error that occurred.
|
||||
set -o errexit
|
||||
|
||||
# Print the commands being run so that we can see the command that triggers
|
||||
# an error. It is also useful for following allowing as the install occurs.
|
||||
set -o xtrace
|
||||
|
||||
|
||||
# Settings
|
||||
# ========
|
||||
|
||||
# Keep track of the current directory
|
||||
EXERCISE_DIR=$(cd $(dirname "$0") && pwd)
|
||||
TOP_DIR=$(cd $EXERCISE_DIR/..; pwd)
|
||||
|
||||
# Import common functions
|
||||
source $TOP_DIR/functions
|
||||
|
||||
# Import configuration
|
||||
source $TOP_DIR/openrc
|
||||
|
||||
# Import exercise configuration
|
||||
source $TOP_DIR/exerciserc
|
||||
|
||||
is_service_enabled rally || exit 55
|
||||
|
||||
# Import rally functions
|
||||
source $TOP_DIR/lib/rally
|
||||
|
||||
# Run tests
|
||||
run_all_benchmarks
|
||||
|
||||
set +o xtrace
|
||||
echo "*********************************************************************"
|
||||
echo "SUCCESS: End DevStack Exercise: $0"
|
||||
echo "*********************************************************************"
|
||||
|
@ -123,20 +123,6 @@ function init_rally() {
|
||||
fi
|
||||
}
|
||||
|
||||
# Run benchmarks from samples dir
|
||||
function run_all_benchmarks() {
|
||||
for CONF in $DEST/rally/doc/samples/tasks/*/*.yaml; do
|
||||
case "$CONF" in
|
||||
*large-ops*)
|
||||
echo "Skipping large-ops benchmarks."
|
||||
;;
|
||||
*)
|
||||
rally task start --task $CONF
|
||||
;;
|
||||
esac
|
||||
done
|
||||
}
|
||||
|
||||
# Restore xtrace
|
||||
$XTRACE
|
||||
|
||||
|
18
rally-scenarios/rally.yaml
Normal file
18
rally-scenarios/rally.yaml
Normal file
@ -0,0 +1,18 @@
|
||||
---
|
||||
KeystoneBasic.create_delete_user:
|
||||
-
|
||||
args:
|
||||
name_length: 10
|
||||
runner:
|
||||
type: "constant"
|
||||
times: 10
|
||||
concurrency: 10
|
||||
|
||||
KeystoneBasic.create_and_list_tenants:
|
||||
-
|
||||
args:
|
||||
name_length: 10
|
||||
runner:
|
||||
type: "constant"
|
||||
times: 10
|
||||
concurrency: 10
|
@ -16,7 +16,6 @@
|
||||
""" Rally command: use """
|
||||
|
||||
import os
|
||||
import sys
|
||||
|
||||
from rally.cmd import cliutils
|
||||
from rally import db
|
||||
@ -58,14 +57,34 @@ class UseCommands(object):
|
||||
|
||||
@cliutils.args('--uuid', type=str, dest='deploy_id', required=False,
|
||||
help='UUID of the deployment')
|
||||
def deployment(self, deploy_id):
|
||||
@cliutils.args('--name', type=str, dest='name', required=False,
|
||||
help='Name of the deployment')
|
||||
def deployment(self, deploy_id=None, name=None):
|
||||
"""Set the RALLY_DEPLOYMENT env var to be used by all CLI commands
|
||||
|
||||
:param deploy_id: a UUID of a deployment
|
||||
"""
|
||||
print('Using deployment: %s' % deploy_id)
|
||||
if not (name or deploy_id):
|
||||
print('You should specify --name or --uuid of deployment')
|
||||
return 1
|
||||
|
||||
deploy = None
|
||||
|
||||
if name:
|
||||
deployments = db.deployment_list(name=name)
|
||||
if len(deployments) > 1:
|
||||
print("Multiple deployments found by name: `%s`" % name)
|
||||
return 1
|
||||
elif not deployments:
|
||||
print("There is no `%s` deployment" % name)
|
||||
return 1
|
||||
else:
|
||||
deploy = deployments[0]
|
||||
deploy_id = deploy["uuid"]
|
||||
|
||||
try:
|
||||
deploy = db.deployment_get(deploy_id)
|
||||
deploy = deploy or db.deployment_get(deploy_id)
|
||||
print('Using deployment: %s' % deploy_id)
|
||||
self._ensure_rally_configuration_dir_exists()
|
||||
self._update_attribute_in_global_file('RALLY_DEPLOYMENT',
|
||||
deploy_id)
|
||||
@ -80,7 +99,7 @@ class UseCommands(object):
|
||||
'glance image-list')
|
||||
except exceptions.DeploymentNotFound:
|
||||
print('Deployment %s is not found.' % deploy_id)
|
||||
sys.exit(1)
|
||||
return 1
|
||||
|
||||
@cliutils.args('--uuid', type=str, dest='task_id', required=False,
|
||||
help='UUID of the task')
|
||||
|
@ -204,15 +204,17 @@ def deployment_update(uuid, values):
|
||||
return IMPL.deployment_update(uuid, values)
|
||||
|
||||
|
||||
def deployment_list(status=None, parent_uuid=None):
|
||||
def deployment_list(status=None, parent_uuid=None, name=None):
|
||||
"""Get list of deployments.
|
||||
|
||||
:param status: if None returns any deployments with any status.
|
||||
:param parent_uuid: filter by parent. If None, return only "root"
|
||||
deployments.
|
||||
:param name: Name of deployment
|
||||
:returns: a list of dicts with data on the deployments.
|
||||
"""
|
||||
return IMPL.deployment_list(status=status, parent_uuid=parent_uuid)
|
||||
return IMPL.deployment_list(status=status, parent_uuid=parent_uuid,
|
||||
name=name)
|
||||
|
||||
|
||||
def resource_create(values):
|
||||
|
@ -22,6 +22,7 @@ import sqlalchemy as sa
|
||||
from rally.db.sqlalchemy import models
|
||||
from rally import exceptions
|
||||
from rally.openstack.common.db.sqlalchemy import session as db_session
|
||||
from rally.openstack.common.gettextutils import _
|
||||
|
||||
|
||||
CONF = cfg.CONF
|
||||
@ -209,10 +210,13 @@ class Connection(object):
|
||||
deploy.update(values)
|
||||
return deploy
|
||||
|
||||
def deployment_list(self, status=None, parent_uuid=None):
|
||||
def deployment_list(self, status=None, parent_uuid=None, name=None):
|
||||
query = self.model_query(models.Deployment).\
|
||||
filter_by(parent_uuid=parent_uuid)
|
||||
if status is not None:
|
||||
|
||||
if name:
|
||||
query = query.filter_by(name=name)
|
||||
if status:
|
||||
query = query.filter_by(status=status)
|
||||
return query.all()
|
||||
|
||||
|
@ -18,21 +18,44 @@ import os
|
||||
import uuid
|
||||
|
||||
from rally.cmd.commands import use
|
||||
from rally.cmd import envutils
|
||||
from rally.openstack.common import test
|
||||
|
||||
from rally import exceptions
|
||||
|
||||
MOD = 'rally.cmd.commands.use.'
|
||||
|
||||
|
||||
class UseCommandsTestCase(test.BaseTestCase):
|
||||
def setUp(self):
|
||||
super(UseCommandsTestCase, self).setUp()
|
||||
self.use = use.UseCommands()
|
||||
|
||||
def test_deployment_use_no_args(self):
|
||||
status = self.use.deployment()
|
||||
self.assertEqual(1, status)
|
||||
|
||||
@mock.patch(MOD + 'UseCommands._update_openrc_deployment_file')
|
||||
@mock.patch(MOD + 'UseCommands._update_attribute_in_global_file')
|
||||
@mock.patch(MOD + 'UseCommands._ensure_rally_configuration_dir_exists')
|
||||
@mock.patch(MOD + 'db')
|
||||
def test_deployment_use_by_name(self, m_db, m_ercde, m_uaigf, m_uodf):
|
||||
fake_deployment = {'uuid': 'fake_uuid',
|
||||
'endpoints': 'fake_endpoints'}
|
||||
m_db.deployment_list.return_value = [fake_deployment]
|
||||
m_db.deployment_get.return_value = fake_deployment
|
||||
status = self.use.deployment(name='fake_name')
|
||||
self.assertIsNone(status)
|
||||
m_db.deployment_list.assert_called_once_with(name='fake_name')
|
||||
m_ercde.assert_called_once_with()
|
||||
m_uaigf.assert_called_once_with(envutils.ENV_DEPLOYMENT, 'fake_uuid')
|
||||
m_uodf.assert_called_once_with('fake_uuid', 'fake_endpoints')
|
||||
|
||||
@mock.patch('os.remove')
|
||||
@mock.patch('os.symlink')
|
||||
@mock.patch('rally.cmd.commands.use.db.deployment_get')
|
||||
@mock.patch(MOD + 'db.deployment_get')
|
||||
@mock.patch('os.path.exists')
|
||||
@mock.patch('rally.cmd.commands.use.fileutils.update_env_file')
|
||||
@mock.patch(MOD + 'fileutils.update_env_file')
|
||||
def test_deployment(self, mock_env, mock_path, mock_deployment,
|
||||
mock_symlink, mock_remove):
|
||||
deploy_id = str(uuid.uuid4())
|
||||
@ -60,15 +83,15 @@ class UseCommandsTestCase(test.BaseTestCase):
|
||||
mock_remove.assert_called_once_with(os.path.expanduser(
|
||||
'~/.rally/openrc'))
|
||||
|
||||
@mock.patch('rally.cmd.commands.use.db.deployment_get')
|
||||
@mock.patch(MOD + 'db.deployment_get')
|
||||
def test_deployment_not_found(self, mock_deployment):
|
||||
deploy_id = str(uuid.uuid4())
|
||||
mock_deployment.side_effect = exceptions.DeploymentNotFound(
|
||||
uuid=deploy_id)
|
||||
self.assertRaises(SystemExit, self.use.deployment, deploy_id)
|
||||
self.assertEqual(1, self.use.deployment(deploy_id))
|
||||
|
||||
@mock.patch('rally.cmd.commands.use.fileutils._rewrite_env_file')
|
||||
@mock.patch('rally.cmd.commands.use.db.task_get')
|
||||
@mock.patch(MOD + 'fileutils._rewrite_env_file')
|
||||
@mock.patch(MOD + 'db.task_get')
|
||||
def test_task(self, mock_task, mock_file):
|
||||
task_id = str(uuid.uuid4())
|
||||
mock_task.return_value = True
|
||||
@ -77,7 +100,7 @@ class UseCommandsTestCase(test.BaseTestCase):
|
||||
os.path.expanduser('~/.rally/globals'),
|
||||
['RALLY_TASK=%s\n' % task_id])
|
||||
|
||||
@mock.patch('rally.cmd.commands.use.db.task_get')
|
||||
@mock.patch(MOD + 'db.task_get')
|
||||
def test_task_not_found(self, mock_task):
|
||||
task_id = str(uuid.uuid4())
|
||||
mock_task.side_effect = exceptions.TaskNotFound(uuid=task_id)
|
||||
|
@ -269,14 +269,15 @@ class DeploymentTestCase(test.DBTestCase):
|
||||
self.assertEqual(sorted([deploy_one['uuid'], deploy_two['uuid']]),
|
||||
sorted([deploy['uuid'] for deploy in deploys]))
|
||||
|
||||
def test_deployment_list_with_status(self):
|
||||
def test_deployment_list_with_status_and_name(self):
|
||||
deploy_one = db.deployment_create({})
|
||||
deploy_two = db.deployment_create({
|
||||
'config': {},
|
||||
'status': consts.DeployStatus.DEPLOY_FAILED,
|
||||
})
|
||||
deploy_three = db.deployment_create({'name': 'deployment_name'})
|
||||
deploys = db.deployment_list(status=consts.DeployStatus.DEPLOY_INIT)
|
||||
self.assertEqual(len(deploys), 1)
|
||||
self.assertEqual(len(deploys), 2)
|
||||
self.assertEqual(deploys[0]['uuid'], deploy_one['uuid'])
|
||||
deploys = db.deployment_list(status=consts.DeployStatus.DEPLOY_FAILED)
|
||||
self.assertEqual(len(deploys), 1)
|
||||
@ -284,6 +285,9 @@ class DeploymentTestCase(test.DBTestCase):
|
||||
deploys = db.deployment_list(
|
||||
status=consts.DeployStatus.DEPLOY_FINISHED)
|
||||
self.assertEqual(len(deploys), 0)
|
||||
deploys = db.deployment_list(name='deployment_name')
|
||||
self.assertEqual(deploys[0]['uuid'], deploy_three['uuid'])
|
||||
self.assertEqual(len(deploys), 1)
|
||||
|
||||
def test_deployment_list_parent(self):
|
||||
deploy = db.deployment_create({})
|
||||
|
@ -1,4 +1,4 @@
|
||||
#!/bin/sh
|
||||
#!/bin/sh -ex
|
||||
#
|
||||
# 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
|
||||
@ -12,13 +12,14 @@
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
# This script is executed inside pre_test_hook function in desvstack gate.
|
||||
# This script is executed by post_test_hook function in desvstack gate.
|
||||
|
||||
# Install rally devstack integration
|
||||
PROJECT=`echo $ZUUL_PROJECT | cut -d \/ -f 2`
|
||||
SCENARIO=$BASE/new/$PROJECT/rally-scenarios/${RALLY_SCENARIO}.yaml
|
||||
|
||||
RALLY_BASE=/opt/stack/new/rally
|
||||
DEVSTACK_BASE=/opt/stack/new/devstack
|
||||
cp -r $RALLY_BASE/contrib/devstack/* $DEVSTACK_BASE/
|
||||
|
||||
export ENABLED_SERVICES=rally
|
||||
export RUN_EXERCISES=rally
|
||||
rally use deployment --name devstack
|
||||
rally -dv task start --task $SCENARIO
|
||||
mkdir rally-plot
|
||||
rally task plot2html --out rally-plot/results.html
|
||||
gzip -9 rally-plot/results.html
|
||||
env
|
Loading…
Reference in New Issue
Block a user