![Amy Ge](/assets/img/avatar_default.png)
The scenario_plugin.py was updated, however, the documentation still has the old instruction for creating a plugin. Let's update that in- struction. Let's also add 'required_services' and 'required_platform' in the sample to make it more complete. Change-Id: I6d36ea51a3ee32b94ab296c77195ee22652f40ec
2.7 KiB
2.7 KiB
Scenario as a plugin
Let's create a simple scenario plugin that list flavors.
Creation
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)
@scenario.configure(name="ScenarioPlugin.list_flavors_useless")
class ListFlavors(scenario.OpenStackScenario):
"""Sample plugin which lists flavors."""
@atomic.action_timer("list_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"""
self.clients("nova").flavors.list()
@atomic.action_timer("list_flavors_as_admin")
def _list_flavors_as_admin(self):
"""The same with admin clients"""
self.admin_clients("nova").flavors.list()
def run(self):
"""List flavors."""
self._list_flavors()
self._list_flavors_as_admin()
Usage
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 plugins_context_plugin
.