From 95dce5319763707ca61cf539939497dc64252331 Mon Sep 17 00:00:00 2001 From: Boris Pavlovic Date: Thu, 13 Aug 2015 15:42:32 -0700 Subject: [PATCH] Refactoring of scenario plugin base * Moved rally.task.scenarios.base -> rally.task.scenario - Shorter imports and simpler structure of tree - Unified with other plugin bases * Add rally.task.atomic module - We will use atomic actions in both scenarios and context this is first step of unification - Module has only links to method and atomic action context with new names. So we will change all plugins but won't touch atomic actions at this patch (to reduce amount of LOC in this patch) - Next step is to move and unify atomic action code for scenarios and contexts * Rename rally.task.scenario.scenario to rally.task.scenario.configure scenario.scenario is unclear and not aligned with other plugin types where configure() method is used for the same purpose * Add shortcut rally.plugins.openstack.scenario.configure so there is no need to import rally.plugins.openstack.scenario and rally.task.scenario modules * Fix all unit tests & docs Change-Id: I388bd1c1af951670c6a1d043cfeb2a6753a085b0 --- rally-jobs/plugins/fake_plugin.py | 11 ++- .../openstack/context/cinder/volumes.py | 4 +- rally/plugins/openstack/scenario.py | 8 +- .../scenarios/authenticate/authenticate.py | 24 ++--- .../openstack/scenarios/ceilometer/alarms.py | 14 +-- .../openstack/scenarios/ceilometer/events.py | 14 +-- .../openstack/scenarios/ceilometer/meters.py | 4 +- .../openstack/scenarios/ceilometer/queries.py | 8 +- .../scenarios/ceilometer/resources.py | 6 +- .../openstack/scenarios/ceilometer/samples.py | 4 +- .../openstack/scenarios/ceilometer/stats.py | 4 +- .../openstack/scenarios/ceilometer/traits.py | 10 +- .../openstack/scenarios/ceilometer/utils.py | 46 ++++----- .../openstack/scenarios/cinder/utils.py | 30 +++--- .../openstack/scenarios/cinder/volumes.py | 34 +++---- .../openstack/scenarios/designate/basic.py | 27 ++--- .../openstack/scenarios/designate/utils.py | 20 ++-- .../openstack/scenarios/ec2/servers.py | 6 +- .../plugins/openstack/scenarios/ec2/utils.py | 6 +- .../openstack/scenarios/glance/images.py | 10 +- .../openstack/scenarios/glance/utils.py | 8 +- .../openstack/scenarios/heat/stacks.py | 25 ++--- .../plugins/openstack/scenarios/heat/utils.py | 24 ++--- .../openstack/scenarios/ironic/nodes.py | 6 +- .../openstack/scenarios/ironic/utils.py | 8 +- .../openstack/scenarios/keystone/basic.py | 36 +++---- .../openstack/scenarios/keystone/utils.py | 48 ++++----- .../openstack/scenarios/manila/shares.py | 16 +-- .../openstack/scenarios/manila/utils.py | 22 ++--- .../openstack/scenarios/mistral/utils.py | 8 +- .../openstack/scenarios/mistral/workbooks.py | 6 +- .../scenarios/murano/environments.py | 11 ++- .../openstack/scenarios/murano/utils.py | 14 +-- .../scenarios/neutron/loadbalancer_v1.py | 8 +- .../openstack/scenarios/neutron/network.py | 26 ++--- .../openstack/scenarios/neutron/utils.py | 50 +++++----- .../openstack/scenarios/nova/hypervisors.py | 4 +- .../openstack/scenarios/nova/keypairs.py | 8 +- .../openstack/scenarios/nova/servers.py | 42 ++++---- .../plugins/openstack/scenarios/nova/utils.py | 98 +++++++++---------- .../openstack/scenarios/quotas/quotas.py | 12 +-- .../openstack/scenarios/quotas/utils.py | 6 +- .../openstack/scenarios/sahara/clusters.py | 6 +- .../openstack/scenarios/sahara/jobs.py | 8 +- .../scenarios/sahara/node_group_templates.py | 6 +- .../openstack/scenarios/sahara/utils.py | 20 ++-- .../openstack/scenarios/swift/objects.py | 19 ++-- .../openstack/scenarios/swift/utils.py | 16 +-- rally/plugins/openstack/scenarios/vm/utils.py | 12 +-- .../plugins/openstack/scenarios/vm/vmtasks.py | 6 +- .../openstack/scenarios/zaqar/basic.py | 6 +- .../openstack/scenarios/zaqar/utils.py | 12 +-- .../extra/fake_dir1/fake_plugin1.py | 6 +- .../extra/fake_dir2/fake_plugin2.py | 6 +- tests/unit/doc/test_task_samples.py | 10 +- tests/unit/fakes.py | 4 +- .../authenticate/test_authenticate.py | 41 ++++---- 57 files changed, 484 insertions(+), 470 deletions(-) diff --git a/rally-jobs/plugins/fake_plugin.py b/rally-jobs/plugins/fake_plugin.py index 2de2e67e..2076e930 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/plugins/openstack/context/cinder/volumes.py b/rally/plugins/openstack/context/cinder/volumes.py index a15847ab..6433abe1 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 d781370c..f53eb86c 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 a8b28515..a5567304 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 ea0c4078..8c26a328 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 341f4533..ed750688 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 236fb38b..9fc440fd 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 8a67d87e..e5afcc2f 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 8046e149..a635745f 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 b7c8fafd..ed41c543 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 5273509d..24a7b841 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 bb5fa7e0..7f694863 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 e2babd6c..d3fb4d05 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 4f33fddb..c1cbd8ca 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 5a76ef4a..4b7f70f0 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 1f3e5906..f344b24f 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 88a7c255..ccd47e8f 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 acbaf8bc..f3a8e57b 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 ef65d616..6213e8a1 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/glance/images.py b/rally/plugins/openstack/scenarios/glance/images.py index 56d84e5b..ebe612e1 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 baa78c93..54ce6083 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 f5399fd7..bab3db0e 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 64c5b138..a628e09a 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 e9869847..0c2934fe 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 9b148dc8..5417ccb9 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 e60c96be..38c37f37 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 a8d41a1d..94741b00 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 3009f995..5b74b3ed 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 f523d907..0f5883da 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 f9c9d168..16818912 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 5c8129ad..2eadb1ae 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 2385492a..ea21f05e 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 f760dba3..ad7f3e19 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 ee1bbeaf..ebfc3e3f 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 f7b73813..140ce99d 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 45ad9c99..247a4d0a 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/hypervisors.py b/rally/plugins/openstack/scenarios/nova/hypervisors.py index 1e801ae6..eb701d66 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 178792d3..feaf45b0 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/servers.py b/rally/plugins/openstack/scenarios/nova/servers.py index e6c0a2d5..545e289d 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 699b0054..68f40bdd 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 7d45249f..5463dd7b 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 b56576bb..b35eaf28 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 aed51612..23f54d9d 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 18406885..657e1106 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 725e7b0a..73ae33cd 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 429104f1..01b5a334 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 2adc6518..09b48b8c 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 effa2419..a5659f76 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/vm/utils.py b/rally/plugins/openstack/scenarios/vm/utils.py index 151f1c21..93f6dcf9 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 a7022c1e..631807f5 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 5590984e..e41ad996 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 6c817952..305ff6b8 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/tests/functional/extra/fake_dir1/fake_plugin1.py b/tests/functional/extra/fake_dir1/fake_plugin1.py index 45ddf522..2f113fa1 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 fb3ea003..bf70f1c5 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/doc/test_task_samples.py b/tests/unit/doc/test_task_samples.py index 612242a9..63218aea 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 62f8d125..f5bbc339 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 4153a27b..806878b8 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)