diff --git a/astara_neutron/plugins/floatingip.py b/astara_neutron/plugins/floatingip.py deleted file mode 100644 index 20555e8..0000000 --- a/astara_neutron/plugins/floatingip.py +++ /dev/null @@ -1,124 +0,0 @@ -# Copyright 2014 DreamHost, LLC -# -# Author: DreamHost, LLC -# -# 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. - -import logging - -from oslo_config import cfg -from oslo_utils import uuidutils - -from neutron.api.v2 import attributes -from neutron.common import exceptions as q_exc -from neutron.db.l3_db import DEVICE_OWNER_FLOATINGIP, FloatingIP -from neutron.i18n import _ - -LOG = logging.getLogger(__name__) - -explicit_floating_ip_opts = [ - cfg.ListOpt( - 'floatingip_subnet', - default=[], - help='UUID(s) of subnet(s) from which floating IPs can be allocated', - required=True, - deprecated_opts=[ - cfg.DeprecatedOpt('floatingip_subnet', group='akanda') - ] - ), -] - - -class ExplicitFloatingIPAllocationMixin(object): - """Overrides methods for managing floating ips - - Should be mixed in before inheriting from - neutron.db.l3_db.L3_NAT_db_mixin. - - """ - - def _allocate_floatingip_from_configured_subnets(self, context): - cfg.CONF.register_opts(explicit_floating_ip_opts, group='astara') - # NOTE(dhellmann): There may be a better way to do this, but - # the "filter" argument to get_subnets() is not documented so - # who knows. - e_context = context.elevated() - subnets = [ - self._get_subnet(e_context, unicode(s)) - for s in cfg.CONF.astara.floatingip_subnet - ] - if not subnets: - LOG.error('config setting astara.floatingip_subnet missing') - raise q_exc.IpAddressGenerationFailure(net_id='UNKNOWN') - # The base class method _generate_ip() handles the allocation - # ranges and going from one subnet to the next when a network - # is exhausted. - return self._generate_ip(context, subnets) - - def create_floatingip(self, context, floatingip): - LOG.debug('create_floatingip %s', (floatingip,)) - fip = floatingip['floatingip'] - tenant_id = self._get_tenant_id_for_create(context, fip) - fip_id = uuidutils.generate_uuid() - - f_net_id = fip['floating_network_id'] - if not self._core_plugin._network_is_external(context, f_net_id): - msg = _("Network %s is not a valid external network") % f_net_id - raise q_exc.BadRequest(resource='floatingip', msg=msg) - - # NOTE(dhellmann): Custom - # - # FIXME(dhellmann): This should probably verify that the subnet - # being used is on the network the user requested. - ip_to_use = self._allocate_floatingip_from_configured_subnets(context) - - with context.session.begin(subtransactions=True): - # This external port is never exposed to the tenant. - # it is used purely for internal system and admin use when - # managing floating IPs. - external_port = self._core_plugin.create_port(context.elevated(), { - 'port': - {'tenant_id': '', # tenant intentionally not set - 'network_id': f_net_id, - 'mac_address': attributes.ATTR_NOT_SPECIFIED, - # NOTE(dhellmann): Custom - 'fixed_ips': [ip_to_use], - 'admin_state_up': True, - 'device_id': fip_id, - 'device_owner': DEVICE_OWNER_FLOATINGIP, - 'name': ''}}) - # Ensure IP addresses are allocated on external port - if not external_port['fixed_ips']: - raise q_exc.ExternalIpAddressExhausted(net_id=f_net_id) - - floating_fixed_ip = external_port['fixed_ips'][0] - floating_ip_address = floating_fixed_ip['ip_address'] - floatingip_db = FloatingIP( - id=fip_id, - tenant_id=tenant_id, - floating_network_id=fip['floating_network_id'], - floating_ip_address=floating_ip_address, - floating_port_id=external_port['id']) - fip['tenant_id'] = tenant_id - # Update association with internal port - # and define external IP address - self._update_fip_assoc(context, fip, - floatingip_db, external_port) - context.session.add(floatingip_db) - - router_id = floatingip_db['router_id'] - if router_id: - self.l3_rpc_notifier.routers_updated( - context, [router_id], - 'create_floatingip') - return self._make_floatingip_dict(floatingip_db) diff --git a/astara_neutron/plugins/ml2_neutron_plugin.py b/astara_neutron/plugins/ml2_neutron_plugin.py index a5fc64b..ffc92b3 100644 --- a/astara_neutron/plugins/ml2_neutron_plugin.py +++ b/astara_neutron/plugins/ml2_neutron_plugin.py @@ -24,7 +24,6 @@ from neutron.plugins.ml2 import plugin from neutron.services.l3_router import l3_router_plugin from astara_neutron.plugins import decorators as astara -from astara_neutron.plugins import floatingip AKANDA_PORT_NAME_RE = re.compile( @@ -32,8 +31,7 @@ AKANDA_PORT_NAME_RE = re.compile( ) -class Ml2Plugin(floatingip.ExplicitFloatingIPAllocationMixin, - plugin.Ml2Plugin): +class Ml2Plugin(plugin.Ml2Plugin): _supported_extension_aliases = ( plugin.Ml2Plugin._supported_extension_aliases + diff --git a/astara_neutron/plugins/nsx_neutron_plugin.py b/astara_neutron/plugins/nsx_neutron_plugin.py index d99e857..f89e210 100644 --- a/astara_neutron/plugins/nsx_neutron_plugin.py +++ b/astara_neutron/plugins/nsx_neutron_plugin.py @@ -37,7 +37,6 @@ from neutron.plugins.vmware.plugins import base from neutron.plugins.vmware.plugins.base import cfg as n_cfg from astara_neutron.plugins import decorators as astara -from astara_neutron.plugins import floatingip LOG = logging.getLogger("NeutronPlugin") @@ -127,8 +126,7 @@ class AstaraNsxSynchronizer(nsx_sync.NsxSynchronizer): pass -class NsxPluginV2(floatingip.ExplicitFloatingIPAllocationMixin, - base.NsxPluginV2): +class NsxPluginV2(base.NsxPluginV2): """ NsxPluginV2 is a Neutron plugin that provides L2 Virtual Network functionality using NSX.