Merge "remove dead floating IP code"
This commit is contained in:
commit
f8fa1df56d
@ -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)
|
@ -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 +
|
||||
|
@ -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.
|
||||
|
Loading…
Reference in New Issue
Block a user