From 95b67935df721d941d572aead517b06e8ff2cc3f Mon Sep 17 00:00:00 2001 From: Sanjay Chari Date: Tue, 4 Oct 2022 11:24:22 +0530 Subject: [PATCH] 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 --- browbeat-config.yaml | 3 ++ .../dynamic-workloads/dynamic_utils.py | 50 ++----------------- .../dynamic-workloads/dynamic_workload.yml | 4 ++ 3 files changed, 10 insertions(+), 47 deletions(-) diff --git a/browbeat-config.yaml b/browbeat-config.yaml index 0ec7745fb..bddd09614 100644 --- a/browbeat-config.yaml +++ b/browbeat-config.yaml @@ -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 diff --git a/rally/rally-plugins/dynamic-workloads/dynamic_utils.py b/rally/rally-plugins/dynamic-workloads/dynamic_utils.py index 041566128..190b01de0 100644 --- a/rally/rally-plugins/dynamic-workloads/dynamic_utils.py +++ b/rally/rally-plugins/dynamic-workloads/dynamic_utils.py @@ -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): diff --git a/rally/rally-plugins/dynamic-workloads/dynamic_workload.yml b/rally/rally-plugins/dynamic-workloads/dynamic_workload.yml index 8b7c1a9fa..f92f5846f 100644 --- a/rally/rally-plugins/dynamic-workloads/dynamic_workload.yml +++ b/rally/rally-plugins/dynamic-workloads/dynamic_workload.yml @@ -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