def _add_resources_to_template(self, template): """add to the template the resources represented by this context""" template.add_keypair(self.keypair_name, self.key_uuid) template.add_security_group(self.secgroup_name) for network in self.networks: template.add_network(network.stack_name, network.physical_network, network.provider) template.add_subnet(network.subnet_stack_name, network.stack_name, network.subnet_cidr) if network.router: template.add_router(network.router.stack_name, network.router.external_gateway_info, network.subnet_stack_name) template.add_router_interface(network.router.stack_if_name, network.router.stack_name, network.subnet_stack_name) # create a list of servers sorted by increasing no of placement groups list_of_servers = sorted(self.servers, key=lambda s: len(s.placement_groups)) # # add servers with scheduler hints derived from placement groups # # create list of servers with availability policy availability_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "availability": availability_servers.append(server) break # add servers with availability policy added_servers = [] for server in availability_servers: scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) # workround for openstack nova bug, check JIRA: YARDSTICK-200 # for details if len(availability_servers) == 2: if not scheduler_hints["different_host"]: scheduler_hints.pop("different_host", None) server.add_to_template(template, self.networks, scheduler_hints) else: scheduler_hints["different_host"] = \ scheduler_hints["different_host"][0] server.add_to_template(template, self.networks, scheduler_hints) else: server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) # create list of servers with affinity policy affinity_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "affinity": affinity_servers.append(server) break # add servers with affinity policy for server in affinity_servers: if server.stack_name in added_servers: continue scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) # add server group for sg in self.server_groups: template.add_server_group(sg.name, sg.policy) # add remaining servers with no placement group configured for server in list_of_servers: # TODO placement_group and server_group should combine if not server.placement_groups: scheduler_hints = {} # affinity/anti-aff server group sg = server.server_group if sg: scheduler_hints["group"] = {'get_resource': sg.name} server.add_to_template(template, self.networks, scheduler_hints)
def _add_resources_to_template(self, template): """add to the template the resources represented by this context""" if self.flavor: if isinstance(self.flavor, dict): flavor = self.flavor.setdefault("name", self.name + "-flavor") template.add_flavor(**self.flavor) self.flavors.add(flavor) template.add_keypair(self.keypair_name, self.name) template.add_security_group(self.secgroup_name, self.security_group) for network in self.networks.values(): # Using existing network if network.is_existing(): continue template.add_network(network.stack_name, network.physical_network, network.provider, network.segmentation_id, network.port_security_enabled, network.network_type) template.add_subnet(network.subnet_stack_name, network.stack_name, network.subnet_cidr, network.enable_dhcp, network.gateway_ip) if network.router: template.add_router(network.router.stack_name, network.router.external_gateway_info, network.subnet_stack_name) template.add_router_interface(network.router.stack_if_name, network.router.stack_name, network.subnet_stack_name) # create a list of servers sorted by increasing no of placement groups list_of_servers = sorted(self.servers, key=lambda s: len(s.placement_groups)) # # add servers with scheduler hints derived from placement groups # # create list of servers with availability policy availability_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "availability": availability_servers.append(server) break for server in availability_servers: if isinstance(server.flavor, dict): try: self.flavors.add(server.flavor["name"]) except KeyError: self.flavors.add(h_join(server.stack_name, "flavor")) # add servers with availability policy added_servers = [] for server in availability_servers: scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) # workaround for openstack nova bug, check JIRA: YARDSTICK-200 # for details if len(availability_servers) == 2: if not scheduler_hints["different_host"]: scheduler_hints.pop("different_host", None) server.add_to_template(template, list(self.networks.values()), scheduler_hints) else: scheduler_hints["different_host"] = \ scheduler_hints["different_host"][0] server.add_to_template(template, list(self.networks.values()), scheduler_hints) else: server.add_to_template(template, list(self.networks.values()), scheduler_hints) added_servers.append(server.stack_name) # create list of servers with affinity policy affinity_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "affinity": affinity_servers.append(server) break # add servers with affinity policy for server in affinity_servers: if server.stack_name in added_servers: continue scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) server.add_to_template(template, list(self.networks.values()), scheduler_hints) added_servers.append(server.stack_name) # add server group for sg in self.server_groups: template.add_server_group(sg.name, sg.policy) # add remaining servers with no placement group configured for server in list_of_servers: # TODO placement_group and server_group should combine if not server.placement_groups: scheduler_hints = {} # affinity/anti-aff server group sg = server.server_group if sg: scheduler_hints["group"] = {'get_resource': sg.name} server.add_to_template(template, list(self.networks.values()), scheduler_hints)
def _add_resources_to_template(self, template): '''add to the template the resources represented by this context''' template.add_keypair(self.keypair_name) template.add_security_group(self.secgroup_name) for network in self.networks: template.add_network(network.stack_name) template.add_subnet(network.subnet_stack_name, network.stack_name, network.subnet_cidr) if network.router: template.add_router(network.router.stack_name, network.router.external_gateway_info, network.subnet_stack_name) template.add_router_interface(network.router.stack_if_name, network.router.stack_name, network.subnet_stack_name) # create a list of servers sorted by increasing no of placement groups list_of_servers = sorted(self.servers, key=lambda s: len(s.placement_groups)) # # add servers with scheduler hints derived from placement groups # # create list of servers with availability policy availability_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "availability": availability_servers.append(server) break # add servers with availability policy added_servers = [] for server in availability_servers: scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) # workround for openstack nova bug, check JIRA: YARDSTICK-200 # for details if len(availability_servers) == 2: if len(scheduler_hints["different_host"]) == 0: scheduler_hints.pop("different_host", None) server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) else: scheduler_hints["different_host"] = \ scheduler_hints["different_host"][0] server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) else: server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) # create list of servers with affinity policy affinity_servers = [] for server in list_of_servers: for pg in server.placement_groups: if pg.policy == "affinity": affinity_servers.append(server) break # add servers with affinity policy for server in affinity_servers: if server.stack_name in added_servers: continue scheduler_hints = {} for pg in server.placement_groups: update_scheduler_hints(scheduler_hints, added_servers, pg) server.add_to_template(template, self.networks, scheduler_hints) added_servers.append(server.stack_name) # add remaining servers with no placement group configured for server in list_of_servers: if len(server.placement_groups) == 0: server.add_to_template(template, self.networks, {})