9093275886
rally.plugins.openstack -> rally_openstack - rally_openstack.context -> rally_openstack.contexts rally.plugins.workloads -> rally_openstack/workloads rally.consts -> rally_openstack.consts TODO: fix pep8
135 lines
5.3 KiB
Python
135 lines
5.3 KiB
Python
# All Rights Reserved.
|
|
#
|
|
# 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 rally import consts
|
|
from rally_openstack import scenario
|
|
from rally_openstack.scenarios.cinder import utils as cinder_utils
|
|
from rally.task import validation
|
|
|
|
|
|
"""Scenarios for Cinder QoS."""
|
|
|
|
|
|
@validation.add("required_services", services=[consts.Service.CINDER])
|
|
@validation.add("required_platform", platform="openstack", admin=True)
|
|
@scenario.configure(context={"admin_cleanup@openstack": ["cinder"]},
|
|
name="CinderQos.create_and_list_qos", platform="openstack")
|
|
class CreateAndListQos(cinder_utils.CinderBasic):
|
|
def run(self, consumer, write_iops_sec, read_iops_sec):
|
|
"""Create a qos, then list all qos.
|
|
|
|
:param consumer: Consumer behavior
|
|
:param write_iops_sec: random write limitation
|
|
:param read_iops_sec: random read limitation
|
|
"""
|
|
specs = {
|
|
"consumer": consumer,
|
|
"write_iops_sec": write_iops_sec,
|
|
"read_iops_sec": read_iops_sec
|
|
}
|
|
|
|
qos = self.admin_cinder.create_qos(specs)
|
|
|
|
pool_list = self.admin_cinder.list_qos()
|
|
msg = ("Qos not included into list of available qos\n"
|
|
"created qos:{}\n"
|
|
"Pool of qos:{}").format(qos, pool_list)
|
|
self.assertIn(qos, pool_list, err_msg=msg)
|
|
|
|
|
|
@validation.add("required_services", services=[consts.Service.CINDER])
|
|
@validation.add("required_platform", platform="openstack", admin=True)
|
|
@scenario.configure(context={"admin_cleanup@openstack": ["cinder"]},
|
|
name="CinderQos.create_and_get_qos", platform="openstack")
|
|
class CreateAndGetQos(cinder_utils.CinderBasic):
|
|
def run(self, consumer, write_iops_sec, read_iops_sec):
|
|
"""Create a qos, then get details of the qos.
|
|
|
|
:param consumer: Consumer behavior
|
|
:param write_iops_sec: random write limitation
|
|
:param read_iops_sec: random read limitation
|
|
"""
|
|
specs = {
|
|
"consumer": consumer,
|
|
"write_iops_sec": write_iops_sec,
|
|
"read_iops_sec": read_iops_sec
|
|
}
|
|
|
|
qos = self.admin_cinder.create_qos(specs)
|
|
self.admin_cinder.get_qos(qos.id)
|
|
|
|
|
|
@validation.add("required_services", services=[consts.Service.CINDER])
|
|
@validation.add("required_platform", platform="openstack", admin=True)
|
|
@scenario.configure(context={"admin_cleanup@openstack": ["cinder"]},
|
|
name="CinderQos.create_and_set_qos", platform="openstack")
|
|
class CreateAndSetQos(cinder_utils.CinderBasic):
|
|
def run(self, consumer, write_iops_sec, read_iops_sec,
|
|
set_consumer, set_write_iops_sec, set_read_iops_sec):
|
|
"""Create a qos, then Add/Update keys in qos specs.
|
|
|
|
:param consumer: Consumer behavior
|
|
:param write_iops_sec: random write limitation
|
|
:param read_iops_sec: random read limitation
|
|
:param set_consumer: update Consumer behavior
|
|
:param set_write_iops_sec: update random write limitation
|
|
:param set_read_iops_sec: update random read limitation
|
|
"""
|
|
create_specs = {
|
|
"consumer": consumer,
|
|
"write_iops_sec": write_iops_sec,
|
|
"read_iops_sec": read_iops_sec
|
|
}
|
|
set_specs = {
|
|
"consumer": set_consumer,
|
|
"write_iops_sec": set_write_iops_sec,
|
|
"read_iops_sec": set_read_iops_sec
|
|
}
|
|
|
|
qos = self.admin_cinder.create_qos(create_specs)
|
|
self.admin_cinder.set_qos(qos=qos, set_specs_args=set_specs)
|
|
|
|
|
|
@validation.add("required_services", services=[consts.Service.CINDER])
|
|
@validation.add("required_platform", platform="openstack", admin=True)
|
|
@validation.add("required_contexts", contexts=("volume_types"))
|
|
@scenario.configure(
|
|
context={"admin_cleanup@openstack": ["cinder"]},
|
|
name="CinderQos.create_qos_associate_and_disassociate_type",
|
|
platform="openstack")
|
|
class CreateQosAssociateAndDisassociateType(cinder_utils.CinderBasic):
|
|
def run(self, consumer, write_iops_sec, read_iops_sec):
|
|
"""Create a qos, Associate and Disassociate the qos from volume type.
|
|
|
|
:param consumer: Consumer behavior
|
|
:param write_iops_sec: random write limitation
|
|
:param read_iops_sec: random read limitation
|
|
"""
|
|
specs = {
|
|
"consumer": consumer,
|
|
"write_iops_sec": write_iops_sec,
|
|
"read_iops_sec": read_iops_sec
|
|
}
|
|
|
|
qos = self.admin_cinder.create_qos(specs)
|
|
|
|
vt_idx = self.context["iteration"] % len(self.context["volume_types"])
|
|
volume_type = self.context["volume_types"][vt_idx]
|
|
|
|
self.admin_cinder.qos_associate_type(qos_specs=qos,
|
|
volume_type=volume_type["id"])
|
|
|
|
self.admin_cinder.qos_disassociate_type(qos_specs=qos,
|
|
volume_type=volume_type["id"])
|