diff --git a/doc/source/plugins.rst b/doc/source/plugins.rst index 282c2f5797..dd68a42168 100644 --- a/doc/source/plugins.rst +++ b/doc/source/plugins.rst @@ -41,13 +41,14 @@ Inherit a class for your plugin from the base *Scenario* class and implement a s .. code-block:: none - from rally.task.scenarios import base + from rally.task import atomic + from rally.task import scenario - class ScenarioPlugin(base.Scenario): + class ScenarioPlugin(scenario.Scenario): """Sample plugin which lists flavors.""" - @base.atomic_action_timer("list_flavors") + @atomic.action_timer("list_flavors") def _list_flavors(self): """Sample of usage clients - list flavors @@ -55,12 +56,12 @@ Inherit a class for your plugin from the base *Scenario* class and implement a s initialized on scenario instance creation""" self.clients("nova").flavors.list() - @base.atomic_action_timer("list_flavors_as_admin") + @atomic.action_timer("list_flavors_as_admin") def _list_flavors_as_admin(self): """The same with admin clients""" self.admin_clients("nova").flavors.list() - @base.scenario() + @scenario.configure() def list_flavors(self): """List flavors.""" self._list_flavors() diff --git a/rally-jobs/plugins/fake_plugin.py b/rally-jobs/plugins/fake_plugin.py index 2de2e67e7a..2076e9307e 100644 --- a/rally-jobs/plugins/fake_plugin.py +++ b/rally-jobs/plugins/fake_plugin.py @@ -17,24 +17,25 @@ import random import time -from rally.task.scenarios import base +from rally.task import atomic +from rally.task import scenario # This is used to test relative import from test_relative_import import zzz -class FakePlugin(base.Scenario): +class FakePlugin(scenario.Scenario): """Fake plugin with a scenario.""" - @base.atomic_action_timer("test1") + @atomic.action_timer("test1") def _test1(self, factor): time.sleep(random.random() * 0.1) - @base.atomic_action_timer("test2") + @atomic.action_timer("test2") def _test2(self, factor): time.sleep(random.random() * factor) - @base.scenario() + @scenario.configure() def testplugin(self, factor=1): """Fake scenario. diff --git a/rally/cli/commands/info.py b/rally/cli/commands/info.py index 9e491d7c77..56c13a139d 100644 --- a/rally/cli/commands/info.py +++ b/rally/cli/commands/info.py @@ -58,7 +58,7 @@ from rally.deployment import engine from rally.deployment.serverprovider import provider from rally import exceptions from rally import plugins -from rally.task.scenarios import base as scenario_base +from rally.task import scenario from rally.task import sla @@ -117,10 +117,9 @@ class InfoCommands(object): def BenchmarkScenarios(self): """Get information about benchmark scenarios available in Rally.""" def scenarios_filter(scenario_cls): - return any(scenario_base.Scenario.is_scenario(scenario_cls, m) + return any(scenario.Scenario.is_scenario(scenario_cls, m) for m in dir(scenario_cls)) - scenarios = self._get_descriptions(scenario_base.Scenario, - scenarios_filter) + scenarios = self._get_descriptions(scenario.Scenario, scenarios_filter) info = (self._make_header("Rally - Benchmark scenarios") + "\n\n" "Benchmark scenarios are what Rally actually uses to test " @@ -268,7 +267,7 @@ class InfoCommands(object): def _find_substitution(self, query): max_distance = min(3, len(query) / 4) - scenarios = scenario_base.Scenario.list_benchmark_scenarios() + scenarios = scenario.Scenario.list_benchmark_scenarios() scenario_groups = list(set(s.split(".")[0] for s in scenarios)) scenario_methods = list(set(s.split(".")[1] for s in scenarios)) sla_info = [cls.get_name() for cls in sla.SLA.get_all()] @@ -289,8 +288,8 @@ class InfoCommands(object): def _get_scenario_group_info(self, query): try: - scenario_group = scenario_base.Scenario.get_by_name(query) - if not any(scenario_base.Scenario.is_scenario(scenario_group, m) + scenario_group = scenario.Scenario.get_by_name(query) + if not any(scenario.Scenario.is_scenario(scenario_group, m) for m in dir(scenario_group)): return None info = self._make_header("%s (benchmark scenario group)" % @@ -302,8 +301,8 @@ class InfoCommands(object): for scenario_name in scenarios: cls, method_name = scenario_name.split(".") if hasattr(scenario_group, method_name): - scenario = getattr(scenario_group, method_name) - doc = utils.parse_docstring(scenario.__doc__) + scenario_inst = getattr(scenario_group, method_name) + doc = utils.parse_docstring(scenario_inst.__doc__) descr = doc["short_description"] or "" descriptions.append((scenario_name, descr)) info += self._compose_table("Benchmark scenarios", descriptions) @@ -313,22 +312,22 @@ class InfoCommands(object): def _get_scenario_info(self, query): try: - scenario = scenario_base.Scenario.get_scenario_by_name(query) - scenario_group_name = utils.get_method_class(scenario).get_name() + scenario_inst = scenario.Scenario.get_scenario_by_name(query) + scenario_gr_name = utils.get_method_class(scenario_inst).get_name() header = ("%(scenario_group)s.%(scenario_name)s " "(benchmark scenario)" % - {"scenario_group": scenario_group_name, - "scenario_name": scenario.__name__}) + {"scenario_group": scenario_gr_name, + "scenario_name": scenario_inst.__name__}) info = self._make_header(header) info += "\n\n" - doc = utils.parse_docstring(scenario.__doc__) + doc = utils.parse_docstring(scenario_inst.__doc__) if not doc["short_description"]: return None info += doc["short_description"] + "\n\n" if doc["long_description"]: info += doc["long_description"] + "\n\n" if doc["params"]: - args = inspect.getargspec(scenario) + args = inspect.getargspec(scenario_inst) if args.defaults: default_values = dict(zip(args.args[-len(args.defaults):], args.defaults)) diff --git a/rally/plugins/common/scenarios/dummy/dummy.py b/rally/plugins/common/scenarios/dummy/dummy.py index 2f8a0d81f1..2d6df9672b 100644 --- a/rally/plugins/common/scenarios/dummy/dummy.py +++ b/rally/plugins/common/scenarios/dummy/dummy.py @@ -15,7 +15,8 @@ import time from rally.common.i18n import _ from rally import exceptions -from rally.task.scenarios import base +from rally.task import atomic +from rally.task import scenario from rally.task import validation @@ -23,10 +24,10 @@ class DummyScenarioException(exceptions.RallyException): msg_fmt = _("Dummy scenario expected exception: '%(message)s'") -class Dummy(base.Scenario): +class Dummy(scenario.Scenario): """Dummy benchmarks for testing Rally benchmark engine at scale.""" - @base.scenario() + @scenario.configure() def dummy(self, sleep=0): """Do nothing and sleep for the given number of seconds (0 by default). @@ -41,7 +42,7 @@ class Dummy(base.Scenario): @validation.number("size_of_message", minval=1, integer_only=True, nullable=True) - @base.scenario() + @scenario.configure() def dummy_exception(self, size_of_message=1, sleep=0): """Throw an exception. @@ -60,7 +61,7 @@ class Dummy(base.Scenario): @validation.number("exception_probability", minval=0, maxval=1, integer_only=False, nullable=True) - @base.scenario() + @scenario.configure() def dummy_exception_probability(self, exception_probability=0.5): """Throw an exception with given probability. @@ -79,7 +80,7 @@ class Dummy(base.Scenario): % exception_probability ) - @base.scenario() + @scenario.configure() def dummy_with_scenario_output(self): """Return a dummy scenario output. @@ -93,7 +94,7 @@ class Dummy(base.Scenario): err = "" return {"data": out, "errors": err} - @base.atomic_action_timer("dummy_fail_test") + @atomic.action_timer("dummy_fail_test") def _random_fail_emitter(self, exception_probability): """Throw an exception with given probability. @@ -102,7 +103,7 @@ class Dummy(base.Scenario): if random.random() < exception_probability: raise KeyError("Dummy test exception") - @base.scenario() + @scenario.configure() def dummy_random_fail_in_atomic(self, exception_probability=0.5): """Randomly throw exceptions in atomic actions. diff --git a/rally/plugins/common/scenarios/requests/http_requests.py b/rally/plugins/common/scenarios/requests/http_requests.py index 50591eeb94..6fa71f079a 100644 --- a/rally/plugins/common/scenarios/requests/http_requests.py +++ b/rally/plugins/common/scenarios/requests/http_requests.py @@ -13,13 +13,13 @@ import random from rally.plugins.common.scenarios.requests import utils -from rally.task.scenarios import base +from rally.task import scenario class HttpRequests(utils.RequestScenario): """Benchmark scenarios for HTTP requests.""" - @base.scenario() + @scenario.configure() def check_request(self, url, method, status_code, **kwargs): """Standard way to benchmark web services. @@ -34,7 +34,7 @@ class HttpRequests(utils.RequestScenario): self._check_request(url, method, status_code, **kwargs) - @base.scenario() + @scenario.configure() def check_random_request(self, requests, status_code): """Benchmark the list of requests diff --git a/rally/plugins/common/scenarios/requests/utils.py b/rally/plugins/common/scenarios/requests/utils.py index 560d0c3afa..6f032a470c 100644 --- a/rally/plugins/common/scenarios/requests/utils.py +++ b/rally/plugins/common/scenarios/requests/utils.py @@ -13,13 +13,14 @@ import requests from rally.common.i18n import _ -from rally.task.scenarios import base +from rally.task import atomic +from rally.task import scenario -class RequestScenario(base.Scenario): +class RequestScenario(scenario.Scenario): """Base class for Request scenarios with basic atomic actions.""" - @base.atomic_action_timer("requests.check_request") + @atomic.action_timer("requests.check_request") def _check_request(self, url, method, status_code, **kwargs): """Compare request status code with specified code diff --git a/rally/plugins/openstack/context/cinder/volumes.py b/rally/plugins/openstack/context/cinder/volumes.py index a15847abd3..6433abe121 100644 --- a/rally/plugins/openstack/context/cinder/volumes.py +++ b/rally/plugins/openstack/context/cinder/volumes.py @@ -19,7 +19,7 @@ from rally import consts from rally.plugins.openstack.context.cleanup import manager as resource_manager from rally.plugins.openstack.scenarios.cinder import utils as cinder_utils from rally.task import context -from rally.task.scenarios import base as scenario_base +from rally.task import scenario LOG = logging.getLogger(__name__) @@ -60,7 +60,7 @@ class VolumeGenerator(context.Context): self.context["tenants"][tenant_id].setdefault("volumes", []) cinder_util = cinder_utils.CinderScenario({"user": user}) for i in range(volumes_per_tenant): - rnd_name = scenario_base.Scenario._generate_random_name( + rnd_name = scenario.Scenario._generate_random_name( prefix="ctx_rally_volume_") vol = cinder_util._create_volume(size, display_name=rnd_name) self.context["tenants"][tenant_id]["volumes"].append(vol._info) diff --git a/rally/plugins/openstack/scenario.py b/rally/plugins/openstack/scenario.py index d781370cf7..f53eb86c07 100644 --- a/rally/plugins/openstack/scenario.py +++ b/rally/plugins/openstack/scenario.py @@ -14,10 +14,14 @@ # under the License. from rally import osclients -from rally.task.scenarios import base +from rally.task import scenario + +# NOTE(boris-42): Shortcut to remove import of both rally.task.scenario and +# rally.plugins.openstack.scenario +configure = scenario.configure -class OpenStackScenario(base.Scenario): +class OpenStackScenario(scenario.Scenario): """Base class for all OpenStack scenarios.""" def __init__(self, context=None, admin_clients=None, clients=None): diff --git a/rally/plugins/openstack/scenarios/authenticate/authenticate.py b/rally/plugins/openstack/scenarios/authenticate/authenticate.py index a8b2851553..a556730457 100644 --- a/rally/plugins/openstack/scenarios/authenticate/authenticate.py +++ b/rally/plugins/openstack/scenarios/authenticate/authenticate.py @@ -13,7 +13,7 @@ # under the License. from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import validation @@ -25,14 +25,14 @@ class Authenticate(scenario.OpenStackScenario): """ @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def keystone(self): """Check Keystone Client.""" self.clients("keystone") @validation.number("repetitions", minval=1) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def validate_glance(self, repetitions): """Check Glance Client to ensure validation of token. @@ -45,12 +45,12 @@ class Authenticate(scenario.OpenStackScenario): glance_client = self.clients("glance") image_name = "__intentionally_non_existent_image___" for i in range(repetitions): - with base.AtomicAction(self, "authenticate.validate_glance"): + with atomic.ActionTimer(self, "authenticate.validate_glance"): list(glance_client.images.list(name=image_name)) @validation.number("repetitions", minval=1) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def validate_nova(self, repetitions): """Check Nova Client to ensure validation of token. @@ -61,12 +61,12 @@ class Authenticate(scenario.OpenStackScenario): """ nova_client = self.clients("nova") for i in range(repetitions): - with base.AtomicAction(self, "authenticate.validate_nova"): + with atomic.ActionTimer(self, "authenticate.validate_nova"): nova_client.flavors.list() @validation.number("repetitions", minval=1) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def validate_cinder(self, repetitions): """Check Cinder Client to ensure validation of token. @@ -77,12 +77,12 @@ class Authenticate(scenario.OpenStackScenario): """ cinder_client = self.clients("cinder") for i in range(repetitions): - with base.AtomicAction(self, "authenticate.validate_cinder"): + with atomic.ActionTimer(self, "authenticate.validate_cinder"): cinder_client.volume_types.list() @validation.number("repetitions", minval=1) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def validate_neutron(self, repetitions): """Check Neutron Client to ensure validation of token. @@ -93,12 +93,12 @@ class Authenticate(scenario.OpenStackScenario): """ neutron_client = self.clients("neutron") for i in range(repetitions): - with base.AtomicAction(self, "authenticate.validate_neutron"): + with atomic.ActionTimer(self, "authenticate.validate_neutron"): neutron_client.list_networks() @validation.number("repetitions", minval=1) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def validate_heat(self, repetitions): """Check Heat Client to ensure validation of token. @@ -109,5 +109,5 @@ class Authenticate(scenario.OpenStackScenario): """ heat_client = self.clients("heat") for i in range(repetitions): - with base.AtomicAction(self, "authenticate.validate_heat"): + with atomic.ActionTimer(self, "authenticate.validate_heat"): list(heat_client.stacks.list(limit=0)) diff --git a/rally/plugins/openstack/scenarios/ceilometer/alarms.py b/rally/plugins/openstack/scenarios/ceilometer/alarms.py index ea0c40789a..8c26a3285a 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/alarms.py +++ b/rally/plugins/openstack/scenarios/ceilometer/alarms.py @@ -13,8 +13,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils as ceiloutils -from rally.task.scenarios import base from rally.task import validation @@ -23,7 +23,7 @@ class CeilometerAlarms(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_alarm(self, meter_name, threshold, **kwargs): """Create an alarm. @@ -40,7 +40,7 @@ class CeilometerAlarms(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def list_alarms(self): """Fetch all alarms. @@ -50,7 +50,7 @@ class CeilometerAlarms(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_and_list_alarm(self, meter_name, threshold, **kwargs): """Create and get the newly created alarm. @@ -70,7 +70,7 @@ class CeilometerAlarms(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_and_update_alarm(self, meter_name, threshold, **kwargs): """Create and update the newly created alarm. @@ -90,7 +90,7 @@ class CeilometerAlarms(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_and_delete_alarm(self, meter_name, threshold, **kwargs): """Create and delete the newly created alarm. @@ -109,7 +109,7 @@ class CeilometerAlarms(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_alarm_and_get_history(self, meter_name, threshold, state, timeout=60, **kwargs): """Create an alarm, get and set the state and get the alarm history. diff --git a/rally/plugins/openstack/scenarios/ceilometer/events.py b/rally/plugins/openstack/scenarios/ceilometer/events.py index 341f4533f5..ed75068882 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/events.py +++ b/rally/plugins/openstack/scenarios/ceilometer/events.py @@ -13,9 +13,9 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils as cutils from rally.plugins.openstack.scenarios.keystone import utils as kutils -from rally.task.scenarios import base from rally.task import validation @@ -29,8 +29,8 @@ class CeilometerEvents(cutils.CeilometerScenario, kutils.KeystoneScenario): @validation.required_services(consts.Service.CEILOMETER, consts.Service.KEYSTONE) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"], - "cleanup": ["ceilometer"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"], + "cleanup": ["ceilometer"]}) def create_user_and_list_events(self): """Fetch all events. @@ -43,8 +43,8 @@ class CeilometerEvents(cutils.CeilometerScenario, kutils.KeystoneScenario): @validation.required_services(consts.Service.CEILOMETER, consts.Service.KEYSTONE) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"], - "cleanup": ["ceilometer"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"], + "cleanup": ["ceilometer"]}) def create_user_and_list_event_types(self): """Fetch all event types. @@ -57,8 +57,8 @@ class CeilometerEvents(cutils.CeilometerScenario, kutils.KeystoneScenario): @validation.required_services(consts.Service.CEILOMETER, consts.Service.KEYSTONE) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"], - "cleanup": ["ceilometer"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"], + "cleanup": ["ceilometer"]}) def create_user_and_get_event(self): """Get event. diff --git a/rally/plugins/openstack/scenarios/ceilometer/meters.py b/rally/plugins/openstack/scenarios/ceilometer/meters.py index 236fb38bbc..9fc440fd74 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/meters.py +++ b/rally/plugins/openstack/scenarios/ceilometer/meters.py @@ -13,8 +13,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils as ceiloutils -from rally.task.scenarios import base from rally.task import validation @@ -23,7 +23,7 @@ class CeilometerMeters(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def list_meters(self): """Fetch user's meters.""" self._list_meters() diff --git a/rally/plugins/openstack/scenarios/ceilometer/queries.py b/rally/plugins/openstack/scenarios/ceilometer/queries.py index 8a67d87e8b..e5afcc2f53 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/queries.py +++ b/rally/plugins/openstack/scenarios/ceilometer/queries.py @@ -15,8 +15,8 @@ import json from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils as ceiloutils -from rally.task.scenarios import base from rally.task import validation @@ -25,7 +25,7 @@ class CeilometerQueries(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_and_query_alarms(self, meter_name, threshold, filter=None, orderby=None, limit=None, **kwargs): """Create an alarm and then query it with specific parameters. @@ -48,7 +48,7 @@ class CeilometerQueries(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_and_query_alarm_history(self, meter_name, threshold, orderby=None, limit=None, **kwargs): """Create an alarm and then query for its history. @@ -69,7 +69,7 @@ class CeilometerQueries(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_and_query_samples(self, counter_name, counter_type, counter_unit, counter_volume, resource_id, filter=None, orderby=None, limit=None, diff --git a/rally/plugins/openstack/scenarios/ceilometer/resources.py b/rally/plugins/openstack/scenarios/ceilometer/resources.py index 8046e14999..a635745fd1 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/resources.py +++ b/rally/plugins/openstack/scenarios/ceilometer/resources.py @@ -14,8 +14,8 @@ from rally import consts from rally import exceptions +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils as ceiloutils -from rally.task.scenarios import base from rally.task import validation @@ -24,7 +24,7 @@ class CeilometerResource(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def list_resources(self): """Fetch all resources. @@ -34,7 +34,7 @@ class CeilometerResource(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def get_tenant_resources(self): """Get all tenant resources. diff --git a/rally/plugins/openstack/scenarios/ceilometer/samples.py b/rally/plugins/openstack/scenarios/ceilometer/samples.py index b7c8fafdd9..ed41c54359 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/samples.py +++ b/rally/plugins/openstack/scenarios/ceilometer/samples.py @@ -13,8 +13,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils as ceiloutils -from rally.task.scenarios import base from rally.task import validation @@ -23,7 +23,7 @@ class CeilometerSamples(ceiloutils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def list_samples(self): """Fetch all samples. diff --git a/rally/plugins/openstack/scenarios/ceilometer/stats.py b/rally/plugins/openstack/scenarios/ceilometer/stats.py index 5273509d07..24a7b8411d 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/stats.py +++ b/rally/plugins/openstack/scenarios/ceilometer/stats.py @@ -13,8 +13,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils -from rally.task.scenarios import base from rally.task import validation @@ -23,7 +23,7 @@ class CeilometerStats(utils.CeilometerScenario): @validation.required_services(consts.Service.CEILOMETER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ceilometer"]}) + @scenario.configure(context={"cleanup": ["ceilometer"]}) def create_meter_and_get_stats(self, **kwargs): """Create a meter and fetch its statistics. diff --git a/rally/plugins/openstack/scenarios/ceilometer/traits.py b/rally/plugins/openstack/scenarios/ceilometer/traits.py index bb5fa7e0e3..7f69486316 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/traits.py +++ b/rally/plugins/openstack/scenarios/ceilometer/traits.py @@ -13,9 +13,9 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ceilometer import utils as cutils from rally.plugins.openstack.scenarios.keystone import utils as kutils -from rally.task.scenarios import base from rally.task import validation @@ -29,8 +29,8 @@ class CeilometerTraits(cutils.CeilometerScenario, kutils.KeystoneScenario): @validation.required_services(consts.Service.CEILOMETER, consts.Service.KEYSTONE) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"], - "cleanup": ["ceilometer"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"], + "cleanup": ["ceilometer"]}) def create_user_and_list_traits(self): """Fetch all events traits. @@ -47,8 +47,8 @@ class CeilometerTraits(cutils.CeilometerScenario, kutils.KeystoneScenario): @validation.required_services(consts.Service.CEILOMETER, consts.Service.KEYSTONE) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"], - "cleanup": ["ceilometer"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"], + "cleanup": ["ceilometer"]}) def create_user_and_list_trait_descriptions(self): """Fetch all trait descriptions. diff --git a/rally/plugins/openstack/scenarios/ceilometer/utils.py b/rally/plugins/openstack/scenarios/ceilometer/utils.py index e2babd6cad..d3fb4d0545 100644 --- a/rally/plugins/openstack/scenarios/ceilometer/utils.py +++ b/rally/plugins/openstack/scenarios/ceilometer/utils.py @@ -13,7 +13,7 @@ # under the License. from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils as bench_utils @@ -36,7 +36,7 @@ class CeilometerScenario(scenario.OpenStackScenario): alarm.update(kwargs) return alarm - @base.atomic_action_timer("ceilometer.list_alarms") + @atomic.action_timer("ceilometer.list_alarms") def _list_alarms(self, alarm_id=None): """List alarms. @@ -51,7 +51,7 @@ class CeilometerScenario(scenario.OpenStackScenario): else: return self.clients("ceilometer").alarms.list() - @base.atomic_action_timer("ceilometer.create_alarm") + @atomic.action_timer("ceilometer.create_alarm") def _create_alarm(self, meter_name, threshold, kwargs): """Create an alarm. @@ -66,7 +66,7 @@ class CeilometerScenario(scenario.OpenStackScenario): alarm = self.clients("ceilometer").alarms.create(**alarm_dict) return alarm - @base.atomic_action_timer("ceilometer.delete_alarm") + @atomic.action_timer("ceilometer.delete_alarm") def _delete_alarm(self, alarm_id): """Delete an alarm. @@ -74,7 +74,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ self.clients("ceilometer").alarms.delete(alarm_id) - @base.atomic_action_timer("ceilometer.update_alarm") + @atomic.action_timer("ceilometer.update_alarm") def _update_alarm(self, alarm_id, alarm_dict_delta): """Update an alarm. @@ -83,7 +83,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ self.clients("ceilometer").alarms.update(alarm_id, **alarm_dict_delta) - @base.atomic_action_timer("ceilometer.get_alarm_history") + @atomic.action_timer("ceilometer.get_alarm_history") def _get_alarm_history(self, alarm_id): """Assemble the alarm history requested. @@ -92,7 +92,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.clients("ceilometer").alarms.get_history(alarm_id) - @base.atomic_action_timer("ceilometer.get_alarm_state") + @atomic.action_timer("ceilometer.get_alarm_state") def _get_alarm_state(self, alarm_id): """Get the state of the alarm. @@ -101,7 +101,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.clients("ceilometer").alarms.get_state(alarm_id) - @base.atomic_action_timer("ceilometer.set_alarm_state") + @atomic.action_timer("ceilometer.set_alarm_state") def _set_alarm_state(self, alarm, state, timeout): """Set the state of the alarm. @@ -118,7 +118,7 @@ class CeilometerScenario(scenario.OpenStackScenario): .get_from_manager(), timeout=timeout, check_interval=1) - @base.atomic_action_timer("ceilometer.list_events") + @atomic.action_timer("ceilometer.list_events") def _list_events(self): """Get list of user's events. @@ -127,7 +127,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.admin_clients("ceilometer").events.list() - @base.atomic_action_timer("ceilometer.get_event") + @atomic.action_timer("ceilometer.get_event") def _get_event(self, event_id): """Get event with specific id. @@ -138,7 +138,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.admin_clients("ceilometer").events.get(event_id) - @base.atomic_action_timer("ceilometer.list_event_types") + @atomic.action_timer("ceilometer.list_event_types") def _list_event_types(self): """Get list of all event types. @@ -146,7 +146,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.admin_clients("ceilometer").event_types.list() - @base.atomic_action_timer("ceilometer.list_event_traits") + @atomic.action_timer("ceilometer.list_event_traits") def _list_event_traits(self, event_type, trait_name): """Get list of event traits. @@ -157,7 +157,7 @@ class CeilometerScenario(scenario.OpenStackScenario): return self.admin_clients("ceilometer").traits.list(event_type, trait_name) - @base.atomic_action_timer("ceilometer.list_event_trait_descriptions") + @atomic.action_timer("ceilometer.list_event_trait_descriptions") def _list_event_trait_descriptions(self, event_type): """Get list of event trait descriptions. @@ -167,12 +167,12 @@ class CeilometerScenario(scenario.OpenStackScenario): return self.admin_clients("ceilometer").trait_descriptions.list( event_type) - @base.atomic_action_timer("ceilometer.list_meters") + @atomic.action_timer("ceilometer.list_meters") def _list_meters(self): """Get list of user's meters.""" return self.clients("ceilometer").meters.list() - @base.atomic_action_timer("ceilometer.list_resources") + @atomic.action_timer("ceilometer.list_resources") def _list_resources(self): """List all resources. @@ -180,7 +180,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.clients("ceilometer").resources.list() - @base.atomic_action_timer("ceilometer.list_samples") + @atomic.action_timer("ceilometer.list_samples") def _list_samples(self): """List all Samples. @@ -188,12 +188,12 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.clients("ceilometer").samples.list() - @base.atomic_action_timer("ceilometer.get_resource") + @atomic.action_timer("ceilometer.get_resource") def _get_resource(self, resource_id): """Retrieve details about one resource.""" return self.clients("ceilometer").resources.get(resource_id) - @base.atomic_action_timer("ceilometer.get_stats") + @atomic.action_timer("ceilometer.get_stats") def _get_stats(self, meter_name): """Get stats for a specific meter. @@ -201,7 +201,7 @@ class CeilometerScenario(scenario.OpenStackScenario): """ return self.clients("ceilometer").statistics.list(meter_name) - @base.atomic_action_timer("ceilometer.create_meter") + @atomic.action_timer("ceilometer.create_meter") def _create_meter(self, **kwargs): """Create a new meter. @@ -214,7 +214,7 @@ class CeilometerScenario(scenario.OpenStackScenario): counter_name=name, **kwargs) return samples[0] - @base.atomic_action_timer("ceilometer.query_alarms") + @atomic.action_timer("ceilometer.query_alarms") def _query_alarms(self, filter, orderby, limit): """Query alarms with specific parameters. @@ -229,7 +229,7 @@ class CeilometerScenario(scenario.OpenStackScenario): return self.clients("ceilometer").query_alarms.query( filter, orderby, limit) - @base.atomic_action_timer("ceilometer.query_alarm_history") + @atomic.action_timer("ceilometer.query_alarm_history") def _query_alarm_history(self, filter, orderby, limit): """Query history of an alarm. @@ -244,7 +244,7 @@ class CeilometerScenario(scenario.OpenStackScenario): return self.clients("ceilometer").query_alarm_history.query( filter, orderby, limit) - @base.atomic_action_timer("ceilometer.create_sample") + @atomic.action_timer("ceilometer.create_sample") def _create_sample(self, counter_name, counter_type, counter_unit, counter_volume, resource_id=None, **kwargs): """Create a Sample with specified parameters. @@ -266,7 +266,7 @@ class CeilometerScenario(scenario.OpenStackScenario): prefix="rally_resource_")}) return self.clients("ceilometer").samples.create(**kwargs) - @base.atomic_action_timer("ceilometer.query_samples") + @atomic.action_timer("ceilometer.query_samples") def _query_samples(self, filter, orderby, limit): """Query samples with specified parameters. diff --git a/rally/plugins/openstack/scenarios/cinder/utils.py b/rally/plugins/openstack/scenarios/cinder/utils.py index 4f33fddb29..c1cbd8cae3 100644 --- a/rally/plugins/openstack/scenarios/cinder/utils.py +++ b/rally/plugins/openstack/scenarios/cinder/utils.py @@ -20,7 +20,7 @@ from oslo_config import cfg from rally import exceptions from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils as bench_utils CINDER_BENCHMARK_OPTS = [ @@ -54,13 +54,13 @@ class CinderScenario(scenario.OpenStackScenario): RESOURCE_NAME_PREFIX = "rally_volume_" - @base.atomic_action_timer("cinder.list_volumes") + @atomic.action_timer("cinder.list_volumes") def _list_volumes(self, detailed=True): """Returns user volumes list.""" return self.clients("cinder").volumes.list(detailed) - @base.atomic_action_timer("cinder.list_snapshots") + @atomic.action_timer("cinder.list_snapshots") def _list_snapshots(self, detailed=True): """Returns user snapshots list.""" @@ -75,7 +75,7 @@ class CinderScenario(scenario.OpenStackScenario): :returns: A list of keys that were set """ key = "cinder.set_%s_metadatas_%s_times" % (set_size, sets) - with base.AtomicAction(self, key): + with atomic.ActionTimer(self, key): keys = [] for i in range(sets): metadata = {} @@ -110,12 +110,12 @@ class CinderScenario(scenario.OpenStackScenario): random.shuffle(keys) action_name = "cinder.delete_%s_metadatas_%s_times" % (delete_size, deletes) - with base.AtomicAction(self, action_name): + with atomic.ActionTimer(self, action_name): for i in range(deletes): to_del = keys[i * delete_size:(i + 1) * delete_size] self.clients("cinder").volumes.delete_metadata(volume, to_del) - @base.atomic_action_timer("cinder.create_volume") + @atomic.action_timer("cinder.create_volume") def _create_volume(self, size, **kwargs): """Create one volume. @@ -148,7 +148,7 @@ class CinderScenario(scenario.OpenStackScenario): ) return volume - @base.atomic_action_timer("cinder.delete_volume") + @atomic.action_timer("cinder.delete_volume") def _delete_volume(self, volume): """Delete the given volume. @@ -164,7 +164,7 @@ class CinderScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.cinder_volume_delete_poll_interval ) - @base.atomic_action_timer("cinder.extend_volume") + @atomic.action_timer("cinder.extend_volume") def _extend_volume(self, volume, new_size): """Extend the given volume. @@ -190,7 +190,7 @@ class CinderScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.cinder_volume_create_poll_interval ) - @base.atomic_action_timer("cinder.upload_volume_to_image") + @atomic.action_timer("cinder.upload_volume_to_image") def _upload_volume_to_image(self, volume, force=False, container_format="bare", disk_format="raw"): """Upload the given volume to image. @@ -230,7 +230,7 @@ class CinderScenario(scenario.OpenStackScenario): return image - @base.atomic_action_timer("cinder.create_snapshot") + @atomic.action_timer("cinder.create_snapshot") def _create_snapshot(self, volume_id, force=False, **kwargs): """Create one snapshot. @@ -258,7 +258,7 @@ class CinderScenario(scenario.OpenStackScenario): ) return snapshot - @base.atomic_action_timer("cinder.delete_snapshot") + @atomic.action_timer("cinder.delete_snapshot") def _delete_snapshot(self, snapshot): """Delete the given snapshot. @@ -274,7 +274,7 @@ class CinderScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.cinder_volume_delete_poll_interval ) - @base.atomic_action_timer("cinder.create_backup") + @atomic.action_timer("cinder.create_backup") def _create_backup(self, volume_id, **kwargs): """Create a volume backup of the given volume. @@ -290,7 +290,7 @@ class CinderScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.cinder_volume_create_poll_interval ) - @base.atomic_action_timer("cinder.delete_backup") + @atomic.action_timer("cinder.delete_backup") def _delete_backup(self, backup): """Delete the given backup. @@ -306,7 +306,7 @@ class CinderScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.cinder_volume_delete_poll_interval ) - @base.atomic_action_timer("cinder.restore_backup") + @atomic.action_timer("cinder.restore_backup") def _restore_backup(self, backup_id, volume_id=None): """Restore the given backup. @@ -323,7 +323,7 @@ class CinderScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.cinder_volume_create_poll_interval ) - @base.atomic_action_timer("cinder.list_backups") + @atomic.action_timer("cinder.list_backups") def _list_backups(self, detailed=True): """Return user volume backups list. diff --git a/rally/plugins/openstack/scenarios/cinder/volumes.py b/rally/plugins/openstack/scenarios/cinder/volumes.py index 5a76ef4a75..4b7f70f0f0 100644 --- a/rally/plugins/openstack/scenarios/cinder/volumes.py +++ b/rally/plugins/openstack/scenarios/cinder/volumes.py @@ -18,10 +18,10 @@ import random from rally.common import log as logging from rally import consts from rally import exceptions +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.cinder import utils from rally.plugins.openstack.scenarios.glance import utils as glance_utils from rally.plugins.openstack.scenarios.nova import utils as nova_utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -37,7 +37,7 @@ class CinderVolumes(utils.CinderScenario, @validation.image_exists("image", nullable=True) @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_and_list_volume(self, size, detailed=True, image=None, **kwargs): """Create a volume and list all volumes. @@ -67,7 +67,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def list_volumes(self, detailed=True): """List all volumes. @@ -84,7 +84,7 @@ class CinderVolumes(utils.CinderScenario, @validation.image_exists("image", nullable=True) @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_and_delete_volume(self, size, image=None, min_sleep=0, max_sleep=0, **kwargs): @@ -117,7 +117,7 @@ class CinderVolumes(utils.CinderScenario, @validation.image_exists("image", nullable=True) @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_volume(self, size, image=None, **kwargs): """Create a volume. @@ -139,7 +139,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) @validation.required_contexts("volumes") - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def modify_volume_metadata(self, sets=10, set_size=3, deletes=5, delete_size=3): """Modify a volume's metadata. @@ -168,7 +168,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_and_extend_volume(self, size, new_size, min_sleep=0, max_sleep=0, **kwargs): """Create and extend a volume and then delete it. @@ -198,7 +198,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.CINDER) @validation.required_contexts("volumes") @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_from_volume_and_delete_volume(self, size, min_sleep=0, max_sleep=0, **kwargs): """Create volume from volume and then delete it. @@ -228,7 +228,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.CINDER) @validation.required_contexts("volumes") @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_and_delete_snapshot(self, force=False, min_sleep=0, max_sleep=0, **kwargs): """Create and then delete a volume-snapshot. @@ -255,7 +255,7 @@ class CinderVolumes(utils.CinderScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder", "nova"]}) + @scenario.configure(context={"cleanup": ["cinder", "nova"]}) def create_and_attach_volume(self, size, image, flavor, **kwargs): """Create a VM and attach a volume to it. @@ -283,7 +283,7 @@ class CinderVolumes(utils.CinderScenario, @validation.volume_type_exists("volume_type") @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder", "nova"]}) + @scenario.configure(context={"cleanup": ["cinder", "nova"]}) def create_snapshot_and_attach_volume(self, volume_type=False, size=None, **kwargs): @@ -325,7 +325,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder", "nova"]}) + @scenario.configure(context={"cleanup": ["cinder", "nova"]}) def create_nested_snapshots_and_attach_volume(self, size=None, nested_level=None, @@ -388,7 +388,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.CINDER) @validation.required_contexts("volumes") @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_and_list_snapshots(self, force=False, detailed=True, **kwargs): """Create and then list a volume-snapshot. @@ -406,7 +406,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_services(consts.Service.CINDER, consts.Service.GLANCE) @validation.required_openstack(users=True) @validation.required_parameters("size") - @base.scenario(context={"cleanup": ["cinder", "glance"]}) + @scenario.configure(context={"cleanup": ["cinder", "glance"]}) def create_and_upload_volume_to_image(self, size, force=False, container_format="bare", disk_format="raw", @@ -436,7 +436,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_cinder_services("cinder-backup") @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_volume_backup(self, size, do_delete=True, create_volume_kwargs=None, create_backup_kwargs=None): @@ -461,7 +461,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_cinder_services("cinder-backup") @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_and_restore_volume_backup(self, size, do_delete=True, create_volume_kwargs=None, create_backup_kwargs=None): @@ -487,7 +487,7 @@ class CinderVolumes(utils.CinderScenario, @validation.required_cinder_services("cinder-backup") @validation.required_services(consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["cinder"]}) + @scenario.configure(context={"cleanup": ["cinder"]}) def create_and_list_volume_backups(self, size, detailed=True, do_delete=True, create_volume_kwargs=None, diff --git a/rally/plugins/openstack/scenarios/designate/basic.py b/rally/plugins/openstack/scenarios/designate/basic.py index 1f3e5906b1..f344b24fe0 100644 --- a/rally/plugins/openstack/scenarios/designate/basic.py +++ b/rally/plugins/openstack/scenarios/designate/basic.py @@ -15,8 +15,9 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.designate import utils -from rally.task.scenarios import base +from rally.task import atomic from rally.task import validation @@ -25,7 +26,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def create_and_list_domains(self): """Create a domain and list all domains. @@ -42,7 +43,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def list_domains(self): """List Designate domains. @@ -58,7 +59,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def create_and_delete_domain(self): """Add and then delete a domain. @@ -70,7 +71,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def create_and_delete_records(self, records_per_domain=5): """Add and then delete records. @@ -84,20 +85,20 @@ class DesignateBasic(utils.DesignateScenario): records = [] key = "designate.create_%s_records" % records_per_domain - with base.AtomicAction(self, key): + with atomic.ActionTimer(self, key): for i in range(records_per_domain): record = self._create_record(domain, atomic_action=False) records.append(record) key = "designate.delete_%s_records" % records_per_domain - with base.AtomicAction(self, key): + with atomic.ActionTimer(self, key): for record in records: self._delete_record( domain["id"], record["id"], atomic_action=False) @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def list_records(self, domain_id): """List Designate records. @@ -115,7 +116,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def create_and_list_records(self, records_per_domain=5): """Add and then list records. @@ -130,7 +131,7 @@ class DesignateBasic(utils.DesignateScenario): domain = self._create_domain() key = "designate.create_%s_records" % records_per_domain - with base.AtomicAction(self, key): + with atomic.ActionTimer(self, key): for i in range(records_per_domain): self._create_record(domain, atomic_action=False) @@ -138,7 +139,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(admin=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def create_and_list_servers(self): """Create a Designate server and list all servers. @@ -153,7 +154,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(admin=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def create_and_delete_server(self): """Add and then delete a server. @@ -165,7 +166,7 @@ class DesignateBasic(utils.DesignateScenario): @validation.required_services(consts.Service.DESIGNATE) @validation.required_openstack(admin=True) - @base.scenario(context={"cleanup": ["designate"]}) + @scenario.configure(context={"cleanup": ["designate"]}) def list_servers(self): """List Designate servers. diff --git a/rally/plugins/openstack/scenarios/designate/utils.py b/rally/plugins/openstack/scenarios/designate/utils.py index 88a7c255e8..ccd47e8f17 100644 --- a/rally/plugins/openstack/scenarios/designate/utils.py +++ b/rally/plugins/openstack/scenarios/designate/utils.py @@ -15,7 +15,7 @@ # under the License. from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic class DesignateScenario(scenario.OpenStackScenario): @@ -23,7 +23,7 @@ class DesignateScenario(scenario.OpenStackScenario): RESOURCE_NAME_PREFIX = "rally_" - @base.atomic_action_timer("designate.create_domain") + @atomic.action_timer("designate.create_domain") def _create_domain(self, domain=None): """Create domain. @@ -36,12 +36,12 @@ class DesignateScenario(scenario.OpenStackScenario): domain.setdefault("name", "%s.name." % self._generate_random_name()) return self.clients("designate").domains.create(domain) - @base.atomic_action_timer("designate.list_domains") + @atomic.action_timer("designate.list_domains") def _list_domains(self): """Return user domain list.""" return self.clients("designate").domains.list() - @base.atomic_action_timer("designate.delete_domain") + @atomic.action_timer("designate.delete_domain") def _delete_domain(self, domain_id): """Delete designate zone. @@ -67,12 +67,12 @@ class DesignateScenario(scenario.OpenStackScenario): client = self.clients("designate") if atomic_action: - with base.AtomicAction(self, "designate.create_record"): + with atomic.ActionTimer(self, "designate.create_record"): return client.records.create(domain["id"], record) return client.records.create(domain["id"], record) - @base.atomic_action_timer("designate.list_records") + @atomic.action_timer("designate.list_records") def _list_records(self, domain_id): """List domain records. @@ -92,12 +92,12 @@ class DesignateScenario(scenario.OpenStackScenario): client = self.clients("designate") if atomic_action: - with base.AtomicAction(self, "designate.delete_record"): + with atomic.ActionTimer(self, "designate.delete_record"): client.records.delete(domain_id, record_id) else: client.records.delete(domain_id, record_id) - @base.atomic_action_timer("designate.create_server") + @atomic.action_timer("designate.create_server") def _create_server(self, server=None): """Create server. @@ -109,12 +109,12 @@ class DesignateScenario(scenario.OpenStackScenario): server.setdefault("name", "name.%s." % self._generate_random_name()) return self.admin_clients("designate").servers.create(server) - @base.atomic_action_timer("designate.list_servers") + @atomic.action_timer("designate.list_servers") def _list_servers(self): """Return user server list.""" return self.admin_clients("designate").servers.list() - @base.atomic_action_timer("designate.delete_server") + @atomic.action_timer("designate.delete_server") def _delete_server(self, server_id): """Delete Server. diff --git a/rally/plugins/openstack/scenarios/ec2/servers.py b/rally/plugins/openstack/scenarios/ec2/servers.py index acbaf8bc45..f3a8e57b10 100644 --- a/rally/plugins/openstack/scenarios/ec2/servers.py +++ b/rally/plugins/openstack/scenarios/ec2/servers.py @@ -14,8 +14,8 @@ from rally.common import log as logging from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ec2 import utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -28,7 +28,7 @@ class EC2Servers(utils.EC2Scenario): @validation.required_services(consts.Service.EC2) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ec2"]}) + @scenario.configure(context={"cleanup": ["ec2"]}) def list_servers(self): """List all servers. @@ -42,7 +42,7 @@ class EC2Servers(utils.EC2Scenario): @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.EC2) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["ec2"]}) + @scenario.configure(context={"cleanup": ["ec2"]}) def boot_server(self, image, flavor, **kwargs): """Boot a server. diff --git a/rally/plugins/openstack/scenarios/ec2/utils.py b/rally/plugins/openstack/scenarios/ec2/utils.py index ef65d616a2..6213e8a110 100644 --- a/rally/plugins/openstack/scenarios/ec2/utils.py +++ b/rally/plugins/openstack/scenarios/ec2/utils.py @@ -17,7 +17,7 @@ import time from oslo_config import cfg from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils @@ -48,12 +48,12 @@ CONF.register_opts(EC2_BENCHMARK_OPTS, group=benchmark_group) class EC2Scenario(scenario.OpenStackScenario): """Base class for EC2 scenarios with basic atomic actions.""" - @base.atomic_action_timer("ec2.list_servers") + @atomic.action_timer("ec2.list_servers") def _list_servers(self): """Returns user servers list.""" return self.clients("ec2").get_only_instances() - @base.atomic_action_timer("ec2.boot_servers") + @atomic.action_timer("ec2.boot_servers") def _boot_servers(self, image_id, flavor_name, instance_num=1, **kwargs): """Boot multiple servers. diff --git a/rally/plugins/openstack/scenarios/fuel/environments.py b/rally/plugins/openstack/scenarios/fuel/environments.py index 3a4d0aa399..8c0ea4b82c 100644 --- a/rally/plugins/openstack/scenarios/fuel/environments.py +++ b/rally/plugins/openstack/scenarios/fuel/environments.py @@ -12,8 +12,8 @@ # License for the specific language governing permissions and limitations # under the License. +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.fuel import utils -from rally.task.scenarios import base from rally.task import validation @@ -22,7 +22,7 @@ class FuelEnvironments(utils.FuelScenario): @validation.required_clients("fuel", admin=True) @validation.required_openstack(admin=True) - @base.scenario() + @scenario.configure() def list_environments(self): """List Fuel environments.""" self._list_environments() diff --git a/rally/plugins/openstack/scenarios/fuel/utils.py b/rally/plugins/openstack/scenarios/fuel/utils.py index 85cc4d8bac..b02de0e0ac 100644 --- a/rally/plugins/openstack/scenarios/fuel/utils.py +++ b/rally/plugins/openstack/scenarios/fuel/utils.py @@ -19,7 +19,7 @@ import six from rally import osclients from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic class FuelClient(object): @@ -59,7 +59,7 @@ def fuel(instance): class FuelScenario(scenario.OpenStackScenario): """Base class for Fuel scenarios.""" - @base.atomic_action_timer("fuel.list_environments") + @atomic.action_timer("fuel.list_environments") def _list_environments(self): """List Fuel environments.""" return self.admin_clients("fuel").environment.get_all() diff --git a/rally/plugins/openstack/scenarios/glance/images.py b/rally/plugins/openstack/scenarios/glance/images.py index 56d84e5b1c..ebe612e1e6 100644 --- a/rally/plugins/openstack/scenarios/glance/images.py +++ b/rally/plugins/openstack/scenarios/glance/images.py @@ -14,9 +14,9 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.glance import utils from rally.plugins.openstack.scenarios.nova import utils as nova_utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -29,7 +29,7 @@ class GlanceImages(utils.GlanceScenario, nova_utils.NovaScenario): @validation.required_services(consts.Service.GLANCE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["glance"]}) + @scenario.configure(context={"cleanup": ["glance"]}) def create_and_list_image(self, container_format, image_location, disk_format, **kwargs): """Add an image and then list all images. @@ -57,7 +57,7 @@ class GlanceImages(utils.GlanceScenario, nova_utils.NovaScenario): @validation.required_services(consts.Service.GLANCE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["glance"]}) + @scenario.configure(context={"cleanup": ["glance"]}) def list_images(self): """List all images. @@ -73,7 +73,7 @@ class GlanceImages(utils.GlanceScenario, nova_utils.NovaScenario): @validation.required_services(consts.Service.GLANCE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["glance"]}) + @scenario.configure(context={"cleanup": ["glance"]}) def create_and_delete_image(self, container_format, image_location, disk_format, **kwargs): """Add and then delete an image. @@ -95,7 +95,7 @@ class GlanceImages(utils.GlanceScenario, nova_utils.NovaScenario): @validation.flavor_exists("flavor") @validation.required_services(consts.Service.GLANCE, consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["glance", "nova"]}) + @scenario.configure(context={"cleanup": ["glance", "nova"]}) def create_image_and_boot_instances(self, container_format, image_location, disk_format, flavor, number_instances, diff --git a/rally/plugins/openstack/scenarios/glance/utils.py b/rally/plugins/openstack/scenarios/glance/utils.py index baa78c93a2..54ce608376 100644 --- a/rally/plugins/openstack/scenarios/glance/utils.py +++ b/rally/plugins/openstack/scenarios/glance/utils.py @@ -19,7 +19,7 @@ import time from oslo_config import cfg from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils @@ -53,12 +53,12 @@ CONF.register_opts(GLANCE_BENCHMARK_OPTS, group=benchmark_group) class GlanceScenario(scenario.OpenStackScenario): """Base class for Glance scenarios with basic atomic actions.""" - @base.atomic_action_timer("glance.list_images") + @atomic.action_timer("glance.list_images") def _list_images(self): """Returns user images list.""" return list(self.clients("glance").images.list()) - @base.atomic_action_timer("glance.create_image") + @atomic.action_timer("glance.create_image") def _create_image(self, container_format, image_location, disk_format, name=None, prefix=None, length=None, **kwargs): """Create a new image. @@ -110,7 +110,7 @@ class GlanceScenario(scenario.OpenStackScenario): return image - @base.atomic_action_timer("glance.delete_image") + @atomic.action_timer("glance.delete_image") def _delete_image(self, image): """Deletes given image. diff --git a/rally/plugins/openstack/scenarios/heat/stacks.py b/rally/plugins/openstack/scenarios/heat/stacks.py index f5399fd795..bab3db0e4c 100644 --- a/rally/plugins/openstack/scenarios/heat/stacks.py +++ b/rally/plugins/openstack/scenarios/heat/stacks.py @@ -14,8 +14,9 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.heat import utils -from rally.task.scenarios import base +from rally.task import atomic from rally.task import types from rally.task import validation @@ -29,7 +30,7 @@ class HeatStacks(utils.HeatScenario): @types.set(template_path=types.FileType, files=types.FileTypeDict) @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["heat"]}) + @scenario.configure(context={"cleanup": ["heat"]}) def create_and_list_stack(self, template_path, parameters=None, files=None, environment=None): """Add a stack and then list all stacks. @@ -47,12 +48,12 @@ class HeatStacks(utils.HeatScenario): @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def list_stacks_and_resources(self): """List all resources from tenant stacks.""" stacks = self._list_stacks() - with base.AtomicAction( + with atomic.ActionTimer( self, "heat.list_resources_of_%s_stacks" % len(stacks)): for stack in stacks: self.clients("heat").resources.list(stack.id) @@ -60,7 +61,7 @@ class HeatStacks(utils.HeatScenario): @types.set(template_path=types.FileType, files=types.FileTypeDict) @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["heat"]}) + @scenario.configure(context={"cleanup": ["heat"]}) def create_and_delete_stack(self, template_path, parameters=None, files=None, environment=None): """Add and then delete a stack. @@ -81,7 +82,7 @@ class HeatStacks(utils.HeatScenario): @types.set(template_path=types.FileType, files=types.FileTypeDict) @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["heat"]}) + @scenario.configure(context={"cleanup": ["heat"]}) def create_check_delete_stack(self, template_path, parameters=None, files=None, environment=None): """Create, check and delete a stack. @@ -108,7 +109,7 @@ class HeatStacks(utils.HeatScenario): updated_files=types.FileTypeDict) @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["heat"]}) + @scenario.configure(context={"cleanup": ["heat"]}) def create_update_delete_stack(self, template_path, updated_template_path, parameters=None, updated_parameters=None, @@ -143,7 +144,7 @@ class HeatStacks(utils.HeatScenario): @types.set(template_path=types.FileType, files=types.FileTypeDict) @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["heat"]}) + @scenario.configure(context={"cleanup": ["heat"]}) def create_stack_and_scale(self, template_path, output_key, delta, parameters=None, files=None, environment=None): @@ -180,7 +181,7 @@ class HeatStacks(utils.HeatScenario): @types.set(template_path=types.FileType, files=types.FileTypeDict) @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["heat"]}) + @scenario.configure(context={"cleanup": ["heat"]}) def create_suspend_resume_delete_stack(self, template_path, parameters=None, files=None, environment=None): @@ -205,12 +206,12 @@ class HeatStacks(utils.HeatScenario): @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def list_stacks_and_events(self): """List events from tenant stacks.""" stacks = self._list_stacks() - with base.AtomicAction( + with atomic.ActionTimer( self, "heat.list_events_of_%s_stacks" % len(stacks)): for stack in stacks: self.clients("heat").events.list(stack.id) @@ -218,7 +219,7 @@ class HeatStacks(utils.HeatScenario): @types.set(template_path=types.FileType, files=types.FileTypeDict) @validation.required_services(consts.Service.HEAT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["heat"]}) + @scenario.configure(context={"cleanup": ["heat"]}) def create_snapshot_restore_delete_stack(self, template_path, parameters=None, files=None, environment=None): diff --git a/rally/plugins/openstack/scenarios/heat/utils.py b/rally/plugins/openstack/scenarios/heat/utils.py index 64c5b1389e..a628e09acc 100644 --- a/rally/plugins/openstack/scenarios/heat/utils.py +++ b/rally/plugins/openstack/scenarios/heat/utils.py @@ -21,7 +21,7 @@ import requests from rally.common import log as logging from rally import exceptions from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils LOG = logging.getLogger(__name__) @@ -110,13 +110,13 @@ CONF.register_opts(HEAT_BENCHMARK_OPTS, group=benchmark_group) class HeatScenario(scenario.OpenStackScenario): """Base class for Heat scenarios with basic atomic actions.""" - @base.atomic_action_timer("heat.list_stacks") + @atomic.action_timer("heat.list_stacks") def _list_stacks(self): """Return user stack list.""" return list(self.clients("heat").stacks.list()) - @base.atomic_action_timer("heat.create_stack") + @atomic.action_timer("heat.create_stack") def _create_stack(self, template, parameters=None, files=None, environment=None): """Create a new stack. @@ -154,7 +154,7 @@ class HeatScenario(scenario.OpenStackScenario): return stack - @base.atomic_action_timer("heat.update_stack") + @atomic.action_timer("heat.update_stack") def _update_stack(self, stack, template, parameters=None, files=None, environment=None): """Update an existing stack @@ -187,7 +187,7 @@ class HeatScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.heat_stack_update_poll_interval) return stack - @base.atomic_action_timer("heat.check_stack") + @atomic.action_timer("heat.check_stack") def _check_stack(self, stack): """Check given stack. @@ -203,7 +203,7 @@ class HeatScenario(scenario.OpenStackScenario): timeout=CONF.benchmark.heat_stack_check_timeout, check_interval=CONF.benchmark.heat_stack_check_poll_interval) - @base.atomic_action_timer("heat.delete_stack") + @atomic.action_timer("heat.delete_stack") def _delete_stack(self, stack): """Delete given stack. @@ -218,7 +218,7 @@ class HeatScenario(scenario.OpenStackScenario): timeout=CONF.benchmark.heat_stack_delete_timeout, check_interval=CONF.benchmark.heat_stack_delete_poll_interval) - @base.atomic_action_timer("heat.suspend_stack") + @atomic.action_timer("heat.suspend_stack") def _suspend_stack(self, stack): """Suspend given stack. @@ -234,7 +234,7 @@ class HeatScenario(scenario.OpenStackScenario): timeout=CONF.benchmark.heat_stack_suspend_timeout, check_interval=CONF.benchmark.heat_stack_suspend_poll_interval) - @base.atomic_action_timer("heat.resume_stack") + @atomic.action_timer("heat.resume_stack") def _resume_stack(self, stack): """Resume given stack. @@ -250,7 +250,7 @@ class HeatScenario(scenario.OpenStackScenario): timeout=CONF.benchmark.heat_stack_resume_timeout, check_interval=CONF.benchmark.heat_stack_resume_poll_interval) - @base.atomic_action_timer("heat.snapshot_stack") + @atomic.action_timer("heat.snapshot_stack") def _snapshot_stack(self, stack): """Creates a snapshot for given stack. @@ -268,7 +268,7 @@ class HeatScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.heat_stack_snapshot_poll_interval) return snapshot - @base.atomic_action_timer("heat.restore_stack") + @atomic.action_timer("heat.restore_stack") def _restore_stack(self, stack, snapshot_id): """Restores stack from given snapshot. @@ -311,7 +311,7 @@ class HeatScenario(scenario.OpenStackScenario): expected_instances = num_instances + delta LOG.debug("Scaling stack %s from %s to %s instances with %s" % (stack.id, num_instances, expected_instances, output_key)) - with base.AtomicAction(self, "heat.scale_with_%s" % output_key): + with atomic.ActionTimer(self, "heat.scale_with_%s" % output_key): self._stack_webhook(stack, output_key) utils.wait_for( stack, @@ -341,5 +341,5 @@ class HeatScenario(scenario.OpenStackScenario): "No output key %(key)s found in stack %(id)s" % {"key": output_key, "id": stack.id}) - with base.AtomicAction(self, "heat.%s_webhook" % output_key): + with atomic.ActionTimer(self, "heat.%s_webhook" % output_key): requests.post(url).raise_for_status() diff --git a/rally/plugins/openstack/scenarios/ironic/nodes.py b/rally/plugins/openstack/scenarios/ironic/nodes.py index e986984749..0c2934fe48 100644 --- a/rally/plugins/openstack/scenarios/ironic/nodes.py +++ b/rally/plugins/openstack/scenarios/ironic/nodes.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.ironic import utils -from rally.task.scenarios import base from rally.task import validation @@ -25,7 +25,7 @@ class IronicNodes(utils.IronicScenario): @validation.required_parameters("driver") @validation.required_services(consts.Service.IRONIC) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["ironic"]}) + @scenario.configure(context={"admin_cleanup": ["ironic"]}) def create_and_list_node( self, associated=None, maintenance=None, marker=None, limit=None, detail=False, sort_key=None, @@ -68,7 +68,7 @@ class IronicNodes(utils.IronicScenario): @validation.required_parameters("driver") @validation.required_services(consts.Service.IRONIC) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["ironic"]}) + @scenario.configure(context={"admin_cleanup": ["ironic"]}) def create_and_delete_node(self, **kwargs): """Create and delete node. diff --git a/rally/plugins/openstack/scenarios/ironic/utils.py b/rally/plugins/openstack/scenarios/ironic/utils.py index 9b148dc81d..5417ccb9d7 100644 --- a/rally/plugins/openstack/scenarios/ironic/utils.py +++ b/rally/plugins/openstack/scenarios/ironic/utils.py @@ -20,7 +20,7 @@ from oslo_config import cfg from rally.common import utils from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic IRONIC_BENCHMARK_OPTS = [ @@ -38,7 +38,7 @@ CONF.register_opts(IRONIC_BENCHMARK_OPTS, group=benchmark_group) class IronicScenario(scenario.OpenStackScenario): """Base class for Ironic scenarios with basic atomic actions.""" - @base.atomic_action_timer("ironic.create_node") + @atomic.action_timer("ironic.create_node") def _create_node(self, **kwargs): """Create node immediately. @@ -58,7 +58,7 @@ class IronicScenario(scenario.OpenStackScenario): return self.admin_clients("ironic").node.create(**kwargs) - @base.atomic_action_timer("ironic.list_nodes") + @atomic.action_timer("ironic.list_nodes") def _list_nodes(self, associated=None, maintenance=None, marker=None, limit=None, detail=False, sort_key=None, sort_dir=None): """Return list of nodes. @@ -93,7 +93,7 @@ class IronicScenario(scenario.OpenStackScenario): associated=associated, maintenance=maintenance, marker=marker, limit=limit, detail=detail, sort_key=sort_key, sort_dir=sort_dir) - @base.atomic_action_timer("ironic.delete_node") + @atomic.action_timer("ironic.delete_node") def _delete_node(self, node_id): """Delete the node with specific id. diff --git a/rally/plugins/openstack/scenarios/keystone/basic.py b/rally/plugins/openstack/scenarios/keystone/basic.py index e60c96be18..38c37f3750 100644 --- a/rally/plugins/openstack/scenarios/keystone/basic.py +++ b/rally/plugins/openstack/scenarios/keystone/basic.py @@ -14,8 +14,8 @@ # under the License. from rally.common import utils +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.keystone import utils as kutils -from rally.task.scenarios import base from rally.task import validation @@ -24,7 +24,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("name_length", minval=10) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_user(self, name_length=10, **kwargs): """Create a keystone user with random name. @@ -36,7 +36,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("name_length", minval=10) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_delete_user(self, name_length=10, **kwargs): """Create a keystone user with random name and then delete it. @@ -48,7 +48,7 @@ class KeystoneBasic(kutils.KeystoneScenario): self._resource_delete(user) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_user_set_enabled_and_delete(self, enabled=True, **kwargs): """Create a keystone user, enable or disable it, and delete it. @@ -63,7 +63,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("name_length", minval=10) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_tenant(self, name_length=10, **kwargs): """Create a keystone tenant with random name. @@ -75,7 +75,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("name_length", minval=10) @validation.number("users_per_tenant", minval=1) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_tenant_with_users(self, users_per_tenant, name_length=10, **kwargs): """Create a keystone tenant and several users belonging to it. @@ -91,7 +91,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("name_length", minval=10) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_and_list_users(self, name_length=10, **kwargs): """Create a keystone user with random name and list all users. @@ -104,7 +104,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("name_length", minval=10) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_and_list_tenants(self, name_length=10, **kwargs): """Create a keystone tenant with random name and list all tenants. @@ -115,7 +115,7 @@ class KeystoneBasic(kutils.KeystoneScenario): self._list_tenants() @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def add_and_remove_user_role(self): """Create a user role add to a user and disassociate.""" tenant_id = self.context["tenant"]["id"] @@ -125,14 +125,14 @@ class KeystoneBasic(kutils.KeystoneScenario): self._role_remove(user_id, role, tenant_id) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_and_delete_role(self): """Create a user role and delete it.""" role = self._role_create() self._resource_delete(role) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_add_and_list_user_roles(self): """Create user role, add it and list user roles for given user.""" tenant_id = self.context["tenant"]["id"] @@ -142,7 +142,7 @@ class KeystoneBasic(kutils.KeystoneScenario): self._list_roles_for_user(user_id, tenant_id) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def get_entities(self, service_name="keystone"): """Get instance of a tenant, user, role and service by id's. @@ -173,7 +173,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @utils.log_deprecated_args( "The 'name' argument to create_and_delete_service will be ignored", "0.0.5", ["name"]) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_and_delete_service(self, name=None, service_type=None, description=None): """Create and delete service. @@ -186,7 +186,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("name_length", minval=10) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_update_and_delete_tenant(self, name_length=10, **kwargs): """Create, update and delete tenant. @@ -200,7 +200,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @validation.number("password_length", minval=10) @validation.number("name_length", minval=10) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_user_update_password(self, name_length=10, password_length=10): """Create user and update password for that user. @@ -215,7 +215,7 @@ class KeystoneBasic(kutils.KeystoneScenario): @utils.log_deprecated_args( "The 'name' argument to create_and_list_services will be ignored", "0.0.5", ["name"]) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_and_list_services(self, name=None, service_type=None, description=None): """Create and list services. @@ -227,7 +227,7 @@ class KeystoneBasic(kutils.KeystoneScenario): self._list_services() @validation.required_openstack(users=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_and_list_ec2credentials(self): """Create and List all keystone ec2-credentials.""" self._create_ec2credentials(self.context["user"]["id"], @@ -235,7 +235,7 @@ class KeystoneBasic(kutils.KeystoneScenario): self._list_ec2credentials(self.context["user"]["id"]) @validation.required_openstack(users=True) - @base.scenario(context={"admin_cleanup": ["keystone"]}) + @scenario.configure(context={"admin_cleanup": ["keystone"]}) def create_and_delete_ec2credential(self): """Create and delete keystone ec2-credential.""" creds = self._create_ec2credentials(self.context["user"]["id"], diff --git a/rally/plugins/openstack/scenarios/keystone/utils.py b/rally/plugins/openstack/scenarios/keystone/utils.py index a8d41a1d8a..94741b0007 100644 --- a/rally/plugins/openstack/scenarios/keystone/utils.py +++ b/rally/plugins/openstack/scenarios/keystone/utils.py @@ -16,7 +16,7 @@ import uuid from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic def is_temporary(resource): @@ -28,7 +28,7 @@ class KeystoneScenario(scenario.OpenStackScenario): RESOURCE_NAME_PREFIX = "rally_keystone_" - @base.atomic_action_timer("keystone.create_user") + @atomic.action_timer("keystone.create_user") def _user_create(self, name_length=10, email=None, **kwargs): """Creates keystone user with random name. @@ -46,7 +46,7 @@ class KeystoneScenario(scenario.OpenStackScenario): return self.admin_clients("keystone").users.create( name, password=password, email=email, **kwargs) - @base.atomic_action_timer("keystone.update_user_enabled") + @atomic.action_timer("keystone.update_user_enabled") def _update_user_enabled(self, user, enabled): """Enable or disable a user. @@ -59,10 +59,10 @@ class KeystoneScenario(scenario.OpenStackScenario): def _resource_delete(self, resource): """"Delete keystone resource.""" r = "keystone.delete_%s" % resource.__class__.__name__.lower() - with base.AtomicAction(self, r): + with atomic.ActionTimer(self, r): resource.delete() - @base.atomic_action_timer("keystone.create_tenant") + @atomic.action_timer("keystone.create_tenant") def _tenant_create(self, name_length=10, **kwargs): """Creates keystone tenant with random name. @@ -73,7 +73,7 @@ class KeystoneScenario(scenario.OpenStackScenario): name = self._generate_random_name(length=name_length) return self.admin_clients("keystone").tenants.create(name, **kwargs) - @base.atomic_action_timer("keystone.create_service") + @atomic.action_timer("keystone.create_service") def _service_create(self, service_type="rally_test_type", description=None): """Creates keystone service with random name. @@ -89,7 +89,7 @@ class KeystoneScenario(scenario.OpenStackScenario): self._generate_random_name(), service_type, description) - @base.atomic_action_timer("keystone.create_users") + @atomic.action_timer("keystone.create_users") def _users_create(self, tenant, users_per_tenant, name_length=10): """Adds users to a tenant. @@ -104,7 +104,7 @@ class KeystoneScenario(scenario.OpenStackScenario): self.admin_clients("keystone").users.create( name, password=password, email=email, tenant_id=tenant.id) - @base.atomic_action_timer("keystone.create_role") + @atomic.action_timer("keystone.create_role") def _role_create(self, name_length=5): """Creates keystone user role with random name. @@ -115,22 +115,22 @@ class KeystoneScenario(scenario.OpenStackScenario): self._generate_random_name(length=name_length)) return role - @base.atomic_action_timer("keystone.list_users") + @atomic.action_timer("keystone.list_users") def _list_users(self): """List users.""" return self.admin_clients("keystone").users.list() - @base.atomic_action_timer("keystone.list_tenants") + @atomic.action_timer("keystone.list_tenants") def _list_tenants(self): """List tenants.""" return self.admin_clients("keystone").tenants.list() - @base.atomic_action_timer("keystone.service_list") + @atomic.action_timer("keystone.service_list") def _list_services(self): """List services.""" return self.admin_clients("keystone").services.list() - @base.atomic_action_timer("keystone.list_roles") + @atomic.action_timer("keystone.list_roles") def _list_roles_for_user(self, user, tenant): """List user roles. @@ -140,7 +140,7 @@ class KeystoneScenario(scenario.OpenStackScenario): return self.admin_clients("keystone").roles.roles_for_user( user, tenant) - @base.atomic_action_timer("keystone.add_role") + @atomic.action_timer("keystone.add_role") def _role_add(self, user, role, tenant): """Add role to a given user on a tenant. @@ -150,7 +150,7 @@ class KeystoneScenario(scenario.OpenStackScenario): """ self.admin_clients("keystone").roles.add_user_role(user, role, tenant) - @base.atomic_action_timer("keystone.remove_role") + @atomic.action_timer("keystone.remove_role") def _role_remove(self, user, role, tenant): """Dissociate user with role. @@ -161,7 +161,7 @@ class KeystoneScenario(scenario.OpenStackScenario): self.admin_clients("keystone").roles.remove_user_role(user, role, tenant) - @base.atomic_action_timer("keystone.get_tenant") + @atomic.action_timer("keystone.get_tenant") def _get_tenant(self, tenant_id): """Get given tenant. @@ -169,7 +169,7 @@ class KeystoneScenario(scenario.OpenStackScenario): """ return self.admin_clients("keystone").tenants.get(tenant_id) - @base.atomic_action_timer("keystone.get_user") + @atomic.action_timer("keystone.get_user") def _get_user(self, user_id): """Get given user. @@ -177,7 +177,7 @@ class KeystoneScenario(scenario.OpenStackScenario): """ return self.admin_clients("keystone").users.get(user_id) - @base.atomic_action_timer("keystone.get_role") + @atomic.action_timer("keystone.get_role") def _get_role(self, role_id): """Get given user role. @@ -185,7 +185,7 @@ class KeystoneScenario(scenario.OpenStackScenario): """ return self.admin_clients("keystone").roles.get(role_id) - @base.atomic_action_timer("keystone.get_service") + @atomic.action_timer("keystone.get_service") def _get_service(self, service_id): """Get service with given service id. @@ -198,7 +198,7 @@ class KeystoneScenario(scenario.OpenStackScenario): if i.name == name: return i - @base.atomic_action_timer("keystone.delete_service") + @atomic.action_timer("keystone.delete_service") def _delete_service(self, service_id): """Delete service. @@ -206,7 +206,7 @@ class KeystoneScenario(scenario.OpenStackScenario): """ self.admin_clients("keystone").services.delete(service_id) - @base.atomic_action_timer("keystone.update_tenant") + @atomic.action_timer("keystone.update_tenant") def _update_tenant(self, tenant, name=None, description=None): """Update tenant name and description. @@ -219,7 +219,7 @@ class KeystoneScenario(scenario.OpenStackScenario): self.admin_clients("keystone").tenants.update(tenant.id, name, description) - @base.atomic_action_timer("keystone.update_user_password") + @atomic.action_timer("keystone.update_user_password") def _update_user_password(self, user_id, password): """Update user password. @@ -232,7 +232,7 @@ class KeystoneScenario(scenario.OpenStackScenario): else: admin_clients.users.update_password(user_id, password) - @base.atomic_action_timer("keystone.create_ec2creds") + @atomic.action_timer("keystone.create_ec2creds") def _create_ec2credentials(self, user_id, tenant_id): """Create ec2credentials. @@ -243,7 +243,7 @@ class KeystoneScenario(scenario.OpenStackScenario): """ return self.clients("keystone").ec2.create(user_id, tenant_id) - @base.atomic_action_timer("keystone.list_ec2creds") + @atomic.action_timer("keystone.list_ec2creds") def _list_ec2credentials(self, user_id): """List of access/secret pairs for a user_id. @@ -253,7 +253,7 @@ class KeystoneScenario(scenario.OpenStackScenario): """ return self.clients("keystone").ec2.list(user_id) - @base.atomic_action_timer("keystone.delete_ec2creds") + @atomic.action_timer("keystone.delete_ec2creds") def _delete_ec2credential(self, user_id, access): """Delete ec2credential. diff --git a/rally/plugins/openstack/scenarios/manila/shares.py b/rally/plugins/openstack/scenarios/manila/shares.py index 3009f9957f..5b74b3ed07 100644 --- a/rally/plugins/openstack/scenarios/manila/shares.py +++ b/rally/plugins/openstack/scenarios/manila/shares.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.manila import utils -from rally.task.scenarios import base from rally.task import validation @@ -25,7 +25,7 @@ class ManilaShares(utils.ManilaScenario): @validation.validate_share_proto() @validation.required_services(consts.Service.MANILA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["manila"]}) + @scenario.configure(context={"cleanup": ["manila"]}) def create_and_delete_share(self, share_proto, size=1, min_sleep=0, max_sleep=0, **kwargs): """Create and delete a share. @@ -50,7 +50,7 @@ class ManilaShares(utils.ManilaScenario): @validation.required_services(consts.Service.MANILA) @validation.required_openstack(users=True) - @base.scenario() + @scenario.configure() def list_shares(self, detailed=True, search_opts=None): """Basic scenario for 'share list' operation. @@ -63,7 +63,7 @@ class ManilaShares(utils.ManilaScenario): @validation.required_services(consts.Service.MANILA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["manila"]}) + @scenario.configure(context={"cleanup": ["manila"]}) def create_share_network_and_delete(self, neutron_net_id=None, neutron_subnet_id=None, @@ -89,7 +89,7 @@ class ManilaShares(utils.ManilaScenario): @validation.required_services(consts.Service.MANILA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["manila"]}) + @scenario.configure(context={"cleanup": ["manila"]}) def create_share_network_and_list(self, neutron_net_id=None, neutron_subnet_id=None, @@ -124,7 +124,7 @@ class ManilaShares(utils.ManilaScenario): @validation.required_services(consts.Service.MANILA) @validation.required_openstack(admin=True) - @base.scenario() + @scenario.configure() def list_share_servers(self, search_opts=None): """Lists share servers. @@ -137,7 +137,7 @@ class ManilaShares(utils.ManilaScenario): @validation.required_services(consts.Service.MANILA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["manila"]}) + @scenario.configure(context={"cleanup": ["manila"]}) def create_security_service_and_delete(self, security_service_type, dns_ip=None, server=None, domain=None, user=None, @@ -169,7 +169,7 @@ class ManilaShares(utils.ManilaScenario): @validation.required_services(consts.Service.MANILA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["manila"]}) + @scenario.configure(context={"cleanup": ["manila"]}) def attach_security_service_to_share_network(self, security_service_type="ldap"): """Attaches security service to share network. diff --git a/rally/plugins/openstack/scenarios/manila/utils.py b/rally/plugins/openstack/scenarios/manila/utils.py index f523d90735..0f5883da45 100644 --- a/rally/plugins/openstack/scenarios/manila/utils.py +++ b/rally/plugins/openstack/scenarios/manila/utils.py @@ -18,7 +18,7 @@ import time from oslo_config import cfg from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils @@ -56,7 +56,7 @@ CONF.register_opts(MANILA_BENCHMARK_OPTS, group=benchmark_group) class ManilaScenario(scenario.OpenStackScenario): """Base class for Manila scenarios with basic atomic actions.""" - @base.atomic_action_timer("manila.create_share") + @atomic.action_timer("manila.create_share") def _create_share(self, share_proto, size=1, **kwargs): """Create a share. @@ -87,7 +87,7 @@ class ManilaScenario(scenario.OpenStackScenario): ) return share - @base.atomic_action_timer("manila.delete_share") + @atomic.action_timer("manila.delete_share") def _delete_share(self, share): """Delete the given share. @@ -101,7 +101,7 @@ class ManilaScenario(scenario.OpenStackScenario): timeout=CONF.benchmark.manila_share_delete_timeout, check_interval=CONF.benchmark.manila_share_delete_poll_interval) - @base.atomic_action_timer("manila.list_shares") + @atomic.action_timer("manila.list_shares") def _list_shares(self, detailed=True, search_opts=None): """Returns user shares list. @@ -113,7 +113,7 @@ class ManilaScenario(scenario.OpenStackScenario): return self.clients("manila").shares.list( detailed=detailed, search_opts=search_opts) - @base.atomic_action_timer("manila.create_share_network") + @atomic.action_timer("manila.create_share_network") def _create_share_network(self, neutron_net_id=None, neutron_subnet_id=None, nova_net_id=None, name=None, description=None): @@ -135,7 +135,7 @@ class ManilaScenario(scenario.OpenStackScenario): description=description) return share_network - @base.atomic_action_timer("manila.delete_share_network") + @atomic.action_timer("manila.delete_share_network") def _delete_share_network(self, share_network): """Delete share network. @@ -148,7 +148,7 @@ class ManilaScenario(scenario.OpenStackScenario): timeout=CONF.benchmark.manila_share_delete_timeout, check_interval=CONF.benchmark.manila_share_delete_poll_interval) - @base.atomic_action_timer("manila.list_share_networks") + @atomic.action_timer("manila.list_share_networks") def _list_share_networks(self, detailed=True, search_opts=None): """List share networks. @@ -162,7 +162,7 @@ class ManilaScenario(scenario.OpenStackScenario): detailed=detailed, search_opts=search_opts) return share_networks - @base.atomic_action_timer("manila.list_share_servers") + @atomic.action_timer("manila.list_share_servers") def _list_share_servers(self, search_opts=None): """List share servers. Admin only. @@ -174,7 +174,7 @@ class ManilaScenario(scenario.OpenStackScenario): search_opts=search_opts) return share_servers - @base.atomic_action_timer("manila.create_security_service") + @atomic.action_timer("manila.create_security_service") def _create_security_service(self, security_service_type, dns_ip=None, server=None, domain=None, user=None, password=None, name=None, description=None): @@ -206,7 +206,7 @@ class ManilaScenario(scenario.OpenStackScenario): description=description) return security_service - @base.atomic_action_timer("manila.delete_security_service") + @atomic.action_timer("manila.delete_security_service") def _delete_security_service(self, security_service): """Delete security service. @@ -219,7 +219,7 @@ class ManilaScenario(scenario.OpenStackScenario): timeout=CONF.benchmark.manila_share_delete_timeout, check_interval=CONF.benchmark.manila_share_delete_poll_interval) - @base.atomic_action_timer("manila.add_security_service_to_share_network") + @atomic.action_timer("manila.add_security_service_to_share_network") def _add_security_service_to_share_network(self, share_network, security_service): """Associate given security service with a share network. diff --git a/rally/plugins/openstack/scenarios/mistral/utils.py b/rally/plugins/openstack/scenarios/mistral/utils.py index f9c9d1685f..1681891297 100644 --- a/rally/plugins/openstack/scenarios/mistral/utils.py +++ b/rally/plugins/openstack/scenarios/mistral/utils.py @@ -16,18 +16,18 @@ import yaml from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic class MistralScenario(scenario.OpenStackScenario): """Base class for Mistral scenarios with basic atomic actions.""" - @base.atomic_action_timer("mistral.list_workbooks") + @atomic.action_timer("mistral.list_workbooks") def _list_workbooks(self): """Gets list of existing workbooks.""" return self.clients("mistral").workbooks.list() - @base.atomic_action_timer("mistral.create_workbook") + @atomic.action_timer("mistral.create_workbook") def _create_workbook(self, definition): """Create a new workbook. @@ -41,7 +41,7 @@ class MistralScenario(scenario.OpenStackScenario): return self.clients("mistral").workbooks.create(definition) - @base.atomic_action_timer("mistral.delete_workbook") + @atomic.action_timer("mistral.delete_workbook") def _delete_workbook(self, wb_name): """Delete the given workbook. diff --git a/rally/plugins/openstack/scenarios/mistral/workbooks.py b/rally/plugins/openstack/scenarios/mistral/workbooks.py index 5c8129ada7..2eadb1ae26 100644 --- a/rally/plugins/openstack/scenarios/mistral/workbooks.py +++ b/rally/plugins/openstack/scenarios/mistral/workbooks.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.mistral import utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -26,7 +26,7 @@ class MistralWorkbooks(utils.MistralScenario): @validation.required_clients("mistral") @validation.required_openstack(users=True) @validation.required_services(consts.Service.MISTRAL) - @base.scenario() + @scenario.configure() def list_workbooks(self): """Scenario test mistral workbook-list command. @@ -41,7 +41,7 @@ class MistralWorkbooks(utils.MistralScenario): @validation.required_clients("mistral") @validation.required_openstack(users=True) @validation.required_services(consts.Service.MISTRAL) - @base.scenario(context={"cleanup": ["mistral"]}) + @scenario.configure(context={"cleanup": ["mistral"]}) def create_workbook(self, definition, do_delete=False): """Scenario tests workbook creation and deletion. diff --git a/rally/plugins/openstack/scenarios/murano/environments.py b/rally/plugins/openstack/scenarios/murano/environments.py index 2385492aeb..ea21f05eac 100644 --- a/rally/plugins/openstack/scenarios/murano/environments.py +++ b/rally/plugins/openstack/scenarios/murano/environments.py @@ -15,8 +15,9 @@ from rally.common import log as logging from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.murano import utils -from rally.task.scenarios import base +from rally.task import atomic from rally.task import validation LOG = logging.getLogger(__name__) @@ -26,7 +27,7 @@ class MuranoEnvironments(utils.MuranoScenario): """Benchmark scenarios for Murano environments.""" @validation.required_clients("murano") @validation.required_services(consts.Service.MURANO) - @base.scenario(context={"cleanup": ["murano.environments"]}) + @scenario.configure(context={"cleanup": ["murano.environments"]}) def list_environments(self): """List the murano environments. @@ -36,7 +37,7 @@ class MuranoEnvironments(utils.MuranoScenario): @validation.required_clients("murano") @validation.required_services(consts.Service.MURANO) - @base.scenario(context={"cleanup": ["murano.environments"]}) + @scenario.configure(context={"cleanup": ["murano.environments"]}) def create_and_delete_environment(self): """Create environment, session and delete environment.""" environment = self._create_environment() @@ -47,7 +48,7 @@ class MuranoEnvironments(utils.MuranoScenario): @validation.required_clients("murano") @validation.required_services(consts.Service.MURANO) @validation.required_contexts("murano_packages") - @base.scenario(context={"cleanup": ["murano"], "roles": ["admin"]}) + @scenario.configure(context={"cleanup": ["murano"], "roles": ["admin"]}) def create_and_deploy_environment(self, packages_per_env=1): """Create environment, session and deploy environment. @@ -60,7 +61,7 @@ class MuranoEnvironments(utils.MuranoScenario): session = self._create_session(environment.id) package = self.context["tenant"]["packages"][0] - with base.AtomicAction(self, "murano.create_service"): + with atomic.ActionTimer(self, "murano.create_service"): for i in range(packages_per_env): self._create_service(environment, session, package.fully_qualified_name, diff --git a/rally/plugins/openstack/scenarios/murano/utils.py b/rally/plugins/openstack/scenarios/murano/utils.py index f760dba3dc..ad7f3e19c9 100644 --- a/rally/plugins/openstack/scenarios/murano/utils.py +++ b/rally/plugins/openstack/scenarios/murano/utils.py @@ -18,7 +18,7 @@ import uuid from oslo_config import cfg from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils CONF = cfg.CONF @@ -41,12 +41,12 @@ CONF.register_opts(MURANO_TIMEOUT_OPTS, group=benchmark_group) class MuranoScenario(scenario.OpenStackScenario): """Base class for Murano scenarios with basic atomic actions.""" - @base.atomic_action_timer("murano.list_environments") + @atomic.action_timer("murano.list_environments") def _list_environments(self): """Return environments list.""" return self.clients("murano").environments.list() - @base.atomic_action_timer("murano.create_environment") + @atomic.action_timer("murano.create_environment") def _create_environment(self, env_name=None): """Create environment. @@ -57,7 +57,7 @@ class MuranoScenario(scenario.OpenStackScenario): env_name = env_name or self._generate_random_name() return self.clients("murano").environments.create({"name": env_name}) - @base.atomic_action_timer("murano.delete_environment") + @atomic.action_timer("murano.delete_environment") def _delete_environment(self, environment): """Delete given environment. @@ -73,7 +73,7 @@ class MuranoScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.delete_environment_check_interval ) - @base.atomic_action_timer("murano.create_session") + @atomic.action_timer("murano.create_session") def _create_session(self, environment_id): """Create session for environment with specific id @@ -101,7 +101,7 @@ class MuranoScenario(scenario.OpenStackScenario): "name": self._generate_random_name("rally_")} if atomic_action: - with base.AtomicAction(self, "murano.create_service"): + with atomic.ActionTimer(self, "murano.create_service"): return self.clients("murano").services.post( environment_id=environment.id, path="/", data=data, session_id=session.id) @@ -110,7 +110,7 @@ class MuranoScenario(scenario.OpenStackScenario): environment_id=environment.id, path="/", data=data, session_id=session.id) - @base.atomic_action_timer("murano.deploy_environment") + @atomic.action_timer("murano.deploy_environment") def _deploy_environment(self, environment, session): """Deploy environment. diff --git a/rally/plugins/openstack/scenarios/neutron/loadbalancer_v1.py b/rally/plugins/openstack/scenarios/neutron/loadbalancer_v1.py index ee1bbeafc1..ebfc3e3f61 100644 --- a/rally/plugins/openstack/scenarios/neutron/loadbalancer_v1.py +++ b/rally/plugins/openstack/scenarios/neutron/loadbalancer_v1.py @@ -11,8 +11,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.neutron import utils -from rally.task.scenarios import base from rally.task import validation @@ -24,7 +24,7 @@ class NeutronLoadbalancerV1(utils.NeutronScenario): @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) @validation.required_contexts("network") - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_list_pools(self, pool_create_args=None): """Create a pool(v1) and then list pools(v1). @@ -43,7 +43,7 @@ class NeutronLoadbalancerV1(utils.NeutronScenario): @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) @validation.required_contexts("network") - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_delete_pools(self, pool_create_args=None): """Create pools(v1) and delete pools(v1). @@ -64,7 +64,7 @@ class NeutronLoadbalancerV1(utils.NeutronScenario): @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) @validation.required_contexts("network") - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_update_pools(self, pool_update_args=None, pool_create_args=None): """Create pools(v1) and update pools(v1). diff --git a/rally/plugins/openstack/scenarios/neutron/network.py b/rally/plugins/openstack/scenarios/neutron/network.py index f7b738133b..140ce99dfb 100644 --- a/rally/plugins/openstack/scenarios/neutron/network.py +++ b/rally/plugins/openstack/scenarios/neutron/network.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.neutron import utils -from rally.task.scenarios import base from rally.task import validation @@ -24,7 +24,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_list_networks(self, network_create_args=None): """Create a network and then list all networks. @@ -43,7 +43,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_update_networks(self, network_update_args, network_create_args=None): @@ -58,7 +58,7 @@ class NeutronNetworks(utils.NeutronScenario): self._update_network(network, network_update_args) @validation.required_services(consts.Service.NEUTRON) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_delete_networks(self, network_create_args=None): """Create and delete a network. @@ -72,7 +72,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.number("subnets_per_network", minval=1, integer_only=True) @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_list_subnets(self, network_create_args=None, subnet_create_args=None, @@ -97,7 +97,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.number("subnets_per_network", minval=1, integer_only=True) @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_update_subnets(self, subnet_update_args, network_create_args=None, @@ -127,7 +127,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.required_parameters("subnets_per_network") @validation.required_services(consts.Service.NEUTRON) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_delete_subnets(self, network_create_args=None, subnet_create_args=None, @@ -155,7 +155,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.number("subnets_per_network", minval=1, integer_only=True) @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_list_routers(self, network_create_args=None, subnet_create_args=None, @@ -190,7 +190,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.number("subnets_per_network", minval=1, integer_only=True) @validation.required_parameters("subnets_per_network") @validation.required_services(consts.Service.NEUTRON) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_update_routers(self, router_update_args, network_create_args=None, @@ -223,9 +223,9 @@ class NeutronNetworks(utils.NeutronScenario): {"subnet_id": subnet["subnet"]["id"]}) self._update_router(router, router_update_args) - @base.scenario(context={"cleanup": ["neutron"]}) @validation.required_parameters("subnets_per_network") @validation.required_services(consts.Service.NEUTRON) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_delete_routers(self, network_create_args=None, subnet_create_args=None, @@ -268,7 +268,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.number("ports_per_network", minval=1, integer_only=True) @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_list_ports(self, network_create_args=None, port_create_args=None, @@ -288,7 +288,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.number("ports_per_network", minval=1, integer_only=True) @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_update_ports(self, port_update_args, network_create_args=None, @@ -311,7 +311,7 @@ class NeutronNetworks(utils.NeutronScenario): @validation.required_parameters("ports_per_network") @validation.required_services(consts.Service.NEUTRON) - @base.scenario(context={"cleanup": ["neutron"]}) + @scenario.configure(context={"cleanup": ["neutron"]}) def create_and_delete_ports(self, network_create_args=None, port_create_args=None, diff --git a/rally/plugins/openstack/scenarios/neutron/utils.py b/rally/plugins/openstack/scenarios/neutron/utils.py index 45ad9c9977..247a4d0aed 100644 --- a/rally/plugins/openstack/scenarios/neutron/utils.py +++ b/rally/plugins/openstack/scenarios/neutron/utils.py @@ -17,7 +17,7 @@ from rally.common.i18n import _ from rally.common import log as logging from rally.plugins.openstack import scenario from rally.plugins.openstack.wrappers import network as network_wrapper -from rally.task.scenarios import base +from rally.task import atomic LOG = logging.getLogger(__name__) @@ -62,7 +62,7 @@ class NeutronScenario(scenario.OpenStackScenario): "id": list(resource.values())[0]["id"], "name": kwargs["name"]}) - @base.atomic_action_timer("neutron.create_network") + @atomic.action_timer("neutron.create_network") def _create_network(self, network_create_args): """Create neutron network. @@ -73,12 +73,12 @@ class NeutronScenario(scenario.OpenStackScenario): return self.clients("neutron").create_network( {"network": network_create_args}) - @base.atomic_action_timer("neutron.list_networks") + @atomic.action_timer("neutron.list_networks") def _list_networks(self): """Return user networks list.""" return self.clients("neutron").list_networks()["networks"] - @base.atomic_action_timer("neutron.update_network") + @atomic.action_timer("neutron.update_network") def _update_network(self, network, network_update_args): """Update the network. @@ -93,7 +93,7 @@ class NeutronScenario(scenario.OpenStackScenario): return self.clients("neutron").update_network( network["network"]["id"], body) - @base.atomic_action_timer("neutron.delete_network") + @atomic.action_timer("neutron.delete_network") def _delete_network(self, network): """Delete neutron network. @@ -101,7 +101,7 @@ class NeutronScenario(scenario.OpenStackScenario): """ self.clients("neutron").delete_network(network["id"]) - @base.atomic_action_timer("neutron.create_subnet") + @atomic.action_timer("neutron.create_subnet") def _create_subnet(self, network, subnet_create_args, start_cidr=None): """Create neutron subnet. @@ -124,12 +124,12 @@ class NeutronScenario(scenario.OpenStackScenario): return self.clients("neutron").create_subnet( {"subnet": subnet_create_args}) - @base.atomic_action_timer("neutron.list_subnets") + @atomic.action_timer("neutron.list_subnets") def _list_subnets(self): """Returns user subnetworks list.""" return self.clients("neutron").list_subnets()["subnets"] - @base.atomic_action_timer("neutron.update_subnet") + @atomic.action_timer("neutron.update_subnet") def _update_subnet(self, subnet, subnet_update_args): """Update the neutron subnet. @@ -144,7 +144,7 @@ class NeutronScenario(scenario.OpenStackScenario): return self.clients("neutron").update_subnet( subnet["subnet"]["id"], body) - @base.atomic_action_timer("neutron.delete_subnet") + @atomic.action_timer("neutron.delete_subnet") def _delete_subnet(self, subnet): """Delete neutron subnet @@ -152,7 +152,7 @@ class NeutronScenario(scenario.OpenStackScenario): """ self.clients("neutron").delete_subnet(subnet["subnet"]["id"]) - @base.atomic_action_timer("neutron.create_router") + @atomic.action_timer("neutron.create_router") def _create_router(self, router_create_args, external_gw=False): """Create neutron router. @@ -174,12 +174,12 @@ class NeutronScenario(scenario.OpenStackScenario): return self.clients("neutron").create_router( {"router": router_create_args}) - @base.atomic_action_timer("neutron.list_routers") + @atomic.action_timer("neutron.list_routers") def _list_routers(self): """Returns user routers list.""" return self.clients("neutron").list_routers()["routers"] - @base.atomic_action_timer("neutron.delete_router") + @atomic.action_timer("neutron.delete_router") def _delete_router(self, router): """Delete neutron router @@ -187,7 +187,7 @@ class NeutronScenario(scenario.OpenStackScenario): """ self.clients("neutron").delete_router(router["router"]["id"]) - @base.atomic_action_timer("neutron.update_router") + @atomic.action_timer("neutron.update_router") def _update_router(self, router, router_update_args): """Update the neutron router. @@ -202,7 +202,7 @@ class NeutronScenario(scenario.OpenStackScenario): return self.clients("neutron").update_router( router["router"]["id"], body) - @base.atomic_action_timer("neutron.create_port") + @atomic.action_timer("neutron.create_port") def _create_port(self, network, port_create_args): """Create neutron port. @@ -215,12 +215,12 @@ class NeutronScenario(scenario.OpenStackScenario): "name", self._generate_random_name("rally_port_")) return self.clients("neutron").create_port({"port": port_create_args}) - @base.atomic_action_timer("neutron.list_ports") + @atomic.action_timer("neutron.list_ports") def _list_ports(self): """Return user ports list.""" return self.clients("neutron").list_ports()["ports"] - @base.atomic_action_timer("neutron.update_port") + @atomic.action_timer("neutron.update_port") def _update_port(self, port, port_update_args): """Update the neutron port. @@ -234,7 +234,7 @@ class NeutronScenario(scenario.OpenStackScenario): body = {"port": port_update_args} return self.clients("neutron").update_port(port["port"]["id"], body) - @base.atomic_action_timer("neutron.delete_port") + @atomic.action_timer("neutron.delete_port") def _delete_port(self, port): """Delete neutron port. @@ -264,7 +264,7 @@ class NeutronScenario(scenario.OpenStackScenario): subnets.append(subnet) return network, subnets - @base.atomic_action_timer("neutron.add_interface_router") + @atomic.action_timer("neutron.add_interface_router") def _add_interface_router(self, subnet, router): """Connect subnet to router. @@ -274,7 +274,7 @@ class NeutronScenario(scenario.OpenStackScenario): self.clients("neutron").add_interface_router( router["id"], {"subnet_id": subnet["id"]}) - @base.atomic_action_timer("neutron.remove_interface_router") + @atomic.action_timer("neutron.remove_interface_router") def _remove_interface_router(self, subnet, router): """Remove subnet from router @@ -299,7 +299,7 @@ class NeutronScenario(scenario.OpenStackScenario): "subnet_id": subnet_id} args.update(pool_create_args) if atomic_action: - with base.AtomicAction(self, "neutron.create_pool"): + with atomic.ActionTimer(self, "neutron.create_pool"): return self.clients("neutron").create_pool({"pool": args}) return self.clients("neutron").create_pool({"pool": args}) @@ -314,19 +314,19 @@ class NeutronScenario(scenario.OpenStackScenario): pools = [] for net in networks: subnets.extend(net.get("subnets", [])) - with base.AtomicAction(self, "neutron.create_%s_pools" % - len(subnets)): + with atomic.ActionTimer(self, "neutron.create_%s_pools" % + len(subnets)): for subnet_id in subnets: pools.append(self._create_lb_pool( subnet_id, atomic_action=False, **pool_create_args)) return pools - @base.atomic_action_timer("neutron.list_pools") + @atomic.action_timer("neutron.list_pools") def _list_v1_pools(self, **kwargs): """Return user lb pool list(v1).""" return self.clients("neutron").list_pools(**kwargs) - @base.atomic_action_timer("neutron.delete_pool") + @atomic.action_timer("neutron.delete_pool") def _delete_v1_pool(self, pool): """Delete neutron pool. @@ -334,7 +334,7 @@ class NeutronScenario(scenario.OpenStackScenario): """ self.clients("neutron").delete_pool(pool["id"]) - @base.atomic_action_timer("neutron.update_pool") + @atomic.action_timer("neutron.update_pool") def _update_v1_pool(self, pool, **pool_update_args): """Update pool. diff --git a/rally/plugins/openstack/scenarios/nova/floating_ips_bulk.py b/rally/plugins/openstack/scenarios/nova/floating_ips_bulk.py index 6fc7ab80b5..221ef18ff9 100644 --- a/rally/plugins/openstack/scenarios/nova/floating_ips_bulk.py +++ b/rally/plugins/openstack/scenarios/nova/floating_ips_bulk.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.nova import utils -from rally.task.scenarios import base from rally.task import validation @@ -26,7 +26,7 @@ class NovaFloatingIpsBulk(utils.NovaScenario): @validation.required_parameters("start_cidr") @validation.required_services(consts.Service.NOVA, consts.Service.NOVA_NET) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["nova"]}) + @scenario.configure(context={"admin_cleanup": ["nova"]}) def create_and_list_floating_ips_bulk(self, start_cidr, **kwargs): """Create nova floating IP by range and list it. @@ -43,7 +43,7 @@ class NovaFloatingIpsBulk(utils.NovaScenario): @validation.required_parameters("start_cidr") @validation.required_services(consts.Service.NOVA, consts.Service.NOVA_NET) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["nova"]}) + @scenario.configure(context={"admin_cleanup": ["nova"]}) def create_and_delete_floating_ips_bulk(self, start_cidr, **kwargs): """Create nova floating IP by range and delete it. diff --git a/rally/plugins/openstack/scenarios/nova/hypervisors.py b/rally/plugins/openstack/scenarios/nova/hypervisors.py index 1e801ae664..eb701d66b1 100644 --- a/rally/plugins/openstack/scenarios/nova/hypervisors.py +++ b/rally/plugins/openstack/scenarios/nova/hypervisors.py @@ -15,8 +15,8 @@ from rally.common import log as logging from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.nova import utils -from rally.task.scenarios import base from rally.task import validation @@ -28,7 +28,7 @@ class NovaHypervisors(utils.NovaScenario): @validation.required_services(consts.Service.NOVA) @validation.required_openstack(admin=True) - @base.scenario() + @scenario.configure() def list_hypervisors(self, detailed=True): """List hypervisors. diff --git a/rally/plugins/openstack/scenarios/nova/keypairs.py b/rally/plugins/openstack/scenarios/nova/keypairs.py index 178792d30a..feaf45b0bf 100644 --- a/rally/plugins/openstack/scenarios/nova/keypairs.py +++ b/rally/plugins/openstack/scenarios/nova/keypairs.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.nova import utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -25,7 +25,7 @@ class NovaKeypair(utils.NovaScenario): @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def create_and_list_keypairs(self, **kwargs): """Create a keypair with random name and list keypairs. @@ -39,7 +39,7 @@ class NovaKeypair(utils.NovaScenario): @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def create_and_delete_keypair(self, **kwargs): """Create a keypair with random name and delete keypair. @@ -56,7 +56,7 @@ class NovaKeypair(utils.NovaScenario): @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_delete_server_with_keypair(self, image, flavor, **kwargs): """Boot and delete server with keypair. diff --git a/rally/plugins/openstack/scenarios/nova/networks.py b/rally/plugins/openstack/scenarios/nova/networks.py index 92e8322044..3b04fdcb38 100644 --- a/rally/plugins/openstack/scenarios/nova/networks.py +++ b/rally/plugins/openstack/scenarios/nova/networks.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.nova import utils -from rally.task.scenarios import base from rally.task import validation @@ -26,7 +26,7 @@ class NovaNetworks(utils.NovaScenario): @validation.required_parameters("start_cidr") @validation.required_services(consts.Service.NOVA, consts.Service.NOVA_NET) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["nova.networks"]}) + @scenario.configure(context={"admin_cleanup": ["nova.networks"]}) def create_and_list_networks(self, start_cidr, **kwargs): """Create nova network and list all networks. @@ -41,7 +41,7 @@ class NovaNetworks(utils.NovaScenario): @validation.required_parameters("start_cidr") @validation.required_services(consts.Service.NOVA, consts.Service.NOVA_NET) @validation.required_openstack(admin=True) - @base.scenario(context={"admin_cleanup": ["nova.networks"]}) + @scenario.configure(context={"admin_cleanup": ["nova.networks"]}) def create_and_delete_network(self, start_cidr, **kwargs): """Create nova network and delete it. diff --git a/rally/plugins/openstack/scenarios/nova/security_group.py b/rally/plugins/openstack/scenarios/nova/security_group.py index 8fee1866fe..a7b47add0c 100644 --- a/rally/plugins/openstack/scenarios/nova/security_group.py +++ b/rally/plugins/openstack/scenarios/nova/security_group.py @@ -16,8 +16,9 @@ from rally.common.i18n import _ from rally import consts from rally import exceptions +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.nova import utils -from rally.task.scenarios import base +from rally.task import atomic from rally.task import types from rally.task import validation @@ -35,7 +36,7 @@ class NovaSecGroup(utils.NovaScenario): "rules_per_security_group") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def create_and_delete_secgroups(self, security_group_count, rules_per_security_group): """Create and delete security groups. @@ -59,7 +60,7 @@ class NovaSecGroup(utils.NovaScenario): "rules_per_security_group") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def create_and_list_secgroups(self, security_group_count, rules_per_security_group): """Create and list security groups. @@ -86,7 +87,7 @@ class NovaSecGroup(utils.NovaScenario): @validation.required_contexts("network") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_delete_server_with_secgroups(self, image, flavor, security_group_count, rules_per_security_group, @@ -120,7 +121,7 @@ class NovaSecGroup(utils.NovaScenario): **kwargs) action_name = "nova.get_attached_security_groups" - with base.AtomicAction(self, action_name): + with atomic.ActionTimer(self, action_name): attached_security_groups = server.list_security_group() self._delete_server(server) diff --git a/rally/plugins/openstack/scenarios/nova/servers.py b/rally/plugins/openstack/scenarios/nova/servers.py index e6c0a2d5ce..545e289df6 100644 --- a/rally/plugins/openstack/scenarios/nova/servers.py +++ b/rally/plugins/openstack/scenarios/nova/servers.py @@ -18,10 +18,10 @@ import jsonschema from rally.common import log as logging from rally import consts from rally import exceptions as rally_exceptions +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.cinder import utils as cinder_utils from rally.plugins.openstack.scenarios.nova import utils from rally.plugins.openstack.wrappers import network as network_wrapper -from rally.task.scenarios import base from rally.task import types from rally.task import utils as task_utils from rally.task import validation @@ -41,7 +41,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_list_server(self, image, flavor, detailed=True, **kwargs): """Boot a server from an image and then list all servers. @@ -65,7 +65,7 @@ class NovaServers(utils.NovaScenario, @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def list_servers(self, detailed=True): """List all servers. @@ -82,7 +82,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_delete_server(self, image, flavor, min_sleep=0, max_sleep=0, force_delete=False, **kwargs): @@ -108,7 +108,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_delete_multiple_servers(self, image, flavor, count=2, min_sleep=0, max_sleep=0, force_delete=False, **kwargs): @@ -135,7 +135,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova", "cinder"]}) + @scenario.configure(context={"cleanup": ["nova", "cinder"]}) def boot_server_from_volume_and_delete(self, image, flavor, volume_size, min_sleep=0, max_sleep=0, @@ -168,7 +168,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_bounce_server(self, image, flavor, force_delete=False, actions=None, **kwargs): """Boot a server and run specified actions against it. @@ -204,7 +204,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_lock_unlock_and_delete(self, image, flavor, min_sleep=0, max_sleep=0, force_delete=False, @@ -235,7 +235,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA, consts.Service.GLANCE) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova", "glance"]}) + @scenario.configure(context={"cleanup": ["nova", "glance"]}) def snapshot_server(self, image, flavor, force_delete=False, **kwargs): """Boot a server, make its snapshot and delete both. @@ -259,7 +259,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_server(self, image, flavor, auto_assign_nic=False, **kwargs): """Boot a server. @@ -278,7 +278,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova", "cinder"]}) + @scenario.configure(context={"cleanup": ["nova", "cinder"]}) def boot_server_from_volume(self, image, flavor, volume_size, auto_assign_nic=False, **kwargs): """Boot a server from volume. @@ -345,7 +345,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def resize_server(self, image, flavor, to_flavor, force_delete=False, **kwargs): """Boot a server, then resize and delete it. @@ -374,7 +374,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def suspend_and_resume_server(self, image, flavor, force_delete=False, **kwargs): """Create a server, suspend, resume and then delete it @@ -394,7 +394,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def pause_and_unpause_server(self, image, flavor, force_delete=False, **kwargs): """Create a server, pause, unpause and then delete it @@ -414,7 +414,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def shelve_and_unshelve_server(self, image, flavor, force_delete=False, **kwargs): """Create a server, shelve, unshelve and then delete it @@ -434,7 +434,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_live_migrate_server(self, image, flavor, block_migration=False, disk_over_commit=False, min_sleep=0, @@ -472,7 +472,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"cleanup": ["nova", "cinder"]}) + @scenario.configure(context={"cleanup": ["nova", "cinder"]}) def boot_server_from_volume_and_live_migrate(self, image, flavor, volume_size, block_migration=False, @@ -520,7 +520,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"cleanup": ["cinder", "nova"]}) + @scenario.configure(context={"cleanup": ["cinder", "nova"]}) def boot_server_attach_created_volume_and_live_migrate( self, image, @@ -579,7 +579,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_migrate_server(self, image, flavor, **kwargs): """Migrate a server. @@ -610,7 +610,7 @@ class NovaServers(utils.NovaScenario, @validation.image_valid_on_flavor("flavor", "to_image") @validation.required_services(consts.Service.NOVA) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_rebuild_server(self, from_image, to_image, flavor, **kwargs): """Rebuild a server. @@ -632,7 +632,7 @@ class NovaServers(utils.NovaScenario, @validation.required_services(consts.Service.NOVA) @validation.required_openstack(users=True) @validation.required_contexts("network") - @base.scenario(context={"cleanup": ["nova"]}) + @scenario.configure(context={"cleanup": ["nova"]}) def boot_and_associate_floating_ip(self, image, flavor, **kwargs): """Boot a server and associate a floating IP to it. diff --git a/rally/plugins/openstack/scenarios/nova/utils.py b/rally/plugins/openstack/scenarios/nova/utils.py index 699b005480..68f40bdd69 100644 --- a/rally/plugins/openstack/scenarios/nova/utils.py +++ b/rally/plugins/openstack/scenarios/nova/utils.py @@ -22,7 +22,7 @@ import six from rally import exceptions from rally.plugins.openstack import scenario from rally.plugins.openstack.wrappers import network as network_wrapper -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils NOVA_BENCHMARK_OPTS = [] @@ -91,12 +91,12 @@ CONF.register_opts(NOVA_BENCHMARK_OPTS, group=benchmark_group) class NovaScenario(scenario.OpenStackScenario): """Base class for Nova scenarios with basic atomic actions.""" - @base.atomic_action_timer("nova.list_servers") + @atomic.action_timer("nova.list_servers") def _list_servers(self, detailed=True): """Returns user servers list.""" return self.clients("nova").servers.list(detailed) - @base.atomic_action_timer("nova.boot_server") + @atomic.action_timer("nova.boot_server") def _boot_server(self, image_id, flavor_id, auto_assign_nic=False, name=None, **kwargs): """Boot a server. @@ -156,7 +156,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_reboot_poll_interval ) - @base.atomic_action_timer("nova.soft_reboot_server") + @atomic.action_timer("nova.soft_reboot_server") def _soft_reboot_server(self, server): """Reboot a server with soft reboot. @@ -167,7 +167,7 @@ class NovaScenario(scenario.OpenStackScenario): """ self._do_server_reboot(server, "SOFT") - @base.atomic_action_timer("nova.reboot_server") + @atomic.action_timer("nova.reboot_server") def _reboot_server(self, server): """Reboot a server with hard reboot. @@ -178,7 +178,7 @@ class NovaScenario(scenario.OpenStackScenario): """ self._do_server_reboot(server, "HARD") - @base.atomic_action_timer("nova.rebuild_server") + @atomic.action_timer("nova.rebuild_server") def _rebuild_server(self, server, image, **kwargs): """Rebuild a server with a new image. @@ -196,7 +196,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_rebuild_poll_interval ) - @base.atomic_action_timer("nova.start_server") + @atomic.action_timer("nova.start_server") def _start_server(self, server): """Start the given server. @@ -213,7 +213,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_start_poll_interval ) - @base.atomic_action_timer("nova.stop_server") + @atomic.action_timer("nova.stop_server") def _stop_server(self, server): """Stop the given server. @@ -230,7 +230,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_stop_poll_interval ) - @base.atomic_action_timer("nova.rescue_server") + @atomic.action_timer("nova.rescue_server") def _rescue_server(self, server): """Rescue the given server. @@ -248,7 +248,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_rescue_poll_interval ) - @base.atomic_action_timer("nova.unrescue_server") + @atomic.action_timer("nova.unrescue_server") def _unrescue_server(self, server): """Unrescue the given server. @@ -265,7 +265,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_unrescue_poll_interval ) - @base.atomic_action_timer("nova.suspend_server") + @atomic.action_timer("nova.suspend_server") def _suspend_server(self, server): """Suspends the given server. @@ -283,7 +283,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_suspend_poll_interval ) - @base.atomic_action_timer("nova.resume_server") + @atomic.action_timer("nova.resume_server") def _resume_server(self, server): """Resumes the suspended server. @@ -301,7 +301,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_resume_poll_interval ) - @base.atomic_action_timer("nova.pause_server") + @atomic.action_timer("nova.pause_server") def _pause_server(self, server): """Pause the live server. @@ -319,7 +319,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_pause_poll_interval ) - @base.atomic_action_timer("nova.unpause_server") + @atomic.action_timer("nova.unpause_server") def _unpause_server(self, server): """Unpause the paused server. @@ -337,7 +337,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_unpause_poll_interval ) - @base.atomic_action_timer("nova.shelve_server") + @atomic.action_timer("nova.shelve_server") def _shelve_server(self, server): """Shelve the given server. @@ -355,7 +355,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_shelve_poll_interval ) - @base.atomic_action_timer("nova.unshelve_server") + @atomic.action_timer("nova.unshelve_server") def _unshelve_server(self, server): """Unshelve the given server. @@ -381,7 +381,7 @@ class NovaScenario(scenario.OpenStackScenario): :param force: If True, force_delete will be used instead of delete. """ atomic_name = ("nova.%sdelete_server") % (force and "force_" or "") - with base.AtomicAction(self, atomic_name): + with atomic.ActionTimer(self, atomic_name): if force: server.force_delete() else: @@ -401,7 +401,7 @@ class NovaScenario(scenario.OpenStackScenario): :param force: If True, force_delete will be used instead of delete. """ atomic_name = ("nova.%sdelete_servers") % (force and "force_" or "") - with base.AtomicAction(self, atomic_name): + with atomic.ActionTimer(self, atomic_name): for server in servers: if force: server.force_delete() @@ -417,7 +417,7 @@ class NovaScenario(scenario.OpenStackScenario): benchmark.nova_server_delete_poll_interval ) - @base.atomic_action_timer("nova.delete_image") + @atomic.action_timer("nova.delete_image") def _delete_image(self, image): """Delete the given image. @@ -434,7 +434,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=check_interval ) - @base.atomic_action_timer("nova.create_image") + @atomic.action_timer("nova.create_image") def _create_image(self, server): """Create an image from the given server @@ -458,7 +458,7 @@ class NovaScenario(scenario.OpenStackScenario): ) return image - @base.atomic_action_timer("nova.create_keypair") + @atomic.action_timer("nova.create_keypair") def _create_keypair(self, **kwargs): """Create a keypair @@ -468,12 +468,12 @@ class NovaScenario(scenario.OpenStackScenario): keypair = self.clients("nova").keypairs.create(keypair_name, **kwargs) return keypair.name - @base.atomic_action_timer("nova.list_keypairs") + @atomic.action_timer("nova.list_keypairs") def _list_keypairs(self): """Return user keypairs list.""" return self.clients("nova").keypairs.list() - @base.atomic_action_timer("nova.delete_keypair") + @atomic.action_timer("nova.delete_keypair") def _delete_keypair(self, keypair_name): """Delete keypair @@ -481,7 +481,7 @@ class NovaScenario(scenario.OpenStackScenario): """ self.clients("nova").keypairs.delete(keypair_name) - @base.atomic_action_timer("nova.boot_servers") + @atomic.action_timer("nova.boot_servers") def _boot_servers(self, image_id, flavor_id, requests, name_prefix=None, instances_amount=1, **kwargs): """Boot multiple servers. @@ -522,7 +522,7 @@ class NovaScenario(scenario.OpenStackScenario): ) for server in servers] return servers - @base.atomic_action_timer("nova.associate_floating_ip") + @atomic.action_timer("nova.associate_floating_ip") def _associate_floating_ip(self, server, address, fixed_address=None): """Add floating IP to an instance @@ -540,7 +540,7 @@ class NovaScenario(scenario.OpenStackScenario): # Update server data server.addresses = server.manager.get(server.id).addresses - @base.atomic_action_timer("nova.dissociate_floating_ip") + @atomic.action_timer("nova.dissociate_floating_ip") def _dissociate_floating_ip(self, server, address): """Remove floating IP from an instance @@ -568,12 +568,12 @@ class NovaScenario(scenario.OpenStackScenario): return not must_exist return _check_addr - @base.atomic_action_timer("nova.list_networks") + @atomic.action_timer("nova.list_networks") def _list_networks(self): """Return user networks list.""" return self.clients("nova").networks.list() - @base.atomic_action_timer("nova.resize") + @atomic.action_timer("nova.resize") def _resize(self, server, flavor): server.resize(flavor) utils.wait_for( @@ -584,7 +584,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_server_resize_poll_interval ) - @base.atomic_action_timer("nova.resize_confirm") + @atomic.action_timer("nova.resize_confirm") def _resize_confirm(self, server, status="ACTIVE"): server.confirm_resize() utils.wait_for( @@ -596,7 +596,7 @@ class NovaScenario(scenario.OpenStackScenario): CONF.benchmark.nova_server_resize_confirm_poll_interval) ) - @base.atomic_action_timer("nova.resize_revert") + @atomic.action_timer("nova.resize_revert") def _resize_revert(self, server, status="ACTIVE"): server.revert_resize() utils.wait_for( @@ -608,7 +608,7 @@ class NovaScenario(scenario.OpenStackScenario): CONF.benchmark.nova_server_resize_revert_poll_interval) ) - @base.atomic_action_timer("nova.attach_volume") + @atomic.action_timer("nova.attach_volume") def _attach_volume(self, server, volume, device=None): server_id = server.id volume_id = volume.id @@ -624,7 +624,7 @@ class NovaScenario(scenario.OpenStackScenario): CONF.benchmark.nova_server_resize_revert_poll_interval) ) - @base.atomic_action_timer("nova.detach_volume") + @atomic.action_timer("nova.detach_volume") def _detach_volume(self, server, volume): server_id = server.id volume_id = volume.id @@ -638,7 +638,7 @@ class NovaScenario(scenario.OpenStackScenario): check_interval=CONF.benchmark.nova_detach_volume_poll_interval ) - @base.atomic_action_timer("nova.live_migrate") + @atomic.action_timer("nova.live_migrate") def _live_migrate(self, server, target_host, block_migration=False, disk_over_commit=False, skip_host_check=False): """Run live migration of the given server. @@ -671,7 +671,7 @@ class NovaScenario(scenario.OpenStackScenario): "Migration complete but instance did not change host: %s" % host_pre_migrate) - @base.atomic_action_timer("nova.find_host_to_migrate") + @atomic.action_timer("nova.find_host_to_migrate") def _find_host_to_migrate(self, server): """Find a compute node for live migration. @@ -695,7 +695,7 @@ class NovaScenario(scenario.OpenStackScenario): raise exceptions.InvalidHostException( "No valid host found to migrate") - @base.atomic_action_timer("nova.migrate") + @atomic.action_timer("nova.migrate") def _migrate(self, server, skip_host_check=False): """Run migration of the given server. @@ -724,8 +724,8 @@ class NovaScenario(scenario.OpenStackScenario): def _create_security_groups(self, security_group_count): security_groups = [] - with base.AtomicAction(self, "nova.create_%s_security_groups" % - security_group_count): + with atomic.ActionTimer(self, "nova.create_%s_security_groups" % + security_group_count): for i in range(security_group_count): sg_name = self._generate_random_name() sg = self.clients("nova").security_groups.create(sg_name, @@ -739,7 +739,7 @@ class NovaScenario(scenario.OpenStackScenario): ip_protocol="tcp", cidr="0.0.0.0/0"): action_name = ("nova.create_%s_rules" % (rules_per_security_group * len(security_groups))) - with base.AtomicAction(self, action_name): + with atomic.ActionTimer(self, action_name): for i in range(len(security_groups)): for j in range(rules_per_security_group): self.clients("nova").security_group_rules.create( @@ -750,22 +750,22 @@ class NovaScenario(scenario.OpenStackScenario): cidr=cidr) def _delete_security_groups(self, security_group): - with base.AtomicAction(self, "nova.delete_%s_security_groups" % - len(security_group)): + with atomic.ActionTimer(self, "nova.delete_%s_security_groups" % + len(security_group)): for sg in security_group: self.clients("nova").security_groups.delete(sg.id) def _list_security_groups(self): """Return security groups list.""" - with base.AtomicAction(self, "nova.list_security_groups"): + with atomic.ActionTimer(self, "nova.list_security_groups"): return self.clients("nova").security_groups.list() - @base.atomic_action_timer("nova.list_floating_ips_bulk") + @atomic.action_timer("nova.list_floating_ips_bulk") def _list_floating_ips_bulk(self): """List all floating IPs.""" return self.admin_clients("nova").floating_ips_bulk.list() - @base.atomic_action_timer("nova.create_floating_ips_bulk") + @atomic.action_timer("nova.create_floating_ips_bulk") def _create_floating_ips_bulk(self, ip_range, **kwargs): """Create floating IPs by range.""" ip_range = network_wrapper.generate_cidr(start_cidr=ip_range) @@ -773,17 +773,17 @@ class NovaScenario(scenario.OpenStackScenario): return self.admin_clients("nova").floating_ips_bulk.create( ip_range=ip_range, pool=pool_name, **kwargs) - @base.atomic_action_timer("nova.delete_floating_ips_bulk") + @atomic.action_timer("nova.delete_floating_ips_bulk") def _delete_floating_ips_bulk(self, ip_range): """Delete floating IPs by range.""" return self.admin_clients("nova").floating_ips_bulk.delete(ip_range) - @base.atomic_action_timer("nova.list_hypervisors") + @atomic.action_timer("nova.list_hypervisors") def _list_hypervisors(self, detailed=True): """List hypervisors.""" return self.admin_clients("nova").hypervisors.list(detailed) - @base.atomic_action_timer("nova.lock_server") + @atomic.action_timer("nova.lock_server") def _lock_server(self, server): """Lock the given server. @@ -791,7 +791,7 @@ class NovaScenario(scenario.OpenStackScenario): """ server.lock() - @base.atomic_action_timer("nova.unlock_server") + @atomic.action_timer("nova.unlock_server") def _unlock_server(self, server): """Unlock the given server. @@ -799,7 +799,7 @@ class NovaScenario(scenario.OpenStackScenario): """ server.unlock() - @base.atomic_action_timer("nova.create_network") + @atomic.action_timer("nova.create_network") def _create_network(self, ip_range, **kwargs): """Create nova network. @@ -810,7 +810,7 @@ class NovaScenario(scenario.OpenStackScenario): return self.admin_clients("nova").networks.create( label=net_label, cidr=ip_range, **kwargs) - @base.atomic_action_timer("nova.delete_network") + @atomic.action_timer("nova.delete_network") def _delete_network(self, net_id): """Delete nova network. diff --git a/rally/plugins/openstack/scenarios/quotas/quotas.py b/rally/plugins/openstack/scenarios/quotas/quotas.py index 7d45249f03..5463dd7be8 100644 --- a/rally/plugins/openstack/scenarios/quotas/quotas.py +++ b/rally/plugins/openstack/scenarios/quotas/quotas.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.quotas import utils -from rally.task.scenarios import base from rally.task import validation @@ -24,7 +24,7 @@ class Quotas(utils.QuotasScenario): @validation.required_services(consts.Service.NOVA) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"admin_cleanup": ["nova.quotas"]}) + @scenario.configure(context={"admin_cleanup": ["nova.quotas"]}) def nova_update(self, max_quota=1024): """Update quotas for Nova. @@ -35,7 +35,7 @@ class Quotas(utils.QuotasScenario): @validation.required_services(consts.Service.NOVA) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"admin_cleanup": ["nova.quotas"]}) + @scenario.configure(context={"admin_cleanup": ["nova.quotas"]}) def nova_update_and_delete(self, max_quota=1024): """Update and delete quotas for Nova. @@ -48,7 +48,7 @@ class Quotas(utils.QuotasScenario): @validation.required_services(consts.Service.CINDER) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"admin_cleanup": ["cinder.quotas"]}) + @scenario.configure(context={"admin_cleanup": ["cinder.quotas"]}) def cinder_update(self, max_quota=1024): """Update quotas for Cinder. @@ -59,7 +59,7 @@ class Quotas(utils.QuotasScenario): @validation.required_services(consts.Service.CINDER) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"admin_cleanup": ["cinder.quotas"]}) + @scenario.configure(context={"admin_cleanup": ["cinder.quotas"]}) def cinder_update_and_delete(self, max_quota=1024): """Update and Delete quotas for Cinder. @@ -71,7 +71,7 @@ class Quotas(utils.QuotasScenario): @validation.required_services(consts.Service.NEUTRON) @validation.required_openstack(admin=True, users=True) - @base.scenario(context={"admin_cleanup": ["neutron.quota"]}) + @scenario.configure(context={"admin_cleanup": ["neutron.quota"]}) def neutron_update(self, max_quota=1024): """Update quotas for neutron. diff --git a/rally/plugins/openstack/scenarios/quotas/utils.py b/rally/plugins/openstack/scenarios/quotas/utils.py index b56576bb16..b35eaf28bc 100644 --- a/rally/plugins/openstack/scenarios/quotas/utils.py +++ b/rally/plugins/openstack/scenarios/quotas/utils.py @@ -16,13 +16,13 @@ import random from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic class QuotasScenario(scenario.OpenStackScenario): """Base class for quotas scenarios with basic atomic actions.""" - @base.atomic_action_timer("quotas.update_quotas") + @atomic.action_timer("quotas.update_quotas") def _update_quotas(self, component, tenant_id, max_quota=1024, quota_update_fn=None): """Updates quotas. @@ -42,7 +42,7 @@ class QuotasScenario(scenario.OpenStackScenario): return quota_update_fn(tenant_id, **quotas) return self.admin_clients(component).quotas.update(tenant_id, **quotas) - @base.atomic_action_timer("quotas.delete_quotas") + @atomic.action_timer("quotas.delete_quotas") def _delete_quotas(self, component, tenant_id): """Delete quotas. diff --git a/rally/plugins/openstack/scenarios/sahara/clusters.py b/rally/plugins/openstack/scenarios/sahara/clusters.py index aed5161249..23f54d9d54 100644 --- a/rally/plugins/openstack/scenarios/sahara/clusters.py +++ b/rally/plugins/openstack/scenarios/sahara/clusters.py @@ -15,8 +15,8 @@ from rally.common import log as logging from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.sahara import utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -34,7 +34,7 @@ class SaharaClusters(utils.SaharaScenario): @validation.number("workers_count", minval=1, integer_only=True) @validation.required_services(consts.Service.SAHARA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["sahara"]}) + @scenario.configure(context={"cleanup": ["sahara"]}) def create_and_delete_cluster(self, flavor, workers_count, plugin_name, hadoop_version, floating_ip_pool=None, volumes_per_node=None, @@ -102,7 +102,7 @@ class SaharaClusters(utils.SaharaScenario): @validation.required_services(consts.Service.SAHARA) @validation.required_contexts("users", "sahara_image") @validation.number("workers_count", minval=1, integer_only=True) - @base.scenario(context={"cleanup": ["sahara"]}) + @scenario.configure(context={"cleanup": ["sahara"]}) def create_scale_delete_cluster(self, flavor, workers_count, plugin_name, hadoop_version, deltas, floating_ip_pool=None, diff --git a/rally/plugins/openstack/scenarios/sahara/jobs.py b/rally/plugins/openstack/scenarios/sahara/jobs.py index 1840688555..657e110655 100644 --- a/rally/plugins/openstack/scenarios/sahara/jobs.py +++ b/rally/plugins/openstack/scenarios/sahara/jobs.py @@ -15,8 +15,8 @@ from rally.common import log as logging from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.sahara import utils -from rally.task.scenarios import base from rally.task import validation LOG = logging.getLogger(__name__) @@ -28,7 +28,7 @@ class SaharaJob(utils.SaharaScenario): @validation.required_services(consts.Service.SAHARA) @validation.required_contexts("users", "sahara_image", "sahara_edp", "sahara_cluster") - @base.scenario(context={"cleanup": ["sahara"]}) + @scenario.configure(context={"cleanup": ["sahara"]}) def create_launch_job(self, job_type, configs, job_idx=0): """Create and execute a Sahara EDP Job. @@ -71,7 +71,7 @@ class SaharaJob(utils.SaharaScenario): @validation.required_services(consts.Service.SAHARA) @validation.required_contexts("users", "sahara_image", "sahara_edp", "sahara_cluster") - @base.scenario(context={"cleanup": ["sahara"]}) + @scenario.configure(context={"cleanup": ["sahara"]}) def create_launch_job_sequence(self, jobs): """Create and execute a sequence of the Sahara EDP Jobs. @@ -88,7 +88,7 @@ class SaharaJob(utils.SaharaScenario): @validation.required_services(consts.Service.SAHARA) @validation.required_contexts("users", "sahara_image", "sahara_edp", "sahara_cluster") - @base.scenario(context={"cleanup": ["sahara"]}) + @scenario.configure(context={"cleanup": ["sahara"]}) def create_launch_job_sequence_with_scaling(self, jobs, deltas): """Create and execute Sahara EDP Jobs on a scaling Cluster. diff --git a/rally/plugins/openstack/scenarios/sahara/node_group_templates.py b/rally/plugins/openstack/scenarios/sahara/node_group_templates.py index 725e7b0a8c..73ae33cd87 100644 --- a/rally/plugins/openstack/scenarios/sahara/node_group_templates.py +++ b/rally/plugins/openstack/scenarios/sahara/node_group_templates.py @@ -14,8 +14,8 @@ # under the License. from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.sahara import utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -27,7 +27,7 @@ class SaharaNodeGroupTemplates(utils.SaharaScenario): @validation.flavor_exists("flavor") @validation.required_services(consts.Service.SAHARA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["sahara"]}) + @scenario.configure(context={"cleanup": ["sahara"]}) def create_and_list_node_group_templates(self, flavor, plugin_name="vanilla", hadoop_version="1.2.1"): @@ -62,7 +62,7 @@ class SaharaNodeGroupTemplates(utils.SaharaScenario): @validation.flavor_exists("flavor") @validation.required_services(consts.Service.SAHARA) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["sahara"]}) + @scenario.configure(context={"cleanup": ["sahara"]}) def create_delete_node_group_templates(self, flavor, plugin_name="vanilla", hadoop_version="1.2.1"): diff --git a/rally/plugins/openstack/scenarios/sahara/utils.py b/rally/plugins/openstack/scenarios/sahara/utils.py index 429104f156..01b5a3345e 100644 --- a/rally/plugins/openstack/scenarios/sahara/utils.py +++ b/rally/plugins/openstack/scenarios/sahara/utils.py @@ -25,7 +25,7 @@ from rally import consts from rally import exceptions from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.sahara import consts as sahara_consts -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils LOG = logging.getLogger(__name__) @@ -53,12 +53,12 @@ class SaharaScenario(scenario.OpenStackScenario): RESOURCE_NAME_LENGTH = 20 - @base.atomic_action_timer("sahara.list_node_group_templates") + @atomic.action_timer("sahara.list_node_group_templates") def _list_node_group_templates(self): """Return user Node Group Templates list.""" return self.clients("sahara").node_group_templates.list() - @base.atomic_action_timer("sahara.create_master_node_group_template") + @atomic.action_timer("sahara.create_master_node_group_template") def _create_master_node_group_template(self, flavor_id, plugin_name, hadoop_version): """Create a master Node Group Template with a random name. @@ -79,7 +79,7 @@ class SaharaScenario(scenario.OpenStackScenario): node_processes=sahara_consts.NODE_PROCESSES[plugin_name] [hadoop_version]["master"]) - @base.atomic_action_timer("sahara.create_worker_node_group_template") + @atomic.action_timer("sahara.create_worker_node_group_template") def _create_worker_node_group_template(self, flavor_id, plugin_name, hadoop_version): """Create a worker Node Group Template with a random name. @@ -100,7 +100,7 @@ class SaharaScenario(scenario.OpenStackScenario): node_processes=sahara_consts.NODE_PROCESSES[plugin_name] [hadoop_version]["worker"]) - @base.atomic_action_timer("sahara.delete_node_group_template") + @atomic.action_timer("sahara.delete_node_group_template") def _delete_node_group_template(self, node_group): """Delete a Node Group Template by id. @@ -218,7 +218,7 @@ class SaharaScenario(scenario.OpenStackScenario): } return replication_config - @base.atomic_action_timer("sahara.launch_cluster") + @atomic.action_timer("sahara.launch_cluster") def _launch_cluster(self, plugin_name, hadoop_version, flavor_id, image_id, workers_count, floating_ip_pool=None, volumes_per_node=None, @@ -363,7 +363,7 @@ class SaharaScenario(scenario.OpenStackScenario): self._wait_active(cluster) - @base.atomic_action_timer("sahara.scale_up") + @atomic.action_timer("sahara.scale_up") def _scale_cluster_up(self, cluster, delta): """Add a given number of worker nodes to the cluster. @@ -373,7 +373,7 @@ class SaharaScenario(scenario.OpenStackScenario): """ self._scale_cluster(cluster, delta) - @base.atomic_action_timer("sahara.scale_down") + @atomic.action_timer("sahara.scale_down") def _scale_cluster_down(self, cluster, delta): """Remove a given number of worker nodes from the cluster. @@ -383,7 +383,7 @@ class SaharaScenario(scenario.OpenStackScenario): """ self._scale_cluster(cluster, delta) - @base.atomic_action_timer("sahara.delete_cluster") + @atomic.action_timer("sahara.delete_cluster") def _delete_cluster(self, cluster): """Delete cluster. @@ -450,7 +450,7 @@ class SaharaScenario(scenario.OpenStackScenario): :param job_idx: The index of a job in a sequence """ - @base.atomic_action_timer("sahara.job_execution_%s" % job_idx) + @atomic.action_timer("sahara.job_execution_%s" % job_idx) def run(self): job_execution = self.clients("sahara").job_executions.create( job_id=job_id, diff --git a/rally/plugins/openstack/scenarios/swift/objects.py b/rally/plugins/openstack/scenarios/swift/objects.py index 2adc651859..09b48b8c5c 100644 --- a/rally/plugins/openstack/scenarios/swift/objects.py +++ b/rally/plugins/openstack/scenarios/swift/objects.py @@ -16,8 +16,9 @@ import tempfile from rally import consts +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.swift import utils -from rally.task.scenarios import base +from rally.task import atomic from rally.task import validation @@ -26,7 +27,7 @@ class SwiftObjects(utils.SwiftScenario): @validation.required_services(consts.Service.SWIFT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["swift"]}) + @scenario.configure(context={"cleanup": ["swift"]}) def create_container_and_object_then_list_objects( self, objects_per_container=1, object_size=1024, **kwargs): @@ -45,7 +46,7 @@ class SwiftObjects(utils.SwiftScenario): # set dummy file to specified object size dummy_file.truncate(object_size) container_name = self._create_container(**kwargs) - with base.AtomicAction(self, "swift.create_%s" % key_suffix): + with atomic.ActionTimer(self, "swift.create_%s" % key_suffix): for i in range(objects_per_container): dummy_file.seek(0) self._upload_object(container_name, dummy_file, @@ -54,7 +55,7 @@ class SwiftObjects(utils.SwiftScenario): @validation.required_services(consts.Service.SWIFT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["swift"]}) + @scenario.configure(context={"cleanup": ["swift"]}) def create_container_and_object_then_delete_all( self, objects_per_container=1, object_size=1024, **kwargs): @@ -74,7 +75,7 @@ class SwiftObjects(utils.SwiftScenario): # set dummy file to specified object size dummy_file.truncate(object_size) container_name = self._create_container(**kwargs) - with base.AtomicAction(self, "swift.create_%s" % key_suffix): + with atomic.ActionTimer(self, "swift.create_%s" % key_suffix): for i in range(objects_per_container): dummy_file.seek(0) object_name = self._upload_object(container_name, @@ -82,7 +83,7 @@ class SwiftObjects(utils.SwiftScenario): atomic_action=False)[1] objects_list.append(object_name) - with base.AtomicAction(self, "swift.delete_%s" % key_suffix): + with atomic.ActionTimer(self, "swift.delete_%s" % key_suffix): for object_name in objects_list: self._delete_object(container_name, object_name, atomic_action=False) @@ -90,7 +91,7 @@ class SwiftObjects(utils.SwiftScenario): @validation.required_services(consts.Service.SWIFT) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["swift"]}) + @scenario.configure(context={"cleanup": ["swift"]}) def create_container_and_object_then_download_object( self, objects_per_container=1, object_size=1024, **kwargs): @@ -110,7 +111,7 @@ class SwiftObjects(utils.SwiftScenario): # set dummy file to specified object size dummy_file.truncate(object_size) container_name = self._create_container(**kwargs) - with base.AtomicAction(self, "swift.create_%s" % key_suffix): + with atomic.ActionTimer(self, "swift.create_%s" % key_suffix): for i in range(objects_per_container): dummy_file.seek(0) object_name = self._upload_object(container_name, @@ -118,7 +119,7 @@ class SwiftObjects(utils.SwiftScenario): atomic_action=False)[1] objects_list.append(object_name) - with base.AtomicAction(self, "swift.download_%s" % key_suffix): + with atomic.ActionTimer(self, "swift.download_%s" % key_suffix): for object_name in objects_list: self._download_object(container_name, object_name, atomic_action=False) diff --git a/rally/plugins/openstack/scenarios/swift/utils.py b/rally/plugins/openstack/scenarios/swift/utils.py index effa241936..a5659f7659 100644 --- a/rally/plugins/openstack/scenarios/swift/utils.py +++ b/rally/plugins/openstack/scenarios/swift/utils.py @@ -14,13 +14,13 @@ # under the License. from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic class SwiftScenario(scenario.OpenStackScenario): """Base class for Swift scenarios with basic atomic actions.""" - @base.atomic_action_timer("swift.list_containers") + @atomic.action_timer("swift.list_containers") def _list_containers(self, full_listing=True, **kwargs): """Return list of containers. @@ -53,7 +53,7 @@ class SwiftScenario(scenario.OpenStackScenario): prefix="rally_container_") if atomic_action: - with base.AtomicAction(self, "swift.create_container"): + with atomic.ActionTimer(self, "swift.create_container"): self.clients("swift").put_container(container_name, **kwargs) else: self.clients("swift").put_container(container_name, **kwargs) @@ -68,7 +68,7 @@ class SwiftScenario(scenario.OpenStackScenario): :param kwargs: dict, other optional parameters to delete_container """ if atomic_action: - with base.AtomicAction(self, "swift.delete_container"): + with atomic.ActionTimer(self, "swift.delete_container"): self.clients("swift").delete_container(container_name, **kwargs) else: @@ -88,7 +88,7 @@ class SwiftScenario(scenario.OpenStackScenario): :returns: tuple, (dict of response headers, a list of objects) """ if atomic_action: - with base.AtomicAction(self, "swift.list_objects"): + with atomic.ActionTimer(self, "swift.list_objects"): return self.clients("swift").get_container( container_name, full_listing=full_listing, **kwargs) @@ -114,7 +114,7 @@ class SwiftScenario(scenario.OpenStackScenario): object_name = self._generate_random_name(prefix="rally_object_") if atomic_action: - with base.AtomicAction(self, "swift.upload_object"): + with atomic.ActionTimer(self, "swift.upload_object"): return (self.clients("swift").put_object(container_name, object_name, content, **kwargs), @@ -138,7 +138,7 @@ class SwiftScenario(scenario.OpenStackScenario): :returns: tuple, (dict of response headers, the object's contents) """ if atomic_action: - with base.AtomicAction(self, "swift.download_object"): + with atomic.ActionTimer(self, "swift.download_object"): return self.clients("swift").get_object(container_name, object_name, **kwargs) @@ -156,7 +156,7 @@ class SwiftScenario(scenario.OpenStackScenario): :param kwargs: dict, other optional parameters to delete_object """ if atomic_action: - with base.AtomicAction(self, "swift.delete_object"): + with atomic.ActionTimer(self, "swift.delete_object"): self.clients("swift").delete_object(container_name, object_name, **kwargs) else: diff --git a/rally/plugins/openstack/scenarios/tempest/tempest.py b/rally/plugins/openstack/scenarios/tempest/tempest.py index 8823b9a1fa..724e44e458 100644 --- a/rally/plugins/openstack/scenarios/tempest/tempest.py +++ b/rally/plugins/openstack/scenarios/tempest/tempest.py @@ -16,7 +16,6 @@ from rally import consts from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.tempest import utils -from rally.task.scenarios import base from rally.task import validation @@ -25,7 +24,7 @@ class TempestScenario(scenario.OpenStackScenario): @validation.tempest_tests_exists() @validation.required_openstack(admin=True) - @base.scenario(context={"tempest": {}}) + @scenario.configure(context={"tempest": {}}) @utils.tempest_log_wrapper def single_test(self, test_name, log_file, tempest_conf=None): """Launch a single Tempest test by its name. @@ -42,7 +41,7 @@ class TempestScenario(scenario.OpenStackScenario): tempest_conf=tempest_conf) @validation.required_openstack(admin=True) - @base.scenario(context={"tempest": {}}) + @scenario.configure(context={"tempest": {}}) @utils.tempest_log_wrapper def all(self, log_file, tempest_conf=None): """Launch all discovered Tempest tests by their names. @@ -56,7 +55,7 @@ class TempestScenario(scenario.OpenStackScenario): @validation.tempest_set_exists() @validation.required_openstack(admin=True) - @base.scenario(context={"tempest": {}}) + @scenario.configure(context={"tempest": {}}) @utils.tempest_log_wrapper def set(self, set_name, log_file, tempest_conf=None): """Launch all Tempest tests from a given set. @@ -78,7 +77,7 @@ class TempestScenario(scenario.OpenStackScenario): @validation.tempest_tests_exists() @validation.required_openstack(admin=True) - @base.scenario(context={"tempest": {}}) + @scenario.configure(context={"tempest": {}}) @utils.tempest_log_wrapper def list_of_tests(self, test_names, log_file, tempest_conf=None): """Launch all Tempest tests from a given list of their names. @@ -92,7 +91,7 @@ class TempestScenario(scenario.OpenStackScenario): tempest_conf=tempest_conf) @validation.required_openstack(admin=True) - @base.scenario(context={"tempest": {}}) + @scenario.configure(context={"tempest": {}}) @utils.tempest_log_wrapper def specific_regex(self, regex, log_file, tempest_conf=None): """Launch Tempest tests whose names match a given regular expression. diff --git a/rally/plugins/openstack/scenarios/vm/utils.py b/rally/plugins/openstack/scenarios/vm/utils.py index 151f1c21d9..93f6dcf942 100644 --- a/rally/plugins/openstack/scenarios/vm/utils.py +++ b/rally/plugins/openstack/scenarios/vm/utils.py @@ -26,7 +26,7 @@ from rally.common import sshutils from rally.plugins.openstack.scenarios.cinder import utils as cinder_utils from rally.plugins.openstack.scenarios.nova import utils as nova_utils from rally.plugins.openstack.wrappers import network as network_wrapper -from rally.task.scenarios import base +from rally.task import atomic from rally.task import utils from rally.task import validation @@ -57,7 +57,7 @@ class VMScenario(nova_utils.NovaScenario, cinder_utils.CinderScenario): RESOURCE_NAME_PREFIX = "rally_vm_" - @base.atomic_action_timer("vm.run_command_over_ssh") + @atomic.action_timer("vm.run_command_over_ssh") def _run_command_over_ssh(self, ssh, command): """Run command inside an instance. @@ -127,7 +127,7 @@ class VMScenario(nova_utils.NovaScenario, cinder_utils.CinderScenario): "id": fip.get("id"), "is_floating": use_floating_ip} - @base.atomic_action_timer("vm.attach_floating_ip") + @atomic.action_timer("vm.attach_floating_ip") def _attach_floating_ip(self, server, floating_network): internal_network = list(server.networks)[0] fixed_ip = server.addresses[internal_network][0]["addr"] @@ -140,7 +140,7 @@ class VMScenario(nova_utils.NovaScenario, cinder_utils.CinderScenario): return fip - @base.atomic_action_timer("vm.delete_floating_ip") + @atomic.action_timer("vm.delete_floating_ip") def _delete_floating_ip(self, server, fip): with logging.ExceptionLogger( LOG, _("Unable to delete IP: %s") % fip["ip"]): @@ -154,11 +154,11 @@ class VMScenario(nova_utils.NovaScenario, cinder_utils.CinderScenario): self._delete_floating_ip(server, fip) return self._delete_server(server, force=force_delete) - @base.atomic_action_timer("vm.wait_for_ssh") + @atomic.action_timer("vm.wait_for_ssh") def _wait_for_ssh(self, ssh): ssh.wait() - @base.atomic_action_timer("vm.wait_for_ping") + @atomic.action_timer("vm.wait_for_ping") def _wait_for_ping(self, server_ip): server_ip = netaddr.IPAddress(server_ip) utils.wait_for( diff --git a/rally/plugins/openstack/scenarios/vm/vmtasks.py b/rally/plugins/openstack/scenarios/vm/vmtasks.py index a7022c1e34..631807f52f 100644 --- a/rally/plugins/openstack/scenarios/vm/vmtasks.py +++ b/rally/plugins/openstack/scenarios/vm/vmtasks.py @@ -18,8 +18,8 @@ import json from rally.common import utils from rally import consts from rally import exceptions +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.vm import utils as vm_utils -from rally.task.scenarios import base from rally.task import types from rally.task import validation @@ -42,8 +42,8 @@ class VMTasks(vm_utils.VMScenario): @validation.external_network_exists("floating_network") @validation.required_services(consts.Service.NOVA, consts.Service.CINDER) @validation.required_openstack(users=True) - @base.scenario(context={"cleanup": ["nova", "cinder"], - "keypair": {}, "allow_ssh": {}}) + @scenario.configure(context={"cleanup": ["nova", "cinder"], + "keypair": {}, "allow_ssh": {}}) def boot_runcommand_delete(self, image, flavor, username, password=None, diff --git a/rally/plugins/openstack/scenarios/zaqar/basic.py b/rally/plugins/openstack/scenarios/zaqar/basic.py index 5590984e3b..e41ad99677 100644 --- a/rally/plugins/openstack/scenarios/zaqar/basic.py +++ b/rally/plugins/openstack/scenarios/zaqar/basic.py @@ -14,8 +14,8 @@ import random +from rally.plugins.openstack import scenario from rally.plugins.openstack.scenarios.zaqar import utils as zutils -from rally.task.scenarios import base from rally.task import validation @@ -23,7 +23,7 @@ class ZaqarBasic(zutils.ZaqarScenario): """Benchmark scenarios for Zaqar.""" @validation.number("name_length", minval=10) - @base.scenario(context={"cleanup": ["zaqar"]}) + @scenario.configure(context={"cleanup": ["zaqar"]}) def create_queue(self, name_length=10, **kwargs): """Create a Zaqar queue with a random name. @@ -34,7 +34,7 @@ class ZaqarBasic(zutils.ZaqarScenario): self._queue_create(name_length=name_length, **kwargs) @validation.number("name_length", minval=10) - @base.scenario(context={"cleanup": ["zaqar"]}) + @scenario.configure(context={"cleanup": ["zaqar"]}) def producer_consumer(self, name_length=10, min_msg_count=50, max_msg_count=200, **kwargs): """Serial message producer/consumer. diff --git a/rally/plugins/openstack/scenarios/zaqar/utils.py b/rally/plugins/openstack/scenarios/zaqar/utils.py index 6c817952eb..305ff6b829 100644 --- a/rally/plugins/openstack/scenarios/zaqar/utils.py +++ b/rally/plugins/openstack/scenarios/zaqar/utils.py @@ -13,13 +13,13 @@ # under the License. from rally.plugins.openstack import scenario -from rally.task.scenarios import base +from rally.task import atomic class ZaqarScenario(scenario.OpenStackScenario): """Base class for Zaqar scenarios with basic atomic actions.""" - @base.atomic_action_timer("zaqar.create_queue") + @atomic.action_timer("zaqar.create_queue") def _queue_create(self, name_length=10, **kwargs): """Create a Zaqar queue with random name. @@ -31,7 +31,7 @@ class ZaqarScenario(scenario.OpenStackScenario): name = self._generate_random_name(length=name_length) return self.clients("zaqar").queue(name, **kwargs) - @base.atomic_action_timer("zaqar.delete_queue") + @atomic.action_timer("zaqar.delete_queue") def _queue_delete(self, queue): """Removes a Zaqar queue. @@ -48,11 +48,11 @@ class ZaqarScenario(scenario.OpenStackScenario): :param min_msg_count: minimum number of messages :param max_msg_count: maximum number of messages """ - with base.AtomicAction(self, "zaqar.post_between_%s_and_%s_messages" % - (min_msg_count, max_msg_count)): + with atomic.ActionTimer(self, "zaqar.post_between_%s_and_%s_messages" % + (min_msg_count, max_msg_count)): queue.post(messages) - @base.atomic_action_timer("zaqar.list_messages") + @atomic.action_timer("zaqar.list_messages") def _messages_list(self, queue): """Gets messages from a given Zaqar queue. diff --git a/rally/task/atomic.py b/rally/task/atomic.py new file mode 100644 index 0000000000..576fc8e84c --- /dev/null +++ b/rally/task/atomic.py @@ -0,0 +1,23 @@ +# Copyright 2015: Mirantis Inc. +# 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.task import scenario + +# TODO(boris-42): In future we will move code from scenario to atomic action +# to simplify migration to new code we will make just links for +# now +ActionTimer = scenario.AtomicAction +action_timer = scenario.atomic_action_timer diff --git a/rally/task/engine.py b/rally/task/engine.py index 7a76bbb44d..a016ce3356 100644 --- a/rally/task/engine.py +++ b/rally/task/engine.py @@ -32,7 +32,7 @@ from rally.plugins.openstack.context.keystone import existing_users from rally.plugins.openstack.context.keystone import users as users_ctx from rally.task import context from rally.task import runner -from rally.task.scenarios import base as base_scenario +from rally.task import scenario from rally.task import sla @@ -179,7 +179,7 @@ class BenchmarkEngine(object): @rutils.log_task_wrapper(LOG.info, _("Task validation of scenarios names.")) def _validate_config_scenarios_name(self, config): - available = set(base_scenario.Scenario.list_benchmark_scenarios()) + available = set(scenario.Scenario.list_benchmark_scenarios()) specified = set(six.iterkeys(config)) if not specified.issubset(available): @@ -188,7 +188,7 @@ class BenchmarkEngine(object): @rutils.log_task_wrapper(LOG.info, _("Task validation of syntax.")) def _validate_config_syntax(self, config): - for scenario, values in six.iteritems(config): + for scenario_name, values in six.iteritems(config): for pos, kw in enumerate(values): try: runner.ScenarioRunner.validate(kw.get("runner", {})) @@ -198,7 +198,7 @@ class BenchmarkEngine(object): except (exceptions.RallyException, jsonschema.ValidationError) as e: raise exceptions.InvalidBenchmarkConfig( - name=scenario, + name=scenario_name, pos=pos, config=kw, reason=six.text_type(e) ) @@ -206,9 +206,8 @@ class BenchmarkEngine(object): def _validate_config_semantic_helper(self, admin, user, name, pos, deployment, kwargs): try: - base_scenario.Scenario.validate(name, kwargs, admin=admin, - users=[user], - deployment=deployment) + scenario.Scenario.validate(name, kwargs, admin=admin, + users=[user], deployment=deployment) except exceptions.InvalidScenarioArgument as e: kw = {"name": name, "pos": pos, "config": kwargs, "reason": six.text_type(e)} @@ -266,7 +265,7 @@ class BenchmarkEngine(object): return runner.ScenarioRunner.get(cfg["type"])(self.task, cfg) def _prepare_context(self, ctx, name, endpoint): - scenario_context = base_scenario.Scenario.meta(name, "context") + scenario_context = scenario.Scenario.meta(name, "context") if self.existing_users and "users" not in ctx: scenario_context.setdefault("existing_users", self.existing_users) elif "users" not in ctx: diff --git a/rally/task/runner.py b/rally/task/runner.py index a88be8f494..03fcde9b7c 100644 --- a/rally/task/runner.py +++ b/rally/task/runner.py @@ -25,7 +25,7 @@ from rally.common.plugin import plugin from rally.common import utils as rutils from rally import consts from rally.task import context -from rally.task.scenarios import base as scenario_base +from rally.task import scenario from rally.task import types from rally.task import utils @@ -54,13 +54,13 @@ def _run_scenario_once(args): {"task": context_obj["task"]["uuid"], "iteration": iteration}) context_obj["iteration"] = iteration - scenario = cls(context_obj) + scenario_inst = cls(context_obj) error = [] scenario_output = {"errors": "", "data": {}} try: with rutils.Timer() as timer: - scenario_output = getattr(scenario, + scenario_output = getattr(scenario_inst, method_name)(**kwargs) or scenario_output except Exception as e: error = utils.format_exc(e) @@ -72,12 +72,12 @@ def _run_scenario_once(args): {"task": context_obj["task"]["uuid"], "iteration": iteration, "status": status}) - return {"duration": timer.duration() - scenario.idle_duration(), + return {"duration": timer.duration() - scenario_inst.idle_duration(), "timestamp": timer.timestamp(), - "idle_duration": scenario.idle_duration(), + "idle_duration": scenario_inst.idle_duration(), "error": error, "scenario_output": scenario_output, - "atomic_actions": scenario.atomic_actions()} + "atomic_actions": scenario_inst.atomic_actions()} def _worker_thread(queue, args): @@ -200,7 +200,7 @@ class ScenarioRunner(plugin.Plugin): def run(self, name, context, args): cls_name, method_name = name.split(".", 1) - cls = scenario_base.Scenario.get_by_name(cls_name) + cls = scenario.Scenario.get_by_name(cls_name) self.aborted.clear() diff --git a/rally/task/scenarios/base.py b/rally/task/scenario.py similarity index 99% rename from rally/task/scenarios/base.py rename to rally/task/scenario.py index ab275c9773..ea5c19dc45 100644 --- a/rally/task/scenarios/base.py +++ b/rally/task/scenario.py @@ -31,7 +31,7 @@ from rally.task import functional LOG = logging.getLogger(__name__) -def scenario(context=None): +def configure(context=None): """Make from plain python method benchmark. It sets 2 attributes to function: diff --git a/rally/task/scenarios/__init__.py b/rally/task/scenarios/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/rally/task/types.py b/rally/task/types.py index 5435139d1a..a7e3728e85 100644 --- a/rally/task/types.py +++ b/rally/task/types.py @@ -21,7 +21,7 @@ import re from rally import exceptions from rally import osclients -from rally.task.scenarios import base +from rally.task import scenario def set(**kwargs): @@ -50,8 +50,9 @@ def preprocess(cls, method_name, context, args): and resource configuration """ - preprocessors = base.Scenario.meta(cls, method_name=method_name, - attr_name="preprocessors", default={}) + preprocessors = scenario.Scenario.meta(cls, method_name=method_name, + attr_name="preprocessors", + default={}) clients = osclients.Clients(context["admin"]["endpoint"]) processed_args = copy.deepcopy(args) diff --git a/tests/functional/extra/fake_dir1/fake_plugin1.py b/tests/functional/extra/fake_dir1/fake_plugin1.py index 45ddf52272..2f113fa1da 100644 --- a/tests/functional/extra/fake_dir1/fake_plugin1.py +++ b/tests/functional/extra/fake_dir1/fake_plugin1.py @@ -13,13 +13,13 @@ # License for the specific language governing permissions and limitations # under the License. -from rally.task.scenarios import base +from rally.task import scenario -class FakeScenarioPlugin1(base.Scenario): +class FakeScenarioPlugin1(scenario.Scenario): """Sample fake plugin.""" - @base.scenario() + @scenario.configure() def list(self): """Fake scenario.""" pass diff --git a/tests/functional/extra/fake_dir2/fake_plugin2.py b/tests/functional/extra/fake_dir2/fake_plugin2.py index fb3ea00324..bf70f1c5dc 100644 --- a/tests/functional/extra/fake_dir2/fake_plugin2.py +++ b/tests/functional/extra/fake_dir2/fake_plugin2.py @@ -13,13 +13,13 @@ # License for the specific language governing permissions and limitations # under the License. -from rally.task.scenarios import base +from rally.task import scenario -class FakeScenarioPlugin2(base.Scenario): +class FakeScenarioPlugin2(scenario.Scenario): """Sample fake plugin.""" - @base.scenario() + @scenario.configure() def list(self): """Fake scenario.""" pass diff --git a/tests/unit/cli/commands/test_info.py b/tests/unit/cli/commands/test_info.py index 24751b15e4..235cdfdb85 100644 --- a/tests/unit/cli/commands/test_info.py +++ b/tests/unit/cli/commands/test_info.py @@ -24,12 +24,12 @@ from rally.deployment.serverprovider.providers import ( from rally import exceptions from rally.plugins.common.scenarios.dummy import dummy from rally.plugins.common.sla import failure_rate -from rally.task.scenarios import base as scenario_base +from rally.task import scenario from rally.task import sla from tests.unit import test -SCENARIO = "rally.cli.commands.info.scenario_base.Scenario" +SCENARIO = "rally.cli.commands.info.scenario.Scenario" SLA = "rally.cli.commands.info.sla.SLA" ENGINE = "rally.cli.commands.info.engine.Engine" PROVIDER = "rally.cli.commands.info.provider.ProviderFactory" @@ -106,7 +106,7 @@ class InfoCommandsTestCase(test.TestCase): @mock.patch(DISCOVER + ".itersubclasses", return_value=[dummy.Dummy]) def test_BenchmarkScenarios(self, mock_itersubclasses): status = self.info.BenchmarkScenarios() - mock_itersubclasses.assert_called_with(scenario_base.Scenario) + mock_itersubclasses.assert_called_with(scenario.Scenario) self.assertIsNone(status) @mock.patch(DISCOVER + ".itersubclasses", diff --git a/tests/unit/doc/test_task_samples.py b/tests/unit/doc/test_task_samples.py index 612242a91d..63218aeaf3 100644 --- a/tests/unit/doc/test_task_samples.py +++ b/tests/unit/doc/test_task_samples.py @@ -21,7 +21,7 @@ import traceback import yaml -from rally.task.scenarios import base +from rally.task import scenario from rally.task import engine from tests.unit import test @@ -35,7 +35,7 @@ class TaskSampleTestCase(test.TestCase): @mock.patch("rally.task.engine.BenchmarkEngine" "._validate_config_semantic") def test_schema_is_valid(self, - mock_benchmark_engine__validate_config_semantic): + mock_benchmark_engine__validate_config_semantic): scenarios = set() for dirname, dirnames, filenames in os.walk(self.samples_path): @@ -62,10 +62,10 @@ class TaskSampleTestCase(test.TestCase): # TODO(boris-42): We should refactor scenarios framework add "_" to # all non-benchmark methods.. Then this test will pass. - missing = set(base.Scenario.list_benchmark_scenarios()) - scenarios + missing = set(scenario.Scenario.list_benchmark_scenarios()) - scenarios # check missing scenario is not from plugin - missing = [scenario for scenario in list(missing) if - base.Scenario.get_by_name(scenario.split(".")[0]). + missing = [s for s in list(missing) + if scenario.Scenario.get_by_name(s.split(".")[0]). __module__.startswith("rally")] self.assertEqual(missing, [], "These scenarios don't have samples: %s" % missing) diff --git a/tests/unit/fakes.py b/tests/unit/fakes.py index 62f8d1254a..f5bbc339a0 100644 --- a/tests/unit/fakes.py +++ b/tests/unit/fakes.py @@ -31,7 +31,7 @@ from rally.common import objects from rally.common import utils as rally_utils from rally import consts from rally.task import context -from rally.task.scenarios import base +from rally.task import scenario def generate_uuid(): @@ -1464,7 +1464,7 @@ class FakeRunner(object): } -class FakeScenario(base.Scenario): +class FakeScenario(scenario.Scenario): def idle_time(self): return 0 diff --git a/tests/unit/plugins/openstack/scenarios/authenticate/test_authenticate.py b/tests/unit/plugins/openstack/scenarios/authenticate/test_authenticate.py index 4153a27b7a..806878b860 100644 --- a/tests/unit/plugins/openstack/scenarios/authenticate/test_authenticate.py +++ b/tests/unit/plugins/openstack/scenarios/authenticate/test_authenticate.py @@ -14,7 +14,7 @@ # under the License. from rally.plugins.openstack.scenarios.authenticate import authenticate -from rally.task.scenarios import base +from rally.task import atomic from tests.unit import test @@ -25,40 +25,45 @@ AUTHENTICATE_MODULE = ( class AuthenticateTestCase(test.ScenarioTestCase): def test_keystone(self): - scenario = authenticate.Authenticate() - scenario.keystone() + scenario_inst = authenticate.Authenticate() + scenario_inst.keystone() self.assertTrue(self.client_created("keystone")) def test_validate_glance(self): - scenario = authenticate.Authenticate() + scenario_inst = authenticate.Authenticate() image_name = "__intentionally_non_existent_image___" - with base.AtomicAction(scenario, "authenticate.validate_glance"): - scenario.validate_glance(5) + with atomic.ActionTimer(scenario_inst, + "authenticate.validate_glance"): + scenario_inst.validate_glance(5) self.clients("glance").images.list.assert_called_with(name=image_name) self.assertEqual(self.clients("glance").images.list.call_count, 5) def test_validate_nova(self): - scenario = authenticate.Authenticate() - with base.AtomicAction(scenario, "authenticate.validate_nova"): - scenario.validate_nova(5) + scenario_inst = authenticate.Authenticate() + with atomic.ActionTimer(scenario_inst, + "authenticate.validate_nova"): + scenario_inst.validate_nova(5) self.assertEqual(self.clients("nova").flavors.list.call_count, 5) def test_validate_cinder(self): - scenario = authenticate.Authenticate() - with base.AtomicAction(scenario, "authenticate.validate_cinder"): - scenario.validate_cinder(5) + scenario_inst = authenticate.Authenticate() + with atomic.ActionTimer(scenario_inst, + "authenticate.validate_cinder"): + scenario_inst.validate_cinder(5) self.assertEqual(self.clients("cinder").volume_types.list.call_count, 5) def test_validate_neutron(self): - scenario = authenticate.Authenticate() - with base.AtomicAction(scenario, "authenticate.validate_neutron"): - scenario.validate_neutron(5) + scenario_inst = authenticate.Authenticate() + with atomic.ActionTimer(scenario_inst, + "authenticate.validate_neutron"): + scenario_inst.validate_neutron(5) self.assertEqual(self.clients("neutron").list_networks.call_count, 5) def test_validate_heat(self): - scenario = authenticate.Authenticate() - with base.AtomicAction(scenario, "authenticate.validate_heat"): - scenario.validate_heat(5) + scenario_inst = authenticate.Authenticate() + with atomic.ActionTimer(scenario_inst, + "authenticate.validate_heat"): + scenario_inst.validate_heat(5) self.clients("heat").stacks.list.assert_called_with(limit=0) self.assertEqual(self.clients("heat").stacks.list.call_count, 5) diff --git a/tests/unit/task/scenarios/__init__.py b/tests/unit/task/scenarios/__init__.py deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/tests/unit/task/test_engine.py b/tests/unit/task/test_engine.py index fd2dde8e64..66a4911ad1 100644 --- a/tests/unit/task/test_engine.py +++ b/tests/unit/task/test_engine.py @@ -103,7 +103,7 @@ class BenchmarkEngineTestCase(test.TestCase): self.assertRaises(exceptions.InvalidTaskException, eng.validate) self.assertTrue(task.set_failed.called) - @mock.patch("rally.task.engine.base_scenario.Scenario") + @mock.patch("rally.task.engine.scenario.Scenario") def test__validate_config_scenarios_name(self, mock_scenario): config = { "a": [], @@ -113,7 +113,7 @@ class BenchmarkEngineTestCase(test.TestCase): eng = engine.BenchmarkEngine(config, mock.MagicMock()) eng._validate_config_scenarios_name(config) - @mock.patch("rally.task.engine.base_scenario.Scenario") + @mock.patch("rally.task.engine.scenario.Scenario") def test__validate_config_scenarios_name_non_exsisting(self, mock_scenario): config = { @@ -165,7 +165,7 @@ class BenchmarkEngineTestCase(test.TestCase): self.assertRaises(exceptions.InvalidBenchmarkConfig, eng._validate_config_syntax, config) - @mock.patch("rally.task.engine.base_scenario.Scenario.validate") + @mock.patch("rally.task.engine.scenario.Scenario.validate") def test__validate_config_semantic_helper(self, mock_scenario_validate): deployment = mock.MagicMock() eng = engine.BenchmarkEngine(mock.MagicMock(), mock.MagicMock()) @@ -175,7 +175,7 @@ class BenchmarkEngineTestCase(test.TestCase): "name", {"args": "args"}, admin="admin", users=["user"], deployment=deployment) - @mock.patch("rally.task.engine.base_scenario.Scenario.validate", + @mock.patch("rally.task.engine.scenario.Scenario.validate", side_effect=exceptions.InvalidScenarioArgument) def test__validate_config_semanitc_helper_invalid_arg( self, mock_scenario_validate): @@ -247,7 +247,7 @@ class BenchmarkEngineTestCase(test.TestCase): @mock.patch("rally.task.engine.ResultConsumer") @mock.patch("rally.task.engine.context.ContextManager.cleanup") @mock.patch("rally.task.engine.context.ContextManager.setup") - @mock.patch("rally.task.engine.base_scenario.Scenario") + @mock.patch("rally.task.engine.scenario.Scenario") @mock.patch("rally.task.engine.runner.ScenarioRunner") def test_run__update_status( self, mock_scenario_runner, mock_scenario, @@ -262,7 +262,7 @@ class BenchmarkEngineTestCase(test.TestCase): ]) @mock.patch("rally.task.engine.ResultConsumer") - @mock.patch("rally.task.engine.base_scenario.Scenario") + @mock.patch("rally.task.engine.scenario.Scenario") @mock.patch("rally.task.engine.runner.ScenarioRunner") @mock.patch("rally.task.engine.context.ContextManager.cleanup") @mock.patch("rally.task.engine.context.ContextManager.setup") @@ -279,7 +279,7 @@ class BenchmarkEngineTestCase(test.TestCase): eng.run() @mock.patch("rally.task.engine.ResultConsumer") - @mock.patch("rally.task.engine.base_scenario.Scenario") + @mock.patch("rally.task.engine.scenario.Scenario") @mock.patch("rally.task.engine.runner.ScenarioRunner") @mock.patch("rally.task.engine.context.ContextManager.cleanup") @mock.patch("rally.task.engine.context.ContextManager.setup") @@ -295,7 +295,7 @@ class BenchmarkEngineTestCase(test.TestCase): eng.run() @mock.patch("rally.task.engine.ResultConsumer") - @mock.patch("rally.task.engine.base_scenario.Scenario") + @mock.patch("rally.task.engine.scenario.Scenario") @mock.patch("rally.task.engine.runner.ScenarioRunner") @mock.patch("rally.task.engine.context.ContextManager.cleanup") @mock.patch("rally.task.engine.context.ContextManager.setup") @@ -312,7 +312,7 @@ class BenchmarkEngineTestCase(test.TestCase): @mock.patch("rally.task.engine.LOG") @mock.patch("rally.task.engine.ResultConsumer") - @mock.patch("rally.task.engine.base_scenario.Scenario") + @mock.patch("rally.task.engine.scenario.Scenario") @mock.patch("rally.task.engine.runner.ScenarioRunner") @mock.patch("rally.task.engine.context.ContextManager.cleanup") @mock.patch("rally.task.engine.context.ContextManager.setup") @@ -333,7 +333,7 @@ class BenchmarkEngineTestCase(test.TestCase): self.assertEqual(2, mock_log.exception.call_count) - @mock.patch("rally.task.engine.base_scenario.Scenario.meta") + @mock.patch("rally.task.engine.scenario.Scenario.meta") def test__prepare_context(self, mock_scenario_meta): default_context = {"a": 1, "b": 2} mock_scenario_meta.return_value = default_context @@ -358,7 +358,7 @@ class BenchmarkEngineTestCase(test.TestCase): self.assertEqual(result, expected_result) mock_scenario_meta.assert_called_once_with(name, "context") - @mock.patch("rally.task.engine.base_scenario.Scenario.meta") + @mock.patch("rally.task.engine.scenario.Scenario.meta") def test__prepare_context_with_existing_users(self, mock_scenario_meta): mock_scenario_meta.return_value = {} task = mock.MagicMock() diff --git a/tests/unit/task/test_runner.py b/tests/unit/task/test_runner.py index b749cde9ab..4124120b4a 100644 --- a/tests/unit/task/test_runner.py +++ b/tests/unit/task/test_runner.py @@ -21,7 +21,7 @@ import mock from rally.plugins.common.runners import serial from rally.task import runner -from rally.task.scenarios import base as scenario_base +from rally.task import scenario from tests.unit import fakes from tests.unit import test @@ -186,7 +186,7 @@ class ScenarioRunnerTestCase(test.TestCase): self.assertEqual(list(runner_obj.result_queue), []) cls_name, method_name = scenario_name.split(".", 1) - cls = scenario_base.Scenario.get_by_name(cls_name) + cls = scenario.Scenario.get_by_name(cls_name) expected_config_kwargs = {"image": 1, "flavor": 1} runner_obj._run_scenario.assert_called_once_with( diff --git a/tests/unit/task/scenarios/test_base.py b/tests/unit/task/test_scenario.py similarity index 66% rename from tests/unit/task/scenarios/test_base.py rename to tests/unit/task/test_scenario.py index 71b08dcbee..ba0b63515a 100644 --- a/tests/unit/task/scenarios/test_base.py +++ b/tests/unit/task/test_scenario.py @@ -22,7 +22,7 @@ from rally import consts from rally import exceptions from rally.plugins.common.scenarios.dummy import dummy from rally.task import context -from rally.task.scenarios import base +from rally.task import scenario from rally.task import validation from tests.unit import fakes from tests.unit import test @@ -31,34 +31,34 @@ from tests.unit import test class ScenarioTestCase(test.TestCase): def test_get_by_name(self): - self.assertEqual(dummy.Dummy, base.Scenario.get_by_name("Dummy")) + self.assertEqual(dummy.Dummy, scenario.Scenario.get_by_name("Dummy")) def test_get_by_name_not_found(self): self.assertRaises(exceptions.NoSuchScenario, - base.Scenario.get_by_name, + scenario.Scenario.get_by_name, "non existing scenario") def test_get_scenario_by_name(self): - scenario_method = base.Scenario.get_scenario_by_name("Dummy.dummy") + scenario_method = scenario.Scenario.get_scenario_by_name("Dummy.dummy") self.assertEqual(dummy.Dummy.dummy, scenario_method) def test_get_scenario_by_name_shortened(self): - scenario_method = base.Scenario.get_scenario_by_name("dummy") + scenario_method = scenario.Scenario.get_scenario_by_name("dummy") self.assertEqual(dummy.Dummy.dummy, scenario_method) def test_get_scenario_by_name_shortened_not_found(self): self.assertRaises(exceptions.NoSuchScenario, - base.Scenario.get_scenario_by_name, + scenario.Scenario.get_scenario_by_name, "dumy") def test_get_scenario_by_name_bad_group_name(self): self.assertRaises(exceptions.NoSuchScenario, - base.Scenario.get_scenario_by_name, + scenario.Scenario.get_scenario_by_name, "Dumy.dummy") def test_get_scenario_by_name_bad_scenario_name(self): self.assertRaises(exceptions.NoSuchScenario, - base.Scenario.get_scenario_by_name, + scenario.Scenario.get_scenario_by_name, "Dummy.dumy") def test__validate_helper(self): @@ -69,7 +69,8 @@ class ScenarioTestCase(test.TestCase): clients = mock.MagicMock() config = {"a": 1, "b": 2} deployment = mock.MagicMock() - base.Scenario._validate_helper(validators, clients, config, deployment) + scenario.Scenario._validate_helper(validators, clients, config, + deployment) for validator in validators: validator.assert_called_with(config, clients=clients, deployment=deployment) @@ -79,7 +80,7 @@ class ScenarioTestCase(test.TestCase): validator.side_effect = Exception() self.assertRaises(exceptions.InvalidScenarioArgument, - base.Scenario._validate_helper, + scenario.Scenario._validate_helper, [validator], "cl", "config", "deployment") validator.assert_called_once_with("config", clients="cl", deployment="deployment") @@ -94,10 +95,10 @@ class ScenarioTestCase(test.TestCase): clients = mock.MagicMock() args = {"a": 1, "b": 2} self.assertRaises(exceptions.InvalidScenarioArgument, - base.Scenario._validate_helper, + scenario.Scenario._validate_helper, validators, clients, args, "fake_uuid") - @mock.patch("rally.task.scenarios.base.Scenario.get_by_name") + @mock.patch("rally.task.scenario.Scenario.get_by_name") def test_validate__no_validators(self, mock_scenario_get_by_name): class FakeScenario(fakes.FakeScenario): @@ -107,12 +108,12 @@ class ScenarioTestCase(test.TestCase): FakeScenario.do_it.validators = [] mock_scenario_get_by_name.return_value = FakeScenario - base.Scenario.validate("FakeScenario.do_it", {"a": 1, "b": 2}) + scenario.Scenario.validate("FakeScenario.do_it", {"a": 1, "b": 2}) mock_scenario_get_by_name.assert_called_once_with("FakeScenario") - @mock.patch("rally.task.scenarios.base.Scenario._validate_helper") - @mock.patch("rally.task.scenarios.base.Scenario.get_by_name") + @mock.patch("rally.task.scenario.Scenario._validate_helper") + @mock.patch("rally.task.scenario.Scenario.get_by_name") def test_validate__admin_validators(self, mock_scenario_get_by_name, mock_scenario__validate_helper): @@ -129,13 +130,13 @@ class ScenarioTestCase(test.TestCase): FakeScenario.do_it.validators = validators deployment = mock.MagicMock() args = {"a": 1, "b": 2} - base.Scenario.validate( + scenario.Scenario.validate( "FakeScenario.do_it", args, admin="admin", deployment=deployment) mock_scenario__validate_helper.assert_called_once_with( validators, "admin", args, deployment) - @mock.patch("rally.task.scenarios.base.Scenario._validate_helper") - @mock.patch("rally.task.scenarios.base.Scenario.get_by_name") + @mock.patch("rally.task.scenario.Scenario._validate_helper") + @mock.patch("rally.task.scenario.Scenario.get_by_name") def test_validate_user_validators(self, mock_scenario_get_by_name, mock_scenario__validate_helper): @@ -151,7 +152,7 @@ class ScenarioTestCase(test.TestCase): FakeScenario.do_it.validators = validators args = {"a": 1, "b": 2} - base.Scenario.validate( + scenario.Scenario.validate( "FakeScenario.do_it", args, users=["u1", "u2"]) mock_scenario__validate_helper.assert_has_calls([ @@ -168,9 +169,9 @@ class ScenarioTestCase(test.TestCase): preprocessors = [mock.MagicMock(), mock.MagicMock()] MyFakeScenario.do_it.__dict__[attr_name] = preprocessors - scenario = MyFakeScenario() - self.assertEqual(scenario.meta(cls="MyFakeScenario.do_it", - attr_name=attr_name), preprocessors) + inst = MyFakeScenario() + self.assertEqual(inst.meta(cls="MyFakeScenario.do_it", + attr_name=attr_name), preprocessors) def test_meta_class_returns_non_empty_list(self): @@ -181,83 +182,80 @@ class ScenarioTestCase(test.TestCase): preprocessors = [mock.MagicMock(), mock.MagicMock()] MyFakeScenario.do_it.__dict__[attr_name] = preprocessors - scenario = MyFakeScenario() - self.assertEqual(scenario.meta(cls=fakes.FakeScenario, - method_name="do_it", - attr_name=attr_name), preprocessors) + inst = MyFakeScenario() + self.assertEqual(inst.meta(cls=fakes.FakeScenario, + method_name="do_it", + attr_name=attr_name), preprocessors) def test_meta_string_returns_empty_list(self): empty_list = [] - scenario = fakes.FakeScenario() - self.assertEqual(scenario.meta(cls="FakeScenario.do_it", - attr_name="foo", default=empty_list), + inst = fakes.FakeScenario() + self.assertEqual(inst.meta(cls="FakeScenario.do_it", + attr_name="foo", default=empty_list), empty_list) def test_meta_class_returns_empty_list(self): empty_list = [] - scenario = fakes.FakeScenario() - self.assertEqual(scenario.meta(cls=fakes.FakeScenario, - method_name="do_it", attr_name="foo", - default=empty_list), + inst = fakes.FakeScenario() + self.assertEqual(inst.meta(cls=fakes.FakeScenario, + method_name="do_it", attr_name="foo", + default=empty_list), empty_list) def test_is_scenario_success(self): - scenario = dummy.Dummy() - self.assertTrue(base.Scenario.is_scenario(scenario, "dummy")) + self.assertTrue(scenario.Scenario.is_scenario(dummy.Dummy(), "dummy")) def test_is_scenario_not_scenario(self): - scenario = dummy.Dummy() - self.assertFalse(base.Scenario.is_scenario(scenario, - "_random_fail_emitter")) + self.assertFalse(scenario.Scenario.is_scenario(dummy.Dummy(), + "_random_fail_emitter")) def test_is_scenario_non_existing(self): - scenario = dummy.Dummy() - self.assertFalse(base.Scenario.is_scenario(scenario, "non_existing")) + self.assertFalse(scenario.Scenario.is_scenario(dummy.Dummy(), + "non_existing")) def test_sleep_between_invalid_args(self): - scenario = base.Scenario() self.assertRaises(exceptions.InvalidArgumentsException, - scenario.sleep_between, 15, 5) + scenario.Scenario().sleep_between, 15, 5) self.assertRaises(exceptions.InvalidArgumentsException, - scenario.sleep_between, -1, 0) + scenario.Scenario().sleep_between, -1, 0) self.assertRaises(exceptions.InvalidArgumentsException, - scenario.sleep_between, 0, -2) + scenario.Scenario().sleep_between, 0, -2) def test_sleep_between(self): - scenario = base.Scenario() - scenario.sleep_between(0.001, 0.002) - self.assertTrue(0.001 <= scenario.idle_duration() <= 0.002) + scenario_inst = scenario.Scenario() + scenario_inst.sleep_between(0.001, 0.002) + self.assertTrue(0.001 <= scenario_inst.idle_duration() <= 0.002) def test_sleep_beetween_multi(self): - scenario = base.Scenario() - scenario.sleep_between(0.001, 0.001) - scenario.sleep_between(0.004, 0.004) - self.assertEqual(scenario.idle_duration(), 0.005) + scenario_inst = scenario.Scenario() + scenario_inst.sleep_between(0.001, 0.001) + scenario_inst.sleep_between(0.004, 0.004) + self.assertEqual(scenario_inst.idle_duration(), 0.005) - @mock.patch("rally.task.scenarios.base.time.sleep") - @mock.patch("rally.task.scenarios.base.random.uniform") + @mock.patch("rally.task.scenario.time.sleep") + @mock.patch("rally.task.scenario.random.uniform") def test_sleep_between_internal(self, mock_uniform, mock_sleep): - scenario = base.Scenario() + scenario_inst = scenario.Scenario() mock_uniform.return_value = 1.5 - scenario.sleep_between(1, 2) + scenario_inst.sleep_between(1, 2) mock_sleep.assert_called_once_with(mock_uniform.return_value) - self.assertEqual(scenario.idle_duration(), mock_uniform.return_value) + self.assertEqual(scenario_inst.idle_duration(), + mock_uniform.return_value) def test_context(self): - ctx = {} - scenario = base.Scenario(context=ctx) - self.assertEqual(ctx, scenario.context) + ctx = mock.MagicMock() + self.assertEqual(ctx, scenario.Scenario(context=ctx).context) def test_scenario_context_are_valid(self): - scenarios = base.Scenario.list_benchmark_scenarios() + scenarios = scenario.Scenario.list_benchmark_scenarios() - for scenario in scenarios: - cls_name, method_name = scenario.split(".", 1) - cls = base.Scenario.get_by_name(cls_name) + for name in scenarios: + cls_name, method_name = name.split(".", 1) + cls = scenario.Scenario.get_by_name(cls_name) ctx = getattr(cls, method_name).context try: context.ContextManager.validate(ctx) @@ -267,12 +265,12 @@ class ScenarioTestCase(test.TestCase): "Scenario `%s` has wrong context" % scenario) def test_RESOURCE_NAME_PREFIX(self): - self.assertIsInstance(base.Scenario.RESOURCE_NAME_PREFIX, + self.assertIsInstance(scenario.Scenario.RESOURCE_NAME_PREFIX, six.string_types) def test_RESOURCE_NAME_LENGTH(self): - self.assertIsInstance(base.Scenario.RESOURCE_NAME_LENGTH, int) - self.assertTrue(base.Scenario.RESOURCE_NAME_LENGTH > 4) + self.assertIsInstance(scenario.Scenario.RESOURCE_NAME_LENGTH, int) + self.assertTrue(scenario.Scenario.RESOURCE_NAME_LENGTH > 4) def test_generate_random_name(self): set_by_length = lambda lst: set(map(len, lst)) @@ -281,48 +279,48 @@ class ScenarioTestCase(test.TestCase): range_num = 50 # Defaults - result = [base.Scenario._generate_random_name() + result = [scenario.Scenario._generate_random_name() for i in range(range_num)] self.assertEqual(len(result), len(set(result))) self.assertEqual( set_by_length(result), set([(len( - base.Scenario.RESOURCE_NAME_PREFIX) + - base.Scenario.RESOURCE_NAME_LENGTH)])) + scenario.Scenario.RESOURCE_NAME_PREFIX) + + scenario.Scenario.RESOURCE_NAME_LENGTH)])) self.assertEqual( - len_by_prefix(result, base.Scenario.RESOURCE_NAME_PREFIX), + len_by_prefix(result, scenario.Scenario.RESOURCE_NAME_PREFIX), range_num) # Custom prefix prefix = "another_prefix_" - result = [base.Scenario._generate_random_name(prefix) + result = [scenario.Scenario._generate_random_name(prefix) for i in range(range_num)] self.assertEqual(len(result), len(set(result))) self.assertEqual( set_by_length(result), - set([len(prefix) + base.Scenario.RESOURCE_NAME_LENGTH])) + set([len(prefix) + scenario.Scenario.RESOURCE_NAME_LENGTH])) self.assertEqual( len_by_prefix(result, prefix), range_num) # Custom length name_length = 12 result = [ - base.Scenario._generate_random_name(length=name_length) + scenario.Scenario._generate_random_name(length=name_length) for i in range(range_num)] self.assertEqual(len(result), len(set(result))) self.assertEqual( set_by_length(result), set([len( - base.Scenario.RESOURCE_NAME_PREFIX) + name_length])) + scenario.Scenario.RESOURCE_NAME_PREFIX) + name_length])) self.assertEqual( - len_by_prefix(result, base.Scenario.RESOURCE_NAME_PREFIX), + len_by_prefix(result, scenario.Scenario.RESOURCE_NAME_PREFIX), range_num) class AtomicActionTestCase(test.TestCase): def test__init__(self): fake_scenario_instance = fakes.FakeScenario() - c = base.AtomicAction(fake_scenario_instance, "asdf") + c = scenario.AtomicAction(fake_scenario_instance, "asdf") self.assertEqual(c.scenario_instance, fake_scenario_instance) self.assertEqual(c.name, "asdf") @@ -331,7 +329,7 @@ class AtomicActionTestCase(test.TestCase): def test__exit__(self, mock_time, mock_fake_scenario__add_atomic_actions): fake_scenario_instance = fakes.FakeScenario() self.start = mock_time.time() - with base.AtomicAction(fake_scenario_instance, "asdf"): + with scenario.AtomicAction(fake_scenario_instance, "asdf"): pass duration = mock_time.time() - self.start mock_fake_scenario__add_atomic_actions.assert_called_once_with( diff --git a/tests/unit/task/test_types.py b/tests/unit/task/test_types.py index 8557eb17f4..3c963f293e 100644 --- a/tests/unit/task/test_types.py +++ b/tests/unit/task/test_types.py @@ -334,7 +334,7 @@ class NeutronNetworkResourceTypeTestCase(test.TestCase): class PreprocessTestCase(test.TestCase): - @mock.patch("rally.task.types.base.Scenario.meta") + @mock.patch("rally.task.types.scenario.Scenario.meta") @mock.patch("rally.task.types.osclients") def test_preprocess(self, mock_osclients, mock_scenario_meta): cls = "some_class" diff --git a/tests/unit/test_docstrings.py b/tests/unit/test_docstrings.py index 4b18029bec..5c4a099018 100644 --- a/tests/unit/test_docstrings.py +++ b/tests/unit/test_docstrings.py @@ -17,7 +17,7 @@ from rally.common.plugin import discover from rally.common import utils from rally.deployment import engine from rally.deployment.serverprovider import provider -from rally.task.scenarios import base +from rally.task import scenario from rally.task import sla from tests.unit import test @@ -42,18 +42,18 @@ class DocstringsTestCase(test.TestCase): def test_all_scenarios_have_docstrings(self): ignored_params = ["self", "scenario_obj"] - for scenario_group in discover.itersubclasses(base.Scenario): + for scenario_group in discover.itersubclasses(scenario.Scenario): if scenario_group.__module__.startswith("tests."): continue for method in dir(scenario_group): - if base.Scenario.is_scenario(scenario_group, method): - scenario = getattr(scenario_group, method) + if scenario.Scenario.is_scenario(scenario_group, method): + scenario_inst = getattr(scenario_group, method) scenario_name = scenario_group.__name__ + "." + method - self.assertIsNotNone(scenario.__doc__, + self.assertIsNotNone(scenario_inst.__doc__, "%s doensn't have a docstring." % scenario_name) - doc = utils.parse_docstring(scenario.__doc__) + doc = utils.parse_docstring(scenario_inst.__doc__) short_description = doc["short_description"] self.assertIsNotNone(short_description, "Docstring for %s should have " @@ -63,8 +63,8 @@ class DocstringsTestCase(test.TestCase): "One-line description for %s " "should be declarative and not start " "with 'Test(s) ...'" % scenario_name) - params_count = scenario.__code__.co_argcount - params = scenario.__code__.co_varnames[:params_count] + params_count = scenario_inst.__code__.co_argcount + params = scenario_inst.__code__.co_varnames[:params_count] documented_params = [p["name"] for p in doc["params"]] for param in params: if param not in ignored_params: @@ -76,7 +76,7 @@ class DocstringsTestCase(test.TestCase): "param": param}) def test_all_scenario_groups_have_docstrings(self): - for scenario_group in discover.itersubclasses(base.Scenario): + for scenario_group in discover.itersubclasses(scenario.Scenario): self._assert_class_has_docstrings(scenario_group, long_description=False)