Dynamic Workloads:Enhance Nova API Version Pinning

This patch moves the pinning of Nova API version to
2.52(required for tags) from the Python code to the rally
yaml specification file. This reduces duplication of code
from Rally and makes it easier to maintain in the future.

Browbeat logs and results :
http://perfscale.perf.lab.eng.bos.redhat.com/pub/schari/browbeat_logs/nova_api_version/

Change-Id: I2c9535da355c343949ddef44274035b1b590ef75
This commit is contained in:
Sanjay Chari
2022-10-04 11:24:22 +05:30
parent 0ed5a8d0bc
commit 95b67935df
3 changed files with 10 additions and 47 deletions

View File

@@ -663,6 +663,9 @@ workloads:
scenarios:
- name: dynamic-workload
enabled: false
# nova_api_version >=2.52 is required for server tags,
# which are used by dynamic workloads.
nova_api_version: 2.52
# smallest image name and smallest flavor name are used for
# vm dynamic scenarios and for jumphost in trunk dynamic scenario.
smallest_image_name: cirro5

View File

@@ -144,52 +144,8 @@ class NovaUtils(vm_utils.VMScenario):
:param kwargs: other optional parameters to initialize the server
:returns: nova Server instance
"""
server_name = self.generate_random_name()
# Each iteration has a unique security group for its resources
if self.security_group:
if "security_groups" not in kwargs:
kwargs["security_groups"] = [self.security_group["name"]]
elif self.security_group["name"] not in kwargs["security_groups"]:
kwargs["security_groups"].append(self.security_group["name"])
# Let every 5th iteration add default security group of the tenant/user
secgroup = self.context.get("user", {}).get("secgroup")
if secgroup and (self.context["iteration"] % 5):
if "security_groups" not in kwargs:
kwargs["security_groups"] = [secgroup["name"]]
elif secgroup["name"] not in kwargs["security_groups"]:
kwargs["security_groups"].append(secgroup["name"])
if auto_assign_nic and not kwargs.get("nics", False):
nic = self._pick_random_nic()
if nic:
kwargs["nics"] = nic
if "nics" not in kwargs and\
"tenant" in self.context and\
"networks" in self.context["tenant"]:
kwargs["nics"] = [
{"net-id": self.context["tenant"]["networks"][0]["id"]}]
for nic in kwargs.get("nics", []):
if not nic.get("net-id") and nic.get("net-name"):
nic["net-id"] = self._get_network_id(nic["net-name"])
kwargs["tags"] = [tag]
with atomic.ActionTimer(self, "nova.boot_server"):
server = self.clients("nova", version="2.52").servers.create(
server_name, image, flavor, **kwargs)
self.sleep_between(CONF.openstack.nova_server_boot_prepoll_delay)
server = utils.wait_for_status(
server,
ready_statuses=["ACTIVE"],
update_resource=utils.get_from_manager(),
timeout=CONF.openstack.nova_server_boot_timeout,
check_interval=CONF.openstack.nova_server_boot_poll_interval
)
server = self._boot_server(image, flavor, auto_assign_nic, **kwargs)
return server
def _boot_server_with_fip_and_tag(self, image, flavor, tag, use_floating_ip=True,
@@ -228,7 +184,7 @@ class NovaUtils(vm_utils.VMScenario):
:param tag: str, tag to search for
:returns: list of server objects based on tag
"""
return self.clients("nova", version="2.52").servers.list(
return self.clients("nova").servers.list(
search_opts={'tags': tag, 'status': "ACTIVE"})
def _get_fip_by_server(self, server):
@@ -247,7 +203,7 @@ class NovaUtils(vm_utils.VMScenario):
:param server: server object to get details for
:returns: server details
"""
return self.clients("nova", version="2.52").servers.get(server)
return self.clients("nova").servers.get(server)
class NeutronUtils(neutron_utils.NeutronScenario):

View File

@@ -1,3 +1,4 @@
{% set nova_api_version = nova_api_version or 2.52 %}
{% set smallest_image_name = smallest_image_name or 'cirros' %}
{% set smallest_flavor_name = smallest_flavor_name or 'm1.xtiny' %}
{% set num_create_vms = num_create_vms or 2 %}
@@ -92,6 +93,9 @@ BrowbeatPlugin.dynamic_workload:
users:
tenants: 1
users_per_tenant: 1
api_versions:
nova:
version: {{ nova_api_version }}
quotas:
neutron:
network: -1