Merge "remove dead floating IP code"

This commit is contained in:
Jenkins 2016-01-22 20:02:58 +00:00 committed by Gerrit Code Review
commit f8fa1df56d
3 changed files with 2 additions and 130 deletions

View File

@ -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)

View File

@ -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 +

View File

@ -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.