Exemple #1
0
 def _validate_network_subnetpools(self, network, new_subnetpool_id,
                                   ip_version):
     """Validate all subnets on the given network have been allocated from
        the same subnet pool as new_subnetpool_id
     """
     for subnet in network.subnets:
         if (subnet.ip_version == ip_version
                 and new_subnetpool_id != subnet.subnetpool_id):
             raise exc.NetworkSubnetPoolAffinityError()
Exemple #2
0
    def _validate_network_subnetpools(self, network, subnet_ip_version,
                                      new_subnetpool, network_scope):
        """Validate all subnets on the given network have been allocated from
           the same subnet pool as new_subnetpool if no address scope is
           used. If address scopes are used, validate that all subnets on the
           given network participate in the same address scope.
        """
        # 'new_subnetpool' might just be the Prefix Delegation ID
        ipv6_pd_subnetpool = new_subnetpool == const.IPV6_PD_POOL_ID

        # Check address scope affinities
        if network_scope:
            if (ipv6_pd_subnetpool or
                    new_subnetpool and
                    new_subnetpool.address_scope_id != network_scope.id):
                raise addr_scope_exc.NetworkAddressScopeAffinityError()

        # Checks for situations where address scopes aren't involved
        for subnet in network.subnets:
            if ipv6_pd_subnetpool:
                # Check the prefix delegation case.  Since there is no
                # subnetpool object, we just check against the PD ID.
                if (subnet.ip_version == const.IP_VERSION_6 and
                        subnet.subnetpool_id != const.IPV6_PD_POOL_ID):
                    raise exc.NetworkSubnetPoolAffinityError()
            else:
                if new_subnetpool:
                    # In this case we have the new subnetpool object, so
                    # we can check the ID and IP version.
                    if (subnet.subnetpool_id != new_subnetpool.id and
                            subnet.ip_version == new_subnetpool.ip_version and
                            not network_scope):
                        raise exc.NetworkSubnetPoolAffinityError()
                else:
                    if (subnet.subnetpool_id and
                            subnet.ip_version == subnet_ip_version):
                        raise exc.NetworkSubnetPoolAffinityError()