From 3602f0dc4ab1ddbe9d498a902385610533403610 Mon Sep 17 00:00:00 2001 From: Sanjay Chari Date: Wed, 29 Dec 2021 11:36:37 +0530 Subject: [PATCH] Selective resource creation in dynamic workloads This patch introduces the following changes. 1. The router created at the beginning of every iteration in dynamic workloads is used only by VM and trunk dynamic workloads. This patch changes the code to make sure that the router is created only when VM and trunk dynamic workloads are enabled. 2. The code has been modified to support passing num_external_networks: '0' in browbeat-config.yaml. 3. This patch will fix https://bugs.launchpad.net/openstack-browbeat/+bug/1955722. Change-Id: Idcca472a4d95d10b0fb80017b49d18787ef5c2bf --- .../dynamic-workloads/dynamic_workload.py | 39 +++++++++++-------- .../dynamic-workloads/rally_context.py | 2 +- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/rally/rally-plugins/dynamic-workloads/dynamic_workload.py b/rally/rally-plugins/dynamic-workloads/dynamic_workload.py index 67534e3e6..c5067e70b 100644 --- a/rally/rally-plugins/dynamic-workloads/dynamic_workload.py +++ b/rally/rally-plugins/dynamic-workloads/dynamic_workload.py @@ -61,10 +61,13 @@ class DynamicWorkload(vm.VMDynamicScenario, trunk.TrunkDynamicScenario, router_create_args=None, network_create_args=None, subnet_create_args=None, **kwargs): - context_ext_net_id = self.context["external_networks"][((self.context["iteration"]-1) - % num_external_networks)]["id"] - self.log_info("Using external network {} from context for iteration {}".format( - context_ext_net_id, self.context["iteration"])) + if num_external_networks > 0: + context_ext_net_id = self.context["external_networks"][((self.context["iteration"]-1) + % num_external_networks)]["id"] + self.log_info("Using external network {} from context for iteration {}".format( + context_ext_net_id, self.context["iteration"])) + self.ext_net_name = self.clients("neutron").show_network(context_ext_net_id)["network"][ + "name"] workloads_list = workloads.split(",") self.trunk_vm_user = "centos" @@ -76,21 +79,25 @@ class DynamicWorkload(vm.VMDynamicScenario, trunk.TrunkDynamicScenario, self.security_group = self.create_sec_group_with_icmp_ssh() self.log_info("security group {} created for this iteration".format(self.security_group)) - # Let this router be used by resources created by VM dynamic workloads in this iteration, - # if the iteration is not divisible by 5. - router_create_args["name"] = self.generate_random_name() - router_create_args["tenant_id"] = self.context["tenant"]["id"] - router_create_args.setdefault( - "external_gateway_info", {"network_id": context_ext_net_id, "enable_snat": True} - ) - self.router = self._create_router(router_create_args) - self.log_info("router {} created for this iteration".format(self.router)) + if(workloads == "all" or "migrate_servers" in workloads_list or + "swap_floating_ips_between_servers" in workloads_list or + "stop_start_servers" in workloads_list or + "pod_fip_simulation" in workloads_list or + "add_subports_to_random_trunks" in workloads_list or + "delete_subports_from_random_trunks" in workloads_list or + "swap_floating_ips_between_random_subports" in workloads_list): + # Let this router be used by resources created by VM and trunk dynamic workloads + # in this iteration. + router_create_args["name"] = self.generate_random_name() + router_create_args["tenant_id"] = self.context["tenant"]["id"] + router_create_args.setdefault( + "external_gateway_info", {"network_id": context_ext_net_id, "enable_snat": True} + ) + self.router = self._create_router(router_create_args) + self.log_info("router {} created for this iteration".format(self.router)) self.keypair = self.context["user"]["keypair"] - self.ext_net_name = self.clients("neutron").show_network(context_ext_net_id)["network"][ - "name"] - try: self.browbeat_dir = DynamicWorkload.browbeat_dir except AttributeError: diff --git a/rally/rally-plugins/dynamic-workloads/rally_context.py b/rally/rally-plugins/dynamic-workloads/rally_context.py index f37d3fcc5..e4f644789 100644 --- a/rally/rally-plugins/dynamic-workloads/rally_context.py +++ b/rally/rally-plugins/dynamic-workloads/rally_context.py @@ -33,7 +33,7 @@ class CreateExternalNetworksContext(context.Context): "properties": { "num_external_networks": { "type": "integer", - "minimum": 1 + "minimum": 0 }, "interface_name": { "type": "string"