Scenario as a plugin

Let's create a simple scenario plugin that list flavors.


Inherit a class for your plugin from the base OpenStackScenario class and implement a scenario method inside it. In our scenario, we'll first list flavors as an ordinary user, and then repeat the same using admin clients:

from rally import consts
from rally.plugins.openstack import scenario
from rally.task import atomic
from rally.task import validation

@validation.add("required_services", services=[consts.Service.NOVA])
@validation.add("required_platform", platform="openstack", users=True)
class ListFlavors(scenario.OpenStackScenario):
    """Sample plugin which lists flavors."""

    def _list_flavors(self):
        """Sample of usage clients - list flavors

        You can use self.context, self.admin_clients and self.clients which are
        initialized on scenario instance creation"""

    def _list_flavors_as_admin(self):
        """The same with admin clients"""

    def run(self):
        """List flavors."""


You can refer to your plugin scenario in the benchmark task configuration files in the same way as any other scenarios:

    "ScenarioPlugin.list_flavors": [
            "runner": {
                "type": "serial",
                "times": 5,
            "context": {
                "create_flavor": {
                    "ram": 512,

This configuration file uses the "create_flavor" context which we created in Context as a plugin.