fda172a4ce
Change-Id: I99a6f09bd5e4385f9a7710f374a1eb41bad28c74
245 lines
8.3 KiB
Python
245 lines
8.3 KiB
Python
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
import copy
|
|
|
|
from rally.common.plugin import plugin
|
|
from rally import exceptions
|
|
from rally.task import types
|
|
|
|
from rally_openstack.services.image import image
|
|
|
|
|
|
@plugin.configure(name="nova_flavor")
|
|
class Flavor(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to id.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: id matching resource
|
|
"""
|
|
resource_id = resource_config.get("id")
|
|
if not resource_id:
|
|
novaclient = clients.nova()
|
|
resource_id = types._id_from_name(
|
|
resource_config=resource_config,
|
|
resources=novaclient.flavors.list(),
|
|
typename="flavor")
|
|
return resource_id
|
|
|
|
|
|
@plugin.configure(name="ec2_flavor")
|
|
class EC2Flavor(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to name.
|
|
|
|
In the case of using EC2 API, flavor name is used for launching
|
|
servers.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: name matching resource
|
|
"""
|
|
resource_name = resource_config.get("name")
|
|
if not resource_name:
|
|
# NOTE(wtakase): gets resource name from OpenStack id
|
|
novaclient = clients.nova()
|
|
resource_name = types._name_from_id(
|
|
resource_config=resource_config,
|
|
resources=novaclient.flavors.list(),
|
|
typename="flavor")
|
|
return resource_name
|
|
|
|
|
|
@plugin.configure(name="glance_image")
|
|
class GlanceImage(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to id.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: id matching resource
|
|
"""
|
|
resource_id = resource_config.get("id")
|
|
list_kwargs = resource_config.get("list_kwargs", {})
|
|
if not resource_id:
|
|
images = list(image.Image(clients).list_images(**list_kwargs))
|
|
resource_id = types._id_from_name(
|
|
resource_config=resource_config,
|
|
resources=images,
|
|
typename="image")
|
|
return resource_id
|
|
|
|
|
|
@plugin.configure(name="glance_image_args")
|
|
class GlanceImageArguments(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to id.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: id matching resource
|
|
"""
|
|
resource_config = copy.deepcopy(resource_config)
|
|
if "is_public" in resource_config:
|
|
if "visibility" in resource_config:
|
|
resource_config.pop("is_public")
|
|
else:
|
|
visibility = ("public" if resource_config.pop("is_public")
|
|
else "private")
|
|
resource_config["visibility"] = visibility
|
|
return resource_config
|
|
|
|
|
|
@plugin.configure(name="ec2_image")
|
|
class EC2Image(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to EC2 id.
|
|
|
|
If OpenStack resource id is given, this function gets resource name
|
|
from the id and then gets EC2 resource id from the name.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: EC2 id matching resource
|
|
"""
|
|
if "name" not in resource_config and "regex" not in resource_config:
|
|
# NOTE(wtakase): gets resource name from OpenStack id
|
|
glanceclient = clients.glance()
|
|
resource_name = types._name_from_id(
|
|
resource_config=resource_config,
|
|
resources=list(glanceclient.images.list()),
|
|
typename="image")
|
|
resource_config["name"] = resource_name
|
|
|
|
# NOTE(wtakase): gets EC2 resource id from name or regex
|
|
ec2client = clients.ec2()
|
|
resource_ec2_id = types._id_from_name(
|
|
resource_config=resource_config,
|
|
resources=list(ec2client.get_all_images()),
|
|
typename="ec2_image")
|
|
return resource_ec2_id
|
|
|
|
|
|
@plugin.configure(name="cinder_volume_type")
|
|
class VolumeType(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to id.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: id matching resource
|
|
"""
|
|
resource_id = resource_config.get("id")
|
|
if not resource_id:
|
|
cinderclient = clients.cinder()
|
|
resource_id = types._id_from_name(resource_config=resource_config,
|
|
resources=cinderclient.
|
|
volume_types.list(),
|
|
typename="volume_type")
|
|
return resource_id
|
|
|
|
|
|
@plugin.configure(name="neutron_network")
|
|
class NeutronNetwork(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to id.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: id matching resource
|
|
"""
|
|
resource_id = resource_config.get("id")
|
|
if resource_id:
|
|
return resource_id
|
|
else:
|
|
neutronclient = clients.neutron()
|
|
for net in neutronclient.list_networks()["networks"]:
|
|
if net["name"] == resource_config.get("name"):
|
|
return net["id"]
|
|
|
|
raise exceptions.InvalidScenarioArgument(
|
|
"Neutron network with name '{name}' not found".format(
|
|
name=resource_config.get("name")))
|
|
|
|
|
|
@plugin.configure(name="watcher_strategy")
|
|
class WatcherStrategy(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to id.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: id matching resource
|
|
"""
|
|
resource_id = resource_config.get("id")
|
|
if not resource_id:
|
|
watcherclient = clients.watcher()
|
|
resource_id = types._id_from_name(
|
|
resource_config=resource_config,
|
|
resources=[watcherclient.strategy.get(
|
|
resource_config.get("name"))],
|
|
typename="strategy",
|
|
id_attr="uuid")
|
|
return resource_id
|
|
|
|
|
|
@plugin.configure(name="watcher_goal")
|
|
class WatcherGoal(types.ResourceType):
|
|
|
|
@classmethod
|
|
def transform(cls, clients, resource_config):
|
|
"""Transform the resource config to id.
|
|
|
|
:param clients: openstack admin client handles
|
|
:param resource_config: scenario config with `id`, `name` or `regex`
|
|
|
|
:returns: id matching resource
|
|
"""
|
|
resource_id = resource_config.get("id")
|
|
if not resource_id:
|
|
watcherclient = clients.watcher()
|
|
resource_id = types._id_from_name(
|
|
resource_config=resource_config,
|
|
resources=[watcherclient.goal.get(
|
|
resource_config.get("name"))],
|
|
typename="goal",
|
|
id_attr="uuid")
|
|
return resource_id
|