def test_gateway_chassis_for_chassis_not_in_gw_chassis_list(self): # Return True since chassis_name not in gw_chassis self.gw_chassis = ['host-2'] self.assertTrue( utils.is_gateway_chassis_invalid(self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets))
def test_gateway_chassis_for_chassis_not_in_chassis_physnets(self): # Return True since chassis is not in chassis_physnets self.chassis_name = 'host-2' self.assertTrue( utils.is_gateway_chassis_invalid(self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets))
def test_gateway_chassis_for_physnet_not_in_chassis_physnets(self): # Return True since physnet is not in chassis_physnets self.physnet = 'physical-nw-2' self.assertTrue( utils.is_gateway_chassis_invalid(self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets))
def test_gateway_chassis_for_undefined_physnet(self): # Return True since physnet is not defined self.chassis_name = 'host-1' self.physnet = None self.assertTrue(utils.is_gateway_chassis_invalid( self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets, self.az_hints, self.chassis_azs))
def test_gateway_chassis_due_to_invalid_chassis_name(self): # Return True since chassis is invalid self.chassis_name = constants.OVN_GATEWAY_INVALID_CHASSIS self.assertTrue( utils.is_gateway_chassis_invalid(self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets))
def test_gateway_chassis_for_gw_chassis_empty(self): # Return False if gw_chassis is [] # This condition states that the chassis is valid, has valid # physnets and there are no gw_chassis present in the system. self.gw_chassis = [] self.assertFalse(utils.is_gateway_chassis_invalid( self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets, self.az_hints, self.chassis_azs))
def get_unhosted_gateways(self, port_physnet_dict, chassis_with_physnets, all_gw_chassis, chassis_with_azs): unhosted_gateways = set() for port, physnet in port_physnet_dict.items(): lrp_name = '%s%s' % (ovn_const.LRP_PREFIX, port) original_state = self.get_gateway_chassis_binding(lrp_name) az_hints = self.get_gateway_chassis_az_hints(lrp_name) # Filter out chassis that lost physnet, the cms option, # or has been deleted. actual_gw_chassis = [ chassis for chassis in original_state if not utils.is_gateway_chassis_invalid( chassis, all_gw_chassis, physnet, chassis_with_physnets, az_hints, chassis_with_azs) ] # Check if gw ports are fully scheduled. if len(actual_gw_chassis) >= ovn_const.MAX_GW_CHASSIS: continue # If there are no gateways with 'enable-chassis-as-gw' cms option # then try to schedule on all gateways with physnets connected, # and filter required physnet. available_chassis = { c for c in all_gw_chassis or chassis_with_physnets.keys() if not utils.is_gateway_chassis_invalid( c, all_gw_chassis, physnet, chassis_with_physnets, az_hints, chassis_with_azs) } if available_chassis == set(original_state): # The same situation as was before. Nothing # to be rescheduled. continue if not available_chassis: # There is no chassis that could host # this gateway. continue unhosted_gateways.add(lrp_name) return unhosted_gateways
def filter_existing_chassis(self, nb_idl, gw_chassis, physnet, chassis_physnets, existing_chassis): chassis_list = copy.copy(existing_chassis) for chassis_name in existing_chassis: if utils.is_gateway_chassis_invalid(chassis_name, gw_chassis, physnet, chassis_physnets): LOG.debug("Chassis %(chassis)s is invalid for scheduling " "router in physnet: %(physnet)s.", {'chassis': chassis_name, 'physnet': physnet}) chassis_list.remove(chassis_name) return chassis_list
def get_unhosted_gateways(self, port_physnet_dict, chassis_physnets, gw_chassis): unhosted_gateways = [] for lrp in self._tables['Logical_Router_Port'].rows.values(): if not lrp.name.startswith('lrp-'): continue physnet = port_physnet_dict.get(lrp.name[len('lrp-'):]) chassis_list = self._get_logical_router_port_gateway_chassis(lrp) is_max_gw_reached = len(chassis_list) < ovn_const.MAX_GW_CHASSIS for chassis_name, prio in chassis_list: # TODO(azbiswas): Handle the case when a chassis is no # longer valid. This may involve moving conntrack states, # so it needs to discussed in the OVN community first. if is_max_gw_reached or utils.is_gateway_chassis_invalid( chassis_name, gw_chassis, physnet, chassis_physnets): unhosted_gateways.append(lrp.name) return unhosted_gateways
def test_gateway_chassis_valid(self): # Return False, since everything is valid self.assertFalse( utils.is_gateway_chassis_invalid(self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets))
def test_gateway_chassis_for_chassis_no_in_az_hints(self): # Return True since az_hints not match chassis_azs az_hints = ['ovs'] self.assertTrue(utils.is_gateway_chassis_invalid( self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets, az_hints, self.chassis_azs))
def test_gateway_chassis_for_chassis_az_hints_empty(self): # Return False since az_hints is [] az_hints = [] self.assertFalse(utils.is_gateway_chassis_invalid( self.chassis_name, self.gw_chassis, self.physnet, self.chassis_physnets, az_hints, self.chassis_azs))