def _validate_network_and_fill_or_validate_subnet(load_balancer): network = validate.network_exists_optionally_contains_subnet( network_id=load_balancer.vip_network_id, subnet_id=load_balancer.vip_subnet_id) if not load_balancer.vip_subnet_id: network_driver = utils.get_network_driver() if load_balancer.vip_address: for subnet_id in network.subnets: subnet = network_driver.get_subnet(subnet_id) if validate.is_ip_member_of_cidr(load_balancer.vip_address, subnet.cidr): load_balancer.vip_subnet_id = subnet_id break if not load_balancer.vip_subnet_id: raise exceptions.ValidationException(detail=_( "Supplied network does not contain a subnet for " "VIP address specified.")) else: # If subnet and IP are not provided, pick the first subnet, # preferring ipv4 for subnet_id in network.subnets: # Use the first subnet, in case there are no ipv4 subnets if not load_balancer.vip_subnet_id: load_balancer.vip_subnet_id = subnet_id subnet = network_driver.get_subnet(subnet_id) if subnet.ip_version == 4: load_balancer.vip_subnet_id = subnet_id break if not load_balancer.vip_subnet_id: raise exceptions.ValidationException(detail=_( "Supplied network does not contain a subnet."))
def _validate_network_and_fill_or_validate_subnet(load_balancer): network = validate.network_exists_optionally_contains_subnet( network_id=load_balancer.vip_network_id, subnet_id=load_balancer.vip_subnet_id) if not load_balancer.vip_subnet_id: network_driver = utils.get_network_driver() if load_balancer.vip_address: for subnet_id in network.subnets: subnet = network_driver.get_subnet(subnet_id) if validate.is_ip_member_of_cidr(load_balancer.vip_address, subnet.cidr): load_balancer.vip_subnet_id = subnet_id break if not load_balancer.vip_subnet_id: raise exceptions.ValidationException(detail=_( "Supplied network does not contain a subnet for " "VIP address specified." )) else: # If subnet and IP are not provided, pick the first subnet, # preferring ipv4 for subnet_id in network.subnets: # Use the first subnet, in case there are no ipv4 subnets if not load_balancer.vip_subnet_id: load_balancer.vip_subnet_id = subnet_id subnet = network_driver.get_subnet(subnet_id) if subnet.ip_version == 4: load_balancer.vip_subnet_id = subnet_id break if not load_balancer.vip_subnet_id: raise exceptions.ValidationException(detail=_( "Supplied network does not contain a subnet." ))
def test_network_exists_with_valid_network(self): network_id = uuidutils.generate_uuid() network = network_models.Network(id=network_id) with mock.patch('octavia.common.utils.get_network_driver') as net_mock: net_mock.return_value.get_network.return_value = network self.assertEqual( validate.network_exists_optionally_contains_subnet(network_id), network)
def test_network_exists_with_valid_network(self): network_id = uuidutils.generate_uuid() network = network_models.Network(id=network_id) with mock.patch( 'octavia.common.utils.get_network_driver') as net_mock: net_mock.return_value.get_network.return_value = network self.assertEqual( validate.network_exists_optionally_contains_subnet(network_id), network)
def test_network_exists_with_valid_subnet(self): vip = lb_types.VIP() vip.network_id = uuidutils.generate_uuid() vip.subnet_id = uuidutils.generate_uuid() network = network_models.Network(id=vip.network_id, subnets=[vip.subnet_id]) with mock.patch('octavia.common.utils.get_network_driver') as net_mock: net_mock.return_value.get_network.return_value = network self.assertEqual( validate.network_exists_optionally_contains_subnet(vip), network)
def _validate_network_and_fill_or_validate_subnet(load_balancer, context=None): network = validate.network_exists_optionally_contains_subnet( network_id=load_balancer.vip_network_id, subnet_id=load_balancer.vip_subnet_id, context=context) if not load_balancer.vip_subnet_id: network_driver = utils.get_network_driver() if load_balancer.vip_address: for subnet_id in network.subnets: subnet = network_driver.get_subnet(subnet_id) if validate.is_ip_member_of_cidr(load_balancer.vip_address, subnet.cidr): load_balancer.vip_subnet_id = subnet_id break if not load_balancer.vip_subnet_id: raise exceptions.ValidationException(detail=_( "Supplied network does not contain a subnet for " "VIP address specified." )) else: # If subnet and IP are not provided, pick the first subnet with # enough available IPs, preferring ipv4 if not network.subnets: raise exceptions.ValidationException(detail=_( "Supplied network does not contain a subnet." )) ip_avail = network_driver.get_network_ip_availability( network) if (CONF.controller_worker.loadbalancer_topology == constants.TOPOLOGY_SINGLE): num_req_ips = 2 if (CONF.controller_worker.loadbalancer_topology == constants.TOPOLOGY_ACTIVE_STANDBY): num_req_ips = 3 subnets = [subnet_id for subnet_id in network.subnets if utils.subnet_ip_availability(ip_avail, subnet_id, num_req_ips)] if not subnets: raise exceptions.ValidationException(detail=_( "Subnet(s) in the supplied network do not contain " "enough available IPs." )) for subnet_id in subnets: # Use the first subnet, in case there are no ipv4 subnets if not load_balancer.vip_subnet_id: load_balancer.vip_subnet_id = subnet_id subnet = network_driver.get_subnet(subnet_id) if subnet.ip_version == 4: load_balancer.vip_subnet_id = subnet_id break
def _validate_network_and_fill_or_validate_subnet(load_balancer): network = validate.network_exists_optionally_contains_subnet( network_id=load_balancer.vip_network_id, subnet_id=load_balancer.vip_subnet_id) # If subnet is not provided, pick the first subnet, preferring ipv4 if not load_balancer.vip_subnet_id: network_driver = utils.get_network_driver() for subnet_id in network.subnets: # Use the first subnet, in case there are no ipv4 subnets if not load_balancer.vip_subnet_id: load_balancer.vip_subnet_id = subnet_id subnet = network_driver.get_subnet(subnet_id) if subnet.ip_version == 4: load_balancer.vip_subnet_id = subnet_id break if not load_balancer.vip_subnet_id: raise exceptions.ValidationException( detail=_("Supplied network does not contain a subnet."))