Merge "use l3 api def from neutron-lib"

This commit is contained in:
Zuul 2017-12-16 13:01:14 +00:00 committed by Gerrit Code Review
commit bfaae98396
28 changed files with 111 additions and 276 deletions

View File

@ -17,6 +17,7 @@ from neutron_lib.api.definitions import portbindings
from neutron_lib import constants
from neutron_lib import context as neutron_context
from neutron_lib import exceptions
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
from oslo_config import cfg
@ -26,7 +27,6 @@ import oslo_messaging
from neutron.common import constants as n_const
from neutron.common import utils
from neutron.db import api as db_api
from neutron.extensions import l3
LOG = logging.getLogger(__name__)
@ -253,7 +253,7 @@ class L3RpcCallback(object):
self.l3plugin.update_floatingip_status(context,
floatingip_id,
status)
except l3.FloatingIPNotFound:
except l3_exc.FloatingIPNotFound:
LOG.debug("Floating IP: %s no longer present.",
floatingip_id)
# Find all floating IPs known to have been the given router

View File

@ -12,6 +12,7 @@
# under the License.
from neutron_lib.api.definitions import availability_zone as az_def
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.callbacks import events
from neutron_lib.callbacks import registry
from neutron_lib.callbacks import resources
@ -21,7 +22,6 @@ from neutron_lib.plugins import directory
from neutron.common import utils
from neutron.db import _resource_extend as resource_extend
from neutron.db import l3_attrs_db
from neutron.extensions import l3
@resource_extend.has_resource_extenders
@ -30,7 +30,7 @@ class RouterAvailabilityZoneMixin(l3_attrs_db.ExtraAttributesMixin):
"""Mixin class to enable router's availability zone attributes."""
@staticmethod
@resource_extend.extends([l3.ROUTERS])
@resource_extend.extends([l3_apidef.ROUTERS])
def _add_az_to_response(router_res, router_db):
l3_plugin = directory.get_plugin(constants.L3)
if not utils.is_extension_supported(l3_plugin,

View File

@ -27,6 +27,7 @@ from neutron_lib.callbacks import resources
from neutron_lib import constants
from neutron_lib import context as ctx
from neutron_lib import exceptions as exc
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
from oslo_config import cfg
@ -53,7 +54,6 @@ from neutron.db import models_v2
from neutron.db import rbac_db_mixin as rbac_mixin
from neutron.db import rbac_db_models as rbac_db
from neutron.db import standardattrdescription_db as stattr_db
from neutron.extensions import l3
from neutron import ipam
from neutron.ipam import exceptions as ipam_exc
from neutron.ipam import subnet_alloc
@ -651,7 +651,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
for id in router_ids:
try:
self._update_router_gw_port(context, id, network, subnet)
except l3.RouterNotFound:
except l3_exc.RouterNotFound:
LOG.debug("Router %(id)s was concurrently deleted while "
"updating GW port for subnet %(s)s",
{'id': id, 's': subnet})
@ -1422,7 +1422,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
try:
ctx_admin = context.elevated()
router = self.get_router(ctx_admin, device_id)
except l3.RouterNotFound:
except l3_exc.RouterNotFound:
return
else:
l3plugin = directory.get_plugin(plugin_constants.L3)
@ -1431,7 +1431,7 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
ctx_admin = context.elevated()
router = l3plugin.get_router(ctx_admin,
device_id)
except l3.RouterNotFound:
except l3_exc.RouterNotFound:
return
else:
# raise as extension doesn't support L3 anyways.

View File

@ -14,6 +14,7 @@
# under the License.
from neutron_lib.api.definitions import dns as dns_apidef
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api import validators
from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import dns as dns_exc
@ -23,7 +24,6 @@ from oslo_log import log as logging
from neutron._i18n import _
from neutron.common import utils
from neutron.db import _resource_extend as resource_extend
from neutron.extensions import l3
from neutron.objects import floatingip as fip_obj
from neutron.objects import network
from neutron.objects import ports as port_obj
@ -66,7 +66,7 @@ class DNSDbMixin(object):
driver=cfg.CONF.external_dns_driver)
@staticmethod
@resource_extend.extends([l3.FLOATINGIPS])
@resource_extend.extends([l3_apidef.FLOATINGIPS])
def _extend_floatingip_dict_dns(floatingip_res, floatingip_db):
floatingip_res['dns_domain'] = ''
floatingip_res['dns_name'] = ''

View File

@ -14,6 +14,7 @@
# under the License.
import netaddr
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.exceptions import extraroute as xroute_exc
from neutron_lib.utils import helpers
from oslo_config import cfg
@ -24,7 +25,6 @@ from neutron.common import utils
from neutron.conf.db import extraroute_db
from neutron.db import _resource_extend as resource_extend
from neutron.db import l3_db
from neutron.extensions import l3
from neutron.objects import router as l3_obj
@ -38,7 +38,7 @@ class ExtraRoute_dbonly_mixin(l3_db.L3_NAT_dbonly_mixin):
"""Mixin class to support extra route configuration on router."""
@staticmethod
@resource_extend.extends([l3.ROUTERS])
@resource_extend.extends([l3_apidef.ROUTERS])
def _extend_router_dict_extraroute(router_res, router_db):
router_res['routes'] = (ExtraRoute_dbonly_mixin.
_make_extra_route_list(

View File

@ -12,13 +12,13 @@
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api.validators import availability_zone as az_validator
from oslo_config import cfg
from neutron._i18n import _
from neutron.db import _resource_extend as resource_extend
from neutron.db.models import l3_attrs
from neutron.extensions import l3
def get_attr_info():
@ -38,7 +38,7 @@ class ExtraAttributesMixin(object):
"""Mixin class to enable router's extra attributes."""
@staticmethod
@resource_extend.extends([l3.ROUTERS])
@resource_extend.extends([l3_apidef.ROUTERS])
def _extend_extra_router_dict(router_res, router_db):
extra_attrs = router_db['extra_attributes'] or {}
for name, info in get_attr_info().items():

View File

@ -17,6 +17,7 @@ import random
import netaddr
from neutron_lib.api.definitions import external_net as extnet_apidef
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api import validators
from neutron_lib.callbacks import events
from neutron_lib.callbacks import exceptions
@ -25,6 +26,7 @@ from neutron_lib.callbacks import resources
from neutron_lib import constants
from neutron_lib import context as n_ctx
from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
from neutron_lib.services import base as base_services
@ -61,7 +63,7 @@ DEVICE_OWNER_HA_REPLICATED_INT = constants.DEVICE_OWNER_HA_REPLICATED_INT
DEVICE_OWNER_ROUTER_INTF = constants.DEVICE_OWNER_ROUTER_INTF
DEVICE_OWNER_ROUTER_GW = constants.DEVICE_OWNER_ROUTER_GW
DEVICE_OWNER_FLOATINGIP = constants.DEVICE_OWNER_FLOATINGIP
EXTERNAL_GW_INFO = l3.EXTERNAL_GW_INFO
EXTERNAL_GW_INFO = l3_apidef.EXTERNAL_GW_INFO
# Maps API field to DB column
# API parameter name and Database column names may differ.
@ -182,7 +184,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
router = model_query.get_by_id(
context, l3_models.Router, router_id)
except exc.NoResultFound:
raise l3.RouterNotFound(router_id=router_id)
raise l3_exc.RouterNotFound(router_id=router_id)
return router
def _make_router_dict(self, router, fields=None, process_extensions=True):
@ -203,7 +205,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
# class inheriting from CommonDbMixin, which is true for all existing
# plugins.
if process_extensions:
resource_extend.apply_funcs(l3.ROUTERS, res, router)
resource_extend.apply_funcs(l3_apidef.ROUTERS, res, router)
return db_utils.resource_fields(res, fields)
def _create_router_db(self, context, router, tenant_id):
@ -427,7 +429,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
old_network_id = router.gw_port['network_id']
if self.router_gw_port_has_floating_ips(admin_ctx, router_id):
raise l3.RouterExternalGatewayInUseByFloatingIp(
raise l3_exc.RouterExternalGatewayInUseByFloatingIp(
router_id=router_id, net_id=router.gw_port['network_id'])
gw_ips = [x['ip_address'] for x in router.gw_port['fixed_ips']]
gw_port_id = router.gw_port['id']
@ -459,7 +461,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
# NOTE(armax): preserve old check's behavior
if len(e.errors) == 1:
raise e.errors[0].error
raise l3.RouterInUse(router_id=router.id, reason=e)
raise l3_exc.RouterInUse(router_id=router.id, reason=e)
def _create_gw_port(self, context, router_id, router, new_network_id,
ext_ips):
@ -544,7 +546,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
device_owner = self._get_device_owner(context, router)
if any(rp.port_type == device_owner
for rp in router.attached_ports):
raise l3.RouterInUse(router_id=router_id)
raise l3_exc.RouterInUse(router_id=router_id)
return router
@db_api.retry_if_session_inactive()
@ -750,7 +752,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
# raise the underlying exception
reason = (_('cannot perform router interface attachment '
'due to %(reason)s') % {'reason': e})
raise l3.RouterInterfaceAttachmentConflict(reason=reason)
raise l3_exc.RouterInterfaceAttachmentConflict(reason=reason)
def _add_interface_by_port(self, context, router, port_id, owner):
# Update owner before actual process in order to avoid the
@ -922,11 +924,11 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
# NOTE(armax): preserve old check's behavior
if len(e.errors) == 1:
raise e.errors[0].error
raise l3.RouterInUse(router_id=router_id, reason=e)
raise l3_exc.RouterInUse(router_id=router_id, reason=e)
fip_objs = l3_obj.FloatingIP.get_objects(context, router_id=router_id)
for fip_obj in fip_objs:
if fip_obj.fixed_ip_address in subnet_cidr:
raise l3.RouterInterfaceInUseByFloatingIP(
raise l3_exc.RouterInterfaceInUseByFloatingIP(
router_id=router_id, subnet_id=subnet_id)
def _remove_interface_by_port(self, context, router_id,
@ -941,11 +943,11 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
try:
port = self._core_plugin.get_port(context, obj.port_id)
except n_exc.PortNotFound:
raise l3.RouterInterfaceNotFound(router_id=router_id,
port_id=port_id)
raise l3_exc.RouterInterfaceNotFound(
router_id=router_id, port_id=port_id)
else:
raise l3.RouterInterfaceNotFound(router_id=router_id,
port_id=port_id)
raise l3_exc.RouterInterfaceNotFound(
router_id=router_id, port_id=port_id)
port_subnet_ids = [fixed_ip['subnet_id']
for fixed_ip in port['fixed_ips']]
if subnet_id and subnet_id not in port_subnet_ids:
@ -991,8 +993,8 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
return (p, [subnet])
except exc.NoResultFound:
pass
raise l3.RouterInterfaceNotFoundForSubnet(router_id=router_id,
subnet_id=subnet_id)
raise l3_exc.RouterInterfaceNotFoundForSubnet(
router_id=router_id, subnet_id=subnet_id)
@db_api.retry_if_session_inactive()
def remove_router_interface(self, context, router_id, interface_info):
@ -1041,7 +1043,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
def _get_floatingip(self, context, id):
floatingip = l3_obj.FloatingIP.get_object(context, id=id)
if not floatingip:
raise l3.FloatingIPNotFound(floatingip_id=id)
raise l3_exc.FloatingIPNotFound(floatingip_id=id)
return floatingip
def _make_floatingip_dict(self, floatingip, fields=None,
@ -1064,7 +1066,8 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
# TODO(lujinluo): Change floatingip.db_obj to floatingip once all
# codes are migrated to use Floating IP OVO object.
if process_extensions:
resource_extend.apply_funcs(l3.FLOATINGIPS, res, floatingip.db_obj)
resource_extend.apply_funcs(
l3_apidef.FLOATINGIPS, res, floatingip.db_obj)
return db_utils.resource_fields(res, fields)
def _get_router_for_floatingip(self, context, internal_port,
@ -1116,7 +1119,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
if first_router_id:
return first_router_id
raise l3.ExternalGatewayForFloatingIPNotFound(
raise l3_exc.ExternalGatewayForFloatingIPNotFound(
subnet_id=internal_subnet['id'],
external_network_id=external_network_id,
port_id=internal_port['id'])
@ -1211,7 +1214,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
if fip_exists:
floating_ip_address = (str(floatingip_obj.floating_ip_address)
if floatingip_obj.floating_ip_address else None)
raise l3.FloatingIPPortAlreadyAssociated(
raise l3_exc.FloatingIPPortAlreadyAssociated(
port_id=fip['port_id'],
fip_id=floatingip_obj.id,
floating_ip_address=floating_ip_address,
@ -1355,7 +1358,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
dns_data)
# TODO(lujinluo): Change floatingip_db to floatingip_obj once all
# codes are migrated to use Floating IP OVO object.
resource_extend.apply_funcs(l3.FLOATINGIPS, floatingip_dict,
resource_extend.apply_funcs(l3_apidef.FLOATINGIPS, floatingip_dict,
floatingip_db)
return floatingip_dict
@ -1398,7 +1401,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
dns_data)
# TODO(lujinluo): Change floatingip_db to floatingip_obj once all
# codes are migrated to use Floating IP OVO object.
resource_extend.apply_funcs(l3.FLOATINGIPS, floatingip_dict,
resource_extend.apply_funcs(l3_apidef.FLOATINGIPS, floatingip_dict,
floatingip_db)
return old_floatingip, floatingip_dict
@ -1477,7 +1480,7 @@ class L3_NAT_dbonly_mixin(l3.RouterPluginBase,
try:
self.get_router(context.elevated(), router_id)
return True
except l3.RouterNotFound:
except l3_exc.RouterNotFound:
return False
def prevent_l3_port_deletion(self, context, port_id):

View File

@ -14,6 +14,7 @@
import collections
import netaddr
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api.definitions import portbindings
from neutron_lib.api import validators
from neutron_lib.callbacks import events
@ -22,6 +23,7 @@ from neutron_lib.callbacks import registry
from neutron_lib.callbacks import resources
from neutron_lib import constants as const
from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
from oslo_config import cfg
@ -39,7 +41,6 @@ from neutron.db import l3_attrs_db
from neutron.db import l3_db
from neutron.db.models import allowed_address_pair as aap_models
from neutron.db import models_v2
from neutron.extensions import l3
from neutron.ipam import utils as ipam_utils
from neutron.objects import agent as ag_obj
from neutron.objects import base as base_obj
@ -101,7 +102,7 @@ class DVRResourceOperationHandler(object):
# NOTE(armax): preserve old check's behavior
if len(e.errors) == 1:
raise e.errors[0].error
raise l3.RouterInUse(router_id=router_db['id'], reason=e)
raise l3_exc.RouterInUse(router_id=router_db['id'], reason=e)
return True
@registry.receives(resources.ROUTER, [events.PRECOMMIT_UPDATE])
@ -147,7 +148,8 @@ class DVRResourceOperationHandler(object):
context, router_id, router,
request_attrs, router_db,
**kwargs):
if router.get(l3.EXTERNAL_GW_INFO) and not router['distributed']:
if (router.get(l3_apidef.EXTERNAL_GW_INFO) and
not router['distributed']):
old_router = kwargs['old_router']
if old_router and old_router['distributed']:
self.delete_csnat_router_interface_ports(
@ -159,7 +161,8 @@ class DVRResourceOperationHandler(object):
context, router_id, router,
request_attrs, router_db,
**kwargs):
if not router.get(l3.EXTERNAL_GW_INFO) or not router['distributed']:
if (not router.get(l3_apidef.EXTERNAL_GW_INFO) or
not router['distributed']):
# we don't care if it's not distributed or not attached to an
# external network
return
@ -168,7 +171,7 @@ class DVRResourceOperationHandler(object):
# gateway attachment
old_router = kwargs['old_router']
do_create = (not old_router['distributed'] or
not old_router.get(l3.EXTERNAL_GW_INFO))
not old_router.get(l3_apidef.EXTERNAL_GW_INFO))
if not do_create:
return
if not self._create_snat_intf_ports_if_not_exists(
@ -1010,7 +1013,7 @@ class L3_NAT_with_dvr_db_mixin(_DVRAgentInterfaceMixin,
try:
# using admin context as router may belong to admin tenant
router = self._get_router(context.elevated(), router_id)
except l3.RouterNotFound:
except l3_exc.RouterNotFound:
LOG.warning("Router %s was not found. "
"Skipping agent notification.",
router_id)

View File

@ -12,11 +12,11 @@
# under the License.
#
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.services.qos import constants as qos_consts
from neutron.common import exceptions as n_exc
from neutron.db import _resource_extend as resource_extend
from neutron.extensions import l3
from neutron.objects.db import api as obj_db_api
from neutron.objects.qos import policy as policy_object
@ -26,7 +26,7 @@ class FloatingQoSDbMixin(object):
"""Mixin class to enable floating IP's QoS extra attributes."""
@staticmethod
@resource_extend.extends([l3.FLOATINGIPS])
@resource_extend.extends([l3_apidef.FLOATINGIPS])
def _extend_extra_fip_dict(fip_res, fip_db):
if fip_db.get('qos_policy_binding'):
fip_res[qos_consts.QOS_POLICY_ID] = (

View File

@ -13,6 +13,7 @@
# under the License.
#
from neutron_lib.api.definitions import l3 as l3_apidef
from oslo_config import cfg
import sqlalchemy as sa
from sqlalchemy import sql
@ -21,14 +22,11 @@ from neutron.conf.db import l3_gwmode_db
from neutron.db import _resource_extend as resource_extend
from neutron.db import l3_db
from neutron.db.models import l3 as l3_models
from neutron.extensions import l3
l3_gwmode_db.register_db_l3_gwmode_opts()
EXTERNAL_GW_INFO = l3.EXTERNAL_GW_INFO
# Modify the Router Data Model adding the enable_snat attribute
setattr(l3_models.Router, 'enable_snat',
sa.Column(sa.Boolean, default=True, server_default=sql.true(),
@ -40,11 +38,11 @@ class L3_NAT_dbonly_mixin(l3_db.L3_NAT_dbonly_mixin):
"""Mixin class to add configurable gateway modes."""
@staticmethod
@resource_extend.extends([l3.ROUTERS])
@resource_extend.extends([l3_apidef.ROUTERS])
def _extend_router_dict_gw_mode(router_res, router_db):
if router_db.gw_port_id:
nw_id = router_db.gw_port['network_id']
router_res[EXTERNAL_GW_INFO] = {
router_res[l3_apidef.EXTERNAL_GW_INFO] = {
'network_id': nw_id,
'enable_snat': router_db.enable_snat,
'external_fixed_ips': [
@ -84,7 +82,8 @@ class L3_NAT_dbonly_mixin(l3_db.L3_NAT_dbonly_mixin):
if gw_port_id and gw_ports.get(gw_port_id):
rtr['gw_port'] = gw_ports[gw_port_id]
# Add enable_snat key
rtr['enable_snat'] = rtr[EXTERNAL_GW_INFO]['enable_snat']
rtr['enable_snat'] = rtr[
l3_apidef.EXTERNAL_GW_INFO]['enable_snat']
return routers

View File

@ -25,6 +25,7 @@ from neutron_lib.callbacks import registry
from neutron_lib.callbacks import resources
from neutron_lib import constants
from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.exceptions import l3_ext_ha_mode as l3ha_exc
from neutron_lib.objects import exceptions as obj_base
from oslo_config import cfg
@ -47,7 +48,6 @@ from neutron.db.availability_zone import router as router_az_db
from neutron.db import l3_dvr_db
from neutron.db.l3_dvr_db import is_distributed_router
from neutron.db.models import l3ha as l3ha_model
from neutron.extensions import l3
from neutron.objects import base
from neutron.objects import l3_hamode
from neutron.objects import router as l3_obj
@ -258,7 +258,7 @@ class L3_HA_NAT_db_mixin(l3_dvr_db.L3_NAT_with_dvr_db_mixin,
'Failed to create HA router agent PortBinding, '
'Router %s has already been removed '
'by concurrent operation', router_id)
raise l3.RouterNotFound(router_id=router_id)
raise l3_exc.RouterNotFound(router_id=router_id)
def add_ha_port(self, context, router_id, network_id, tenant_id):
# NOTE(kevinbenton): we have to block any ongoing transactions because

View File

@ -10,6 +10,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.db import constants as db_const
from neutron_lib.db import model_base
import sqlalchemy as sa
@ -18,7 +19,6 @@ from sqlalchemy import orm
from neutron.db.models import l3agent as rb_model
from neutron.db import models_v2
from neutron.db import standard_attr
from neutron.extensions import l3
class RouterPort(model_base.BASEV2):
@ -62,8 +62,8 @@ class Router(standard_attr.HasStandardAttributes, model_base.BASEV2,
l3_agents = orm.relationship(
'Agent', lazy='subquery', viewonly=True,
secondary=rb_model.RouterL3AgentBinding.__table__)
api_collections = [l3.ROUTERS]
collection_resource_map = {l3.ROUTERS: l3.ROUTER}
api_collections = [l3_apidef.ROUTERS]
collection_resource_map = {l3_apidef.ROUTERS: l3_apidef.ROUTER}
tag_support = True
@ -104,8 +104,8 @@ class FloatingIP(standard_attr.HasStandardAttributes, model_base.BASEV2,
name=('uniq_floatingips0floatingnetworkid'
'0fixedportid0fixedipaddress')),
model_base.BASEV2.__table_args__,)
api_collections = [l3.FLOATINGIPS]
collection_resource_map = {l3.FLOATINGIPS: l3.FLOATINGIP}
api_collections = [l3_apidef.FLOATINGIPS]
collection_resource_map = {l3_apidef.FLOATINGIPS: l3_apidef.FLOATINGIP}
tag_support = True

View File

@ -15,10 +15,8 @@
import abc
from neutron_lib.api import converters
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api import extensions
from neutron_lib.db import constants as db_const
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants
import six
@ -26,146 +24,22 @@ from neutron.api.v2 import resource_helper
from neutron.conf import quota
# TODO(boden): remove these shims on l3 api def consumption
RouterNotFound = l3_exc.RouterNotFound
RouterInUse = l3_exc.RouterInUse
RouterInterfaceNotFound = l3_exc.RouterInterfaceNotFound
RouterInterfaceNotFoundForSubnet = l3_exc.RouterInterfaceNotFoundForSubnet
RouterInterfaceInUseByFloatingIP = l3_exc.RouterInterfaceInUseByFloatingIP
FloatingIPNotFound = l3_exc.FloatingIPNotFound
ExternalGatewayForFloatingIPNotFound = (
l3_exc.ExternalGatewayForFloatingIPNotFound)
FloatingIPPortAlreadyAssociated = l3_exc.FloatingIPPortAlreadyAssociated
RouterExternalGatewayInUseByFloatingIp = (
l3_exc.RouterExternalGatewayInUseByFloatingIp)
RouterInterfaceAttachmentConflict = l3_exc.RouterInterfaceAttachmentConflict
ROUTER = 'router'
ROUTERS = 'routers'
FLOATINGIP = 'floatingip'
FLOATINGIPS = '%ss' % FLOATINGIP
EXTERNAL_GW_INFO = 'external_gateway_info'
RESOURCE_ATTRIBUTE_MAP = {
ROUTERS: {
'id': {'allow_post': False, 'allow_put': False,
'validate': {'type:uuid': None},
'is_visible': True,
'primary_key': True},
'name': {'allow_post': True, 'allow_put': True,
'validate': {'type:string': db_const.NAME_FIELD_SIZE},
'is_visible': True, 'default': ''},
'admin_state_up': {'allow_post': True, 'allow_put': True,
'default': True,
'convert_to': converters.convert_to_boolean,
'is_visible': True},
'status': {'allow_post': False, 'allow_put': False,
'is_visible': True},
'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True,
'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True},
EXTERNAL_GW_INFO: {'allow_post': True, 'allow_put': True,
'is_visible': True, 'default': None,
'enforce_policy': True,
'validate': {
'type:dict_or_nodata': {
'network_id': {'type:uuid': None,
'required': True},
'external_fixed_ips': {
'convert_list_to':
converters.convert_kvp_list_to_dict,
'type:fixed_ips': None,
'default': None,
'required': False,
}
}
}}
},
FLOATINGIPS: {
'id': {'allow_post': False, 'allow_put': False,
'validate': {'type:uuid': None},
'is_visible': True,
'primary_key': True},
'floating_ip_address': {'allow_post': True, 'allow_put': False,
'validate': {'type:ip_address_or_none': None},
'is_visible': True, 'default': None,
'enforce_policy': True},
'subnet_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:uuid_or_none': None},
'is_visible': False, # Use False for input only attr
'default': None},
'floating_network_id': {'allow_post': True, 'allow_put': False,
'validate': {'type:uuid': None},
'is_visible': True},
'router_id': {'allow_post': False, 'allow_put': False,
'validate': {'type:uuid_or_none': None},
'is_visible': True, 'default': None},
'port_id': {'allow_post': True, 'allow_put': True,
'validate': {'type:uuid_or_none': None},
'is_visible': True, 'default': None,
'required_by_policy': True},
'fixed_ip_address': {'allow_post': True, 'allow_put': True,
'validate': {'type:ip_address_or_none': None},
'is_visible': True, 'default': None},
'tenant_id': {'allow_post': True, 'allow_put': False,
'required_by_policy': True,
'validate': {
'type:string': db_const.PROJECT_ID_FIELD_SIZE},
'is_visible': True},
'status': {'allow_post': False, 'allow_put': False,
'is_visible': True},
},
}
# Register the configuration options
quota.register_quota_opts(quota.l3_quota_opts)
class L3(extensions.ExtensionDescriptor):
@classmethod
def get_name(cls):
return "Neutron L3 Router"
@classmethod
def get_alias(cls):
return "router"
@classmethod
def get_description(cls):
return ("Router abstraction for basic L3 forwarding"
" between L2 Neutron networks and access to external"
" networks via a NAT gateway.")
@classmethod
def get_updated(cls):
return "2012-07-20T10:00:00-00:00"
class L3(extensions.APIExtensionDescriptor):
api_definition = l3_apidef
@classmethod
def get_resources(cls):
"""Returns Ext Resources."""
plural_mappings = resource_helper.build_plural_mappings(
{}, RESOURCE_ATTRIBUTE_MAP)
action_map = {'router': {'add_router_interface': 'PUT',
'remove_router_interface': 'PUT'}}
return resource_helper.build_resource_info(plural_mappings,
RESOURCE_ATTRIBUTE_MAP,
constants.L3,
action_map=action_map,
register_quota=True)
def update_attributes_map(self, attributes):
super(L3, self).update_attributes_map(
attributes, extension_attrs_map=RESOURCE_ATTRIBUTE_MAP)
def get_extended_resources(self, version):
if version == "2.0":
return RESOURCE_ATTRIBUTE_MAP
else:
return {}
{}, l3_apidef.RESOURCE_ATTRIBUTE_MAP)
return resource_helper.build_resource_info(
plural_mappings, l3_apidef.RESOURCE_ATTRIBUTE_MAP,
constants.L3, action_map=l3_apidef.ACTION_MAP,
register_quota=True)
@six.add_metaclass(abc.ABCMeta)

View File

@ -11,6 +11,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api.definitions import port as port_def
from neutron_lib.api.definitions import subnet as subnet_def
from neutron_lib.api.definitions import subnetpool as subnetpool_def
@ -20,7 +21,6 @@ from neutron_lib.plugins import directory
from neutron.api import extensions
from neutron.api.v2 import resource as api_resource
from neutron.extensions import l3
from neutron.extensions import tagging
@ -32,7 +32,7 @@ TAG_SUPPORTED_RESOURCES = {
subnet_def.COLLECTION_NAME: subnet_def.RESOURCE_NAME,
port_def.COLLECTION_NAME: port_def.RESOURCE_NAME,
subnetpool_def.COLLECTION_NAME: subnetpool_def.RESOURCE_NAME,
l3.ROUTERS: l3.ROUTER,
l3_apidef.ROUTERS: l3_apidef.ROUTER,
}

View File

@ -21,6 +21,7 @@ import random
from neutron_lib.api.definitions import availability_zone as az_def
from neutron_lib import constants as lib_const
from neutron_lib.exceptions import l3 as l3_exc
from oslo_config import cfg
from oslo_db import exception as db_exc
from oslo_log import log as logging
@ -30,7 +31,6 @@ from neutron.common import utils
from neutron.conf.db import l3_hamode_db
from neutron.db import api as db_api
from neutron.db.models import l3agent as rb_model
from neutron.extensions import l3
from neutron.objects import l3agent as rb_obj
@ -297,7 +297,7 @@ class L3Scheduler(object):
# and RouterPort tables
plugin._core_plugin.delete_port(context, port_id,
l3_port_check=False)
except l3.RouterNotFound:
except l3_exc.RouterNotFound:
LOG.debug('Router %s has already been removed '
'by concurrent operation', router_id)
# we try to clear the HA network here in case the port we created

View File

@ -14,6 +14,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api.definitions import network as net_def
from neutron_lib.callbacks import events
from neutron_lib.callbacks import registry
@ -30,7 +31,6 @@ from neutron.db import _resource_extend as resource_extend
from neutron.db import _utils as db_utils
from neutron.db import api as db_api
from neutron.db import common_db_mixin
from neutron.extensions import l3
from neutron.objects import auto_allocate as auto_allocate_obj
from neutron.objects import base as base_obj
from neutron.objects import network as net_obj
@ -297,7 +297,8 @@ class AutoAllocatedTopologyMixin(common_db_mixin.CommonDbMixin):
"""Uplink tenant subnet(s) to external network."""
router_args = {
'name': 'auto_allocated_router',
l3.EXTERNAL_GW_INFO: {'network_id': default_external_network},
l3_apidef.EXTERNAL_GW_INFO: {
'network_id': default_external_network},
'tenant_id': tenant_id,
'admin_state_up': True
}

View File

@ -13,6 +13,7 @@
# License for the specific language governing permissions and limitations
# under the License.
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib import constants as n_const
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.services import base as service_base
@ -36,7 +37,6 @@ from neutron.db import l3_gwmode_db
from neutron.db import l3_hamode_db
from neutron.db import l3_hascheduler_db
from neutron.db.models import l3 as l3_models
from neutron.extensions import l3
from neutron.quota import resource_registry
from neutron import service
from neutron.services.l3_router.service_providers import driver_controller
@ -153,6 +153,6 @@ class L3RouterPlugin(service_base.ServicePluginBase,
initial_status=n_const.FLOATINGIP_STATUS_DOWN)
@staticmethod
@resource_extend.extends([l3.ROUTERS])
@resource_extend.extends([l3_apidef.ROUTERS])
def add_flavor_id(router_res, router_db):
router_res['flavor_id'] = router_db['flavor_id']

View File

@ -14,11 +14,11 @@
import mock
from neutron_lib.api.definitions import external_net as extnet_apidef
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api.definitions import portbindings
from neutron_lib import constants
from neutron.common import topics
from neutron.extensions import l3
from neutron.tests.common import helpers
from neutron.tests.functional.services.l3_router import \
test_l3_dvr_router_plugin
@ -235,7 +235,7 @@ class L3DvrHATestCase(test_l3_dvr_router_plugin.L3DvrTestCase):
gw_info = {'network_id': ext_net['network']['id']}
self.l3_plugin.update_router(
self.context, router['id'],
{'router': {l3.EXTERNAL_GW_INFO: gw_info}})
{'router': {l3_apidef.EXTERNAL_GW_INFO: gw_info}})
self.l3_plugin.add_router_interface(
self.context, router['id'],
{'subnet_id': subnet['subnet']['id']})
@ -266,7 +266,7 @@ class L3DvrHATestCase(test_l3_dvr_router_plugin.L3DvrTestCase):
gw_info = {'network_id': ext_net['network']['id']}
self.l3_plugin.update_router(
self.context, router['id'],
{'router': {l3.EXTERNAL_GW_INFO: gw_info}})
{'router': {l3_apidef.EXTERNAL_GW_INFO: gw_info}})
self.l3_plugin.add_router_interface(
self.context, router['id'],
{'subnet_id': subnet['subnet']['id']})
@ -312,12 +312,12 @@ class L3DvrHATestCase(test_l3_dvr_router_plugin.L3DvrTestCase):
gw_info = {'network_id': ext_net['network']['id']}
self.l3_plugin.update_router(
self.context, router['id'],
{'router': {l3.EXTERNAL_GW_INFO: gw_info}})
{'router': {l3_apidef.EXTERNAL_GW_INFO: gw_info}})
def _clear_external_gateway(self, router):
self.l3_plugin.update_router(
self.context, router['id'],
{'router': {l3.EXTERNAL_GW_INFO: {}}})
{'router': {l3_apidef.EXTERNAL_GW_INFO: {}}})
def _remove_interface_from_router(self, router, subnet):
self.l3_plugin.remove_router_interface(

View File

@ -14,6 +14,7 @@
import mock
from neutron_lib.api.definitions import external_net as extnet_apidef
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api.definitions import portbindings
from neutron_lib.callbacks import events
from neutron_lib.callbacks import registry
@ -25,7 +26,6 @@ from neutron_lib import context
from neutron.api.rpc.handlers import l3_rpc
from neutron.common import constants as n_const
from neutron.common import topics
from neutron.extensions import l3
from neutron.tests.common import helpers
from neutron.tests.unit.plugins.ml2 import base as ml2_test_base
@ -160,7 +160,7 @@ class L3DvrTestCase(L3DvrTestCaseBase):
gw_info = {'network_id': ext_net['network']['id']}
self.l3_plugin.update_router(
self.context, router['id'],
{'router': {l3.EXTERNAL_GW_INFO: gw_info}})
{'router': {l3_apidef.EXTERNAL_GW_INFO: gw_info}})
snat_router_intfs = self.l3_plugin._get_snat_sync_interfaces(
self.context, [router['id']])

View File

@ -21,13 +21,13 @@ from neutron_lib.callbacks import resources
from neutron_lib import constants as n_const
from neutron_lib import context
from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import directory
from oslo_utils import uuidutils
import testtools
from neutron.db import l3_db
from neutron.db.models import l3 as l3_models
from neutron.extensions import l3
from neutron.objects import router as l3_obj
from neutron.tests import base
@ -184,7 +184,7 @@ class TestL3_NAT_dbonly_mixin(base.BaseTestCase):
'device_id': '44', 'id': 'f',
'fixed_ips': [{'ip_address': '1.1.1.1', 'subnet_id': '4'}]}
self.db.get_router = mock.Mock()
self.db.get_router.side_effect = l3.RouterNotFound(router_id='44')
self.db.get_router.side_effect = l3_exc.RouterNotFound(router_id='44')
self.db.prevent_l3_port_deletion(mock.Mock(), None)
@mock.patch.object(directory, 'get_plugin')

View File

@ -21,6 +21,7 @@ from neutron_lib.callbacks import resources
from neutron_lib import constants as const
from neutron_lib import context
from neutron_lib import exceptions
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
from oslo_utils import uuidutils
@ -31,7 +32,6 @@ from neutron.db import l3_dvr_db
from neutron.db import l3_dvrscheduler_db
from neutron.db.models import l3 as l3_models
from neutron.db import models_v2
from neutron.extensions import l3
from neutron.objects import agent as agent_obj
from neutron.objects import router as router_obj
from neutron.tests.unit.db import test_db_base_plugin_v2
@ -854,7 +854,7 @@ class L3DvrTestCase(test_db_base_plugin_v2.NeutronDbPluginV2TestCase):
self.mixin, '_add_csnat_router_interface_port') as f:
f.side_effect = RuntimeError()
self.assertRaises(
l3.RouterInterfaceAttachmentConflict,
l3_exc.RouterInterfaceAttachmentConflict,
self.mixin.add_router_interface,
self.ctx, router['id'],
{'subnet_id': subnet['subnet']['id']})
@ -885,7 +885,7 @@ class L3DvrTestCase(test_db_base_plugin_v2.NeutronDbPluginV2TestCase):
router_obj.RouterPort, 'create') as rtrport_update:
rtrport_update.side_effect = Exception()
self.assertRaises(
l3.RouterInterfaceAttachmentConflict,
l3_exc.RouterInterfaceAttachmentConflict,
self.mixin.add_router_interface,
self.ctx, router['id'],
{'subnet_id': subnet['subnet']['id']})

View File

@ -24,6 +24,7 @@ from neutron_lib.callbacks import resources
from neutron_lib import constants
from neutron_lib import context
from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.exceptions import l3_ext_ha_mode as l3ha_exc
from neutron_lib.objects import exceptions
from neutron_lib.plugins import constants as plugin_constants
@ -43,7 +44,6 @@ from neutron.db import common_db_mixin
from neutron.db import l3_agentschedulers_db
from neutron.db import l3_hamode_db
from neutron.db.models import l3ha as l3ha_model
from neutron.extensions import l3
from neutron.objects import l3_hamode
from neutron.scheduler import l3_agent_scheduler
from neutron.services.revisions import revision_plugin
@ -279,7 +279,7 @@ class L3HATestCase(L3HATestFramework):
def test_ha_router_delete_with_distributed(self):
router = self._create_router(ha=True, distributed=True)
self.plugin.delete_router(self.admin_ctx, router['id'])
self.assertRaises(l3.RouterNotFound, self.plugin._get_router,
self.assertRaises(l3_exc.RouterNotFound, self.plugin._get_router,
self.admin_ctx, router['id'])
def test_migration_from_ha(self):
@ -1064,7 +1064,7 @@ class L3HAModeDbTestCase(L3HATestFramework):
self.plugin.add_router_interface(self.admin_ctx,
router['id'],
interface_info)
self.assertRaises(l3.RouterInUse, self.plugin.delete_router,
self.assertRaises(l3_exc.RouterInUse, self.plugin.delete_router,
self.admin_ctx, router['id'])
bindings = self.plugin.get_ha_router_port_bindings(
self.admin_ctx, [router['id']])

View File

@ -13,8 +13,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
from neutron_lib.api.definitions import extraroute as xroute_apidef
from neutron_lib import constants
from neutron_lib import context
@ -36,7 +34,6 @@ _get_path = test_base._get_path
class ExtraRouteTestExtensionManager(object):
def get_resources(self):
l3.L3().update_attributes_map(xroute_apidef.RESOURCE_ATTRIBUTE_MAP)
return l3.L3.get_resources()
def get_actions(self):
@ -498,8 +495,6 @@ class ExtraRouteDBIntTestCase(test_l3.L3NatDBIntTestCase,
ExtraRouteDBTestCaseBase):
def setUp(self, plugin=None, ext_mgr=None):
self._backup = copy.deepcopy(l3.RESOURCE_ATTRIBUTE_MAP)
self.addCleanup(self._restore)
if not plugin:
plugin = ('neutron.tests.unit.extensions.test_extraroute.'
'TestExtraRouteIntPlugin')
@ -511,15 +506,10 @@ class ExtraRouteDBIntTestCase(test_l3.L3NatDBIntTestCase,
ext_mgr=ext_mgr)
self.setup_notification_driver()
def _restore(self):
l3.RESOURCE_ATTRIBUTE_MAP = self._backup
class ExtraRouteDBSepTestCase(test_l3.L3NatDBSepTestCase,
ExtraRouteDBTestCaseBase):
def setUp(self):
self._backup = copy.deepcopy(l3.RESOURCE_ATTRIBUTE_MAP)
self.addCleanup(self._restore)
# the plugin without L3 support
plugin = 'neutron.tests.unit.extensions.test_l3.TestNoL3NatPlugin'
# the L3 service plugin
@ -536,6 +526,3 @@ class ExtraRouteDBSepTestCase(test_l3.L3NatDBSepTestCase,
service_plugins=service_plugins)
self.setup_notification_driver()
def _restore(self):
l3.RESOURCE_ATTRIBUTE_MAP = self._backup

View File

@ -19,8 +19,8 @@ import copy
import mock
import netaddr
from neutron_lib.api.definitions import dns as dns_apidef
from neutron_lib.api.definitions import external_net as extnet_apidef
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib.api.definitions import portbindings
from neutron_lib.callbacks import events
from neutron_lib.callbacks import exceptions
@ -29,6 +29,7 @@ from neutron_lib.callbacks import resources
from neutron_lib import constants as lib_constants
from neutron_lib import context
from neutron_lib import exceptions as n_exc
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
from oslo_config import cfg
@ -623,7 +624,7 @@ class L3NatTestCaseBase(L3NatTestCaseMixin):
self.extension_called = True
resource_extend.register_funcs(
l3.ROUTERS, [_extend_router_dict_test_attr])
l3_apidef.ROUTERS, [_extend_router_dict_test_attr])
self.assertFalse(self.extension_called)
with self.router():
self.assertTrue(self.extension_called)
@ -897,7 +898,7 @@ class L3NatTestCaseBase(L3NatTestCaseMixin):
plugin = directory.get_plugin(plugin_constants.L3)
mock.patch.object(
plugin, 'update_router',
side_effect=l3.RouterNotFound(router_id='1')).start()
side_effect=l3_exc.RouterNotFound(router_id='1')).start()
# ensure the router disappearing doesn't interfere with subnet
# creation
self._create_subnet(self.fmt, net_id=n['network']['id'],
@ -2985,7 +2986,7 @@ class L3NatTestCaseBase(L3NatTestCaseMixin):
if first_router_id:
return first_router_id
raise l3.ExternalGatewayForFloatingIPNotFound(
raise l3_exc.ExternalGatewayForFloatingIPNotFound(
subnet_id=internal_subnet['id'],
external_network_id=external_network_id,
port_id=internal_port['id'])
@ -3646,7 +3647,7 @@ class L3AgentDbTestCaseBase(L3NatTestCaseMixin):
def test_router_create_event_exception_preserved(self):
# this exception should be propagated out of the callback and
# converted into its API equivalent of 404
e404 = mock.Mock(side_effect=l3.RouterNotFound(router_id='1'))
e404 = mock.Mock(side_effect=l3_exc.RouterNotFound(router_id='1'))
registry.subscribe(e404, resources.ROUTER, events.PRECOMMIT_CREATE)
res = self._create_router(self.fmt, 'tenid')
self.assertEqual(exc.HTTPNotFound.code, res.status_int)
@ -3668,7 +3669,7 @@ class L3AgentDbTestCaseBase(L3NatTestCaseMixin):
def test_router_update_event_exception_preserved(self):
# this exception should be propagated out of the callback and
# converted into its API equivalent of 404
e404 = mock.Mock(side_effect=l3.RouterNotFound(router_id='1'))
e404 = mock.Mock(side_effect=l3_exc.RouterNotFound(router_id='1'))
registry.subscribe(e404, resources.ROUTER, events.PRECOMMIT_UPDATE)
with self.router(name='a') as r:
self._update('routers', r['router']['id'],
@ -3689,7 +3690,7 @@ class L3AgentDbTestCaseBase(L3NatTestCaseMixin):
def test_router_delete_event_exception_preserved(self):
# this exception should be propagated out of the callback and
# converted into its API equivalent of 409
e409 = mock.Mock(side_effect=l3.RouterInUse(router_id='1'))
e409 = mock.Mock(side_effect=l3_exc.RouterInUse(router_id='1'))
registry.subscribe(e409, resources.ROUTER, events.PRECOMMIT_DELETE)
with self.router() as r:
self._delete('routers', r['router']['id'],
@ -3997,7 +3998,6 @@ class L3NatDBSepTestCase(L3BaseForSepTests, L3NatTestCaseBase,
class L3TestExtensionManagerWithDNS(L3TestExtensionManager):
def get_resources(self):
l3.L3().update_attributes_map(dns_apidef.RESOURCE_ATTRIBUTE_MAP)
return l3.L3.get_resources()
@ -4017,8 +4017,6 @@ class L3NatDBFloatingIpTestCaseWithDNS(L3BaseForSepTests, L3NatTestCaseMixin):
_extension_drivers = ['dns']
def setUp(self):
self._l3_resource_backup = copy.deepcopy(l3.RESOURCE_ATTRIBUTE_MAP)
self.addCleanup(self._restore)
ext_mgr = L3TestExtensionManagerWithDNS()
plugin = 'neutron.plugins.ml2.plugin.Ml2Plugin'
cfg.CONF.set_override('extension_drivers',
@ -4030,9 +4028,6 @@ class L3NatDBFloatingIpTestCaseWithDNS(L3BaseForSepTests, L3NatTestCaseMixin):
self.mock_client.reset_mock()
self.mock_admin_client.reset_mock()
def _restore(self):
l3.RESOURCE_ATTRIBUTE_MAP = self._l3_resource_backup
def _create_network(self, fmt, name, admin_state_up,
arg_list=None, set_context=False, tenant_id=None,
**kwargs):

View File

@ -14,11 +14,9 @@
# under the License.
#
import copy
import mock
import netaddr
from neutron_lib.api.definitions import l3_ext_gw_mode as l3gwm_apidef
from neutron_lib.api.definitions import l3 as l3_apidef
from neutron_lib import constants
from neutron_lib import context as nctx
from neutron_lib.plugins import directory
@ -58,10 +56,6 @@ FAKE_ROUTER_PORT_MAC = 'bb:bb:bb:bb:bb:bb'
class TestExtensionManager(object):
def get_resources(self):
# Simulate extension of L3 attribute map
for key in l3.RESOURCE_ATTRIBUTE_MAP.keys():
l3.RESOURCE_ATTRIBUTE_MAP[key].update(
l3gwm_apidef.RESOURCE_ATTRIBUTE_MAP.get(key, {}))
return l3.L3.get_resources()
def get_actions(self):
@ -303,14 +297,14 @@ class TestL3GwModeMixin(testlib_api.SqlTestCase):
def test_make_router_dict_no_ext_gw(self):
self._reset_ext_gw()
router_dict = self.target_object._make_router_dict(self.router)
self.assertIsNone(router_dict[l3.EXTERNAL_GW_INFO])
self.assertIsNone(router_dict[l3_apidef.EXTERNAL_GW_INFO])
def test_make_router_dict_with_ext_gw(self):
router_dict = self.target_object._make_router_dict(self.router)
self.assertEqual({'network_id': self.ext_net_id,
'enable_snat': True,
'external_fixed_ips': []},
router_dict[l3.EXTERNAL_GW_INFO])
router_dict[l3_apidef.EXTERNAL_GW_INFO])
def test_make_router_dict_with_ext_gw_snat_disabled(self):
self.router.enable_snat = False
@ -318,7 +312,7 @@ class TestL3GwModeMixin(testlib_api.SqlTestCase):
self.assertEqual({'network_id': self.ext_net_id,
'enable_snat': False,
'external_fixed_ips': []},
router_dict[l3.EXTERNAL_GW_INFO])
router_dict[l3_apidef.EXTERNAL_GW_INFO])
def test_build_routers_list_no_ext_gw(self):
self._reset_ext_gw()
@ -368,8 +362,6 @@ class ExtGwModeIntTestCase(test_db_base_plugin_v2.NeutronDbPluginV2TestCase,
test_l3.L3NatTestCaseMixin):
def setUp(self, plugin=None, svc_plugins=None, ext_mgr=None):
# Store l3 resource attribute map as it will be updated
self._l3_attribute_map_bk = copy.deepcopy(l3.RESOURCE_ATTRIBUTE_MAP)
plugin = plugin or (
'neutron.tests.unit.extensions.test_l3_ext_gw_mode.'
'TestDbIntPlugin')
@ -379,10 +371,6 @@ class ExtGwModeIntTestCase(test_db_base_plugin_v2.NeutronDbPluginV2TestCase,
super(ExtGwModeIntTestCase, self).setUp(plugin=plugin,
ext_mgr=ext_mgr,
service_plugins=svc_plugins)
self.addCleanup(self.restore_l3_attribute_map)
def restore_l3_attribute_map(self):
l3.RESOURCE_ATTRIBUTE_MAP = self._l3_attribute_map_bk
def _set_router_external_gateway(self, router_id, network_id,
snat_enabled=None,
@ -531,9 +519,9 @@ class ExtGwModeSepTestCase(ExtGwModeIntTestCase):
def setUp(self, plugin=None):
# Store l3 resource attribute map as it will be updated
self._l3_attribute_map_bk = {}
for item in l3.RESOURCE_ATTRIBUTE_MAP:
for item in l3_apidef.RESOURCE_ATTRIBUTE_MAP:
self._l3_attribute_map_bk[item] = (
l3.RESOURCE_ATTRIBUTE_MAP[item].copy())
l3_apidef.RESOURCE_ATTRIBUTE_MAP[item].copy())
plugin = plugin or (
'neutron.tests.unit.extensions.test_l3.TestNoL3NatPlugin')
# the L3 service plugin
@ -544,4 +532,3 @@ class ExtGwModeSepTestCase(ExtGwModeIntTestCase):
cfg.CONF.set_default('allow_overlapping_ips', True)
super(ExtGwModeSepTestCase, self).setUp(plugin=plugin,
svc_plugins=svc_plugins)
self.addCleanup(self.restore_l3_attribute_map)

View File

@ -28,8 +28,6 @@ from neutron.tests.unit.extensions import test_l3
class FloatingIPQoSTestExtensionManager(object):
def get_resources(self):
l3.RESOURCE_ATTRIBUTE_MAP['floatingips'].update(
qos_fip.EXTENDED_ATTRIBUTES_2_0['floatingips'])
return l3.L3.get_resources()
def get_actions(self):

View File

@ -11,9 +11,6 @@
# License for the specific language governing permissions and limitations
# under the License.
import copy
from neutron_lib.api.definitions import router_availability_zone as raz_apidef
from neutron_lib.plugins import constants
from neutron.db.availability_zone import router as router_az_db
@ -55,20 +52,10 @@ class TestAZRouterCase(test_az.AZTestCommon, test_l3.L3NatTestCaseMixin):
'test_router_availability_zone.AZRouterTestPlugin')
service_plugins = {'l3_plugin_name': l3_plugin}
self._backup()
l3.RESOURCE_ATTRIBUTE_MAP['routers'].update(
raz_apidef.RESOURCE_ATTRIBUTE_MAP['routers'])
ext_mgr = AZL3ExtensionManager()
super(TestAZRouterCase, self).setUp(plugin=plugin, ext_mgr=ext_mgr,
service_plugins=service_plugins)
def _backup(self):
self.contents_backup = copy.deepcopy(l3.RESOURCE_ATTRIBUTE_MAP)
self.addCleanup(self._restore)
def _restore(self):
l3.RESOURCE_ATTRIBUTE_MAP = self.contents_backup
def test_create_router_with_az(self):
self._register_azs()
az_hints = ['nova2']

View File

@ -21,6 +21,7 @@ import mock
from neutron_lib.api.definitions import portbindings
from neutron_lib import constants
from neutron_lib import context as n_context
from neutron_lib.exceptions import l3 as l3_exc
from neutron_lib.plugins import constants as plugin_constants
from neutron_lib.plugins import directory
from oslo_config import cfg
@ -37,7 +38,6 @@ from neutron.db import l3_dvr_ha_scheduler_db
from neutron.db import l3_dvrscheduler_db
from neutron.db import l3_hamode_db
from neutron.db import l3_hascheduler_db
from neutron.extensions import l3
from neutron.extensions import l3agentscheduler as l3agent
from neutron import manager
from neutron.objects import agent as agent_obj
@ -1397,7 +1397,8 @@ class L3HATestCaseMixin(testlib_api.SqlTestCase,
with mock.patch.object(self.plugin.router_scheduler, 'bind_router'):
with mock.patch.object(
self.plugin, 'add_ha_port',
side_effect=l3.RouterNotFound(router_id='foo_router')),\
side_effect=l3_exc.RouterNotFound(
router_id='foo_router')),\
mock.patch.object(
self.plugin, 'safe_delete_ha_network') as sd_ha_net:
self.plugin.router_scheduler.create_ha_port_and_bind(