20f8271b6b
Some L3 ports can directly modify the IP address now, but there are some types of device_owner, for instance network:router_centralized_snat, should not allow to change the IP address, otherwise it will increase L3 agent code complexity. Since router public gateway port is related to the external network, and this port can be used for some service, like VPN. So after this patch we will only allow the gateway port to update the IP address directly, aka device_owner network:router_gateway. The following l3 router ports will not be allowed to directly update the IP address: network:ha_router_replicated_interface network:router_centralized_snat network:router_ha_interface network:router_interface network:router_interface_distributed Remove one unit test case since it will not occur in neutron. Change-Id: I2890a71abc82cb781b601afb879bdcca10e39257 Closes-Bug: #1796824
92 lines
3.0 KiB
Python
92 lines
3.0 KiB
Python
# Copyright 2015 OpenStack LLC.
|
|
# All Rights Reserved.
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
|
# not use this file except in compliance with the License. You may obtain
|
|
# a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
|
# License for the specific language governing permissions and limitations
|
|
# under the License.
|
|
|
|
from neutron_lib import exceptions
|
|
|
|
from neutron._i18n import _
|
|
|
|
|
|
class InvalidSubnetRequestType(exceptions.BadRequest):
|
|
message = _("Cannot handle subnet of type %(subnet_type)s")
|
|
|
|
|
|
class AddressCalculationFailure(exceptions.NeutronException):
|
|
message = _("Unable to calculate %(address_type)s address because of:"
|
|
"%(reason)s")
|
|
|
|
|
|
class InvalidAddressType(exceptions.NeutronException):
|
|
message = _("Unknown address type %(address_type)s")
|
|
|
|
|
|
class IpAddressAllocationNotFound(exceptions.NeutronException):
|
|
message = _("Unable to find IP address %(ip_address)s on subnet "
|
|
"%(subnet_id)s")
|
|
|
|
|
|
class IpAddressAlreadyAllocated(exceptions.Conflict):
|
|
message = _("IP address %(ip)s already allocated in subnet %(subnet_id)s")
|
|
|
|
|
|
class InvalidIpForSubnet(exceptions.BadRequest):
|
|
message = _("IP address %(ip)s does not belong to subnet %(subnet_id)s")
|
|
|
|
|
|
class InvalidAddressRequest(exceptions.BadRequest):
|
|
message = _("The address allocation request could not be satisfied "
|
|
"because: %(reason)s")
|
|
|
|
|
|
class InvalidSubnetRequest(exceptions.BadRequest):
|
|
message = _("The subnet request could not be satisfied because: "
|
|
"%(reason)s")
|
|
|
|
|
|
class IPAddressChangeNotAllowed(exceptions.BadRequest):
|
|
message = _("IP updates for port %(port_id)s are not allowed")
|
|
|
|
|
|
class AllocationOnAutoAddressSubnet(exceptions.InvalidInput):
|
|
message = _("IPv6 address %(ip)s cannot be directly "
|
|
"assigned to a port on subnet %(subnet_id)s as the "
|
|
"subnet is configured for automatic addresses")
|
|
|
|
|
|
class IpAddressGenerationFailure(exceptions.Conflict):
|
|
message = _("No more IP addresses available for subnet %(subnet_id)s.")
|
|
|
|
|
|
class IpAddressGenerationFailureAllSubnets(IpAddressGenerationFailure):
|
|
message = _("No more IP addresses available.")
|
|
|
|
|
|
class IpAddressGenerationFailureNoMatchingSubnet(IpAddressGenerationFailure):
|
|
message = _("No valid service subnet for the given device owner, "
|
|
"network %(network_id)s, service type %(service_type)s.")
|
|
|
|
|
|
class IPAllocationFailed(exceptions.NeutronException):
|
|
message = _("IP allocation failed. Try again later.")
|
|
|
|
|
|
class IpamValueInvalid(exceptions.Conflict):
|
|
def __init__(self, message=None):
|
|
self.message = message
|
|
super(IpamValueInvalid, self).__init__()
|
|
|
|
|
|
class DeferIpam(exceptions.NeutronException):
|
|
message = _("Exception used to signal that IP allocation is deferred")
|