Beispiel #1
0
 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."))
Beispiel #2
0
 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."
                 ))
Beispiel #3
0
 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)
Beispiel #4
0
 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)
Beispiel #5
0
 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)
Beispiel #6
0
 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
Beispiel #7
0
 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."))