diff --git a/doc/source/devref/sub_projects.rst b/doc/source/devref/sub_projects.rst index f5c30af58e2..e12ac22aa1a 100644 --- a/doc/source/devref/sub_projects.rst +++ b/doc/source/devref/sub_projects.rst @@ -97,8 +97,6 @@ repo but are summarized here to describe the functionality they provide. +-------------------------------+-----------------------+ | networking-l2gw_ | l2 | +-------------------------------+-----------------------+ -| networking-metaplugin_ | core | -+-------------------------------+-----------------------+ | networking-midonet_ | core,lb | +-------------------------------+-----------------------+ | networking-mlnx_ | ml2 | @@ -244,13 +242,6 @@ L2 Gateway * Git: https://git.openstack.org/cgit/openstack/networking-l2gw * Launchpad: https://launchpad.net/networking-l2gw -.. _networking-metaplugin: - -Metaplugin ----------- - -* Git: https://github.com/ntt-sic/networking-metaplugin - .. _networking-midonet: MidoNet diff --git a/etc/neutron/plugins/metaplugin/metaplugin.ini b/etc/neutron/plugins/metaplugin/metaplugin.ini deleted file mode 100644 index 2b9bfa5ea35..00000000000 --- a/etc/neutron/plugins/metaplugin/metaplugin.ini +++ /dev/null @@ -1,31 +0,0 @@ -# Config file for Metaplugin - -[meta] -# Comma separated list of flavor:neutron_plugin for plugins to load. -# Extension method is searched in the list order and the first one is used. -plugin_list = 'ml2:neutron.plugins.ml2.plugin.Ml2Plugin,nvp:neutron.plugins.vmware.plugin.NsxPluginV2' - -# Comma separated list of flavor:neutron_plugin for L3 service plugins -# to load. -# This is intended for specifying L2 plugins which support L3 functions. -# If you use a router service plugin, set this blank. -l3_plugin_list = - -# Default flavor to use, when flavor:network is not specified at network -# creation. -default_flavor = 'nvp' - -# Default L3 flavor to use, when flavor:router is not specified at router -# creation. -# Ignored if 'l3_plugin_list' is blank. -default_l3_flavor = - -# Comma separated list of supported extension aliases. -supported_extension_aliases = 'provider,binding,agent,dhcp_agent_scheduler' - -# Comma separated list of method:flavor to select specific plugin for a method. -# This has priority over method search order based on 'plugin_list'. -extension_map = 'get_port_stats:nvp' - -# Specifies flavor for plugin to handle 'q-plugin' RPC requests. -rpc_flavor = 'ml2' diff --git a/neutron/agent/linux/interface.py b/neutron/agent/linux/interface.py index cd7f9c6903d..9207503e7ac 100644 --- a/neutron/agent/linux/interface.py +++ b/neutron/agent/linux/interface.py @@ -18,7 +18,6 @@ import abc import netaddr from oslo_config import cfg from oslo_log import log as logging -from oslo_utils import importutils import six from neutron.agent.common import ovs_lib @@ -26,7 +25,6 @@ from neutron.agent.linux import ip_lib from neutron.agent.linux import utils from neutron.common import constants as n_const from neutron.common import exceptions -from neutron.extensions import flavor from neutron.i18n import _LE, _LI @@ -41,29 +39,6 @@ OPTS = [ help=_('Uses veth for an interface or not')), cfg.IntOpt('network_device_mtu', help=_('MTU setting for device.')), - cfg.StrOpt('meta_flavor_driver_mappings', - help=_('Mapping between flavor and LinuxInterfaceDriver. ' - 'It is specific to MetaInterfaceDriver used with ' - 'admin_user, admin_password, admin_tenant_name, ' - 'admin_url, auth_strategy, auth_region and ' - 'endpoint_type.')), - cfg.StrOpt('admin_user', - help=_("Admin username")), - cfg.StrOpt('admin_password', - help=_("Admin password"), - secret=True), - cfg.StrOpt('admin_tenant_name', - help=_("Admin tenant name")), - cfg.StrOpt('auth_url', - help=_("Authentication URL")), - cfg.StrOpt('auth_strategy', default='keystone', - help=_("The type of authentication to use")), - cfg.StrOpt('auth_region', - help=_("Authentication region")), - cfg.StrOpt('endpoint_type', - default='publicURL', - help=_("Network service endpoint type to pull from " - "the keystone catalog")), ] @@ -420,63 +395,3 @@ class BridgeInterfaceDriver(LinuxInterfaceDriver): except RuntimeError: LOG.error(_LE("Failed unplugging interface '%s'"), device_name) - - -class MetaInterfaceDriver(LinuxInterfaceDriver): - def __init__(self, conf): - super(MetaInterfaceDriver, self).__init__(conf) - from neutronclient.v2_0 import client - self.neutron = client.Client( - username=self.conf.admin_user, - password=self.conf.admin_password, - tenant_name=self.conf.admin_tenant_name, - auth_url=self.conf.auth_url, - auth_strategy=self.conf.auth_strategy, - region_name=self.conf.auth_region, - endpoint_type=self.conf.endpoint_type - ) - self.flavor_driver_map = {} - for net_flavor, driver_name in [ - driver_set.split(':') - for driver_set in - self.conf.meta_flavor_driver_mappings.split(',')]: - self.flavor_driver_map[net_flavor] = self._load_driver(driver_name) - - def _get_flavor_by_network_id(self, network_id): - network = self.neutron.show_network(network_id) - return network['network'][flavor.FLAVOR_NETWORK] - - def _get_driver_by_network_id(self, network_id): - net_flavor = self._get_flavor_by_network_id(network_id) - return self.flavor_driver_map[net_flavor] - - def _set_device_plugin_tag(self, network_id, device_name, namespace=None): - plugin_tag = self._get_flavor_by_network_id(network_id) - device = ip_lib.IPDevice(device_name, namespace=namespace) - device.link.set_alias(plugin_tag) - - def _get_device_plugin_tag(self, device_name, namespace=None): - device = ip_lib.IPDevice(device_name, namespace=namespace) - return device.link.alias - - def get_device_name(self, port): - driver = self._get_driver_by_network_id(port.network_id) - return driver.get_device_name(port) - - def plug_new(self, network_id, port_id, device_name, mac_address, - bridge=None, namespace=None, prefix=None): - driver = self._get_driver_by_network_id(network_id) - ret = driver.plug(network_id, port_id, device_name, mac_address, - bridge=bridge, namespace=namespace, prefix=prefix) - self._set_device_plugin_tag(network_id, device_name, namespace) - return ret - - def unplug(self, device_name, bridge=None, namespace=None, prefix=None): - plugin_tag = self._get_device_plugin_tag(device_name, namespace) - driver = self.flavor_driver_map[plugin_tag] - return driver.unplug(device_name, bridge, namespace, prefix) - - def _load_driver(self, driver_provider): - LOG.debug("Driver location: %s", driver_provider) - plugin_klass = importutils.import_class(driver_provider) - return plugin_klass(self.conf) diff --git a/neutron/db/migration/alembic_migrations/versions/HEADS b/neutron/db/migration/alembic_migrations/versions/HEADS index 984a9ae5d39..be4adef8dfb 100644 --- a/neutron/db/migration/alembic_migrations/versions/HEADS +++ b/neutron/db/migration/alembic_migrations/versions/HEADS @@ -1,3 +1,3 @@ -5498d17be016 +2a16083502f3 8675309a5c4f kilo diff --git a/neutron/plugins/metaplugin/proxy_neutron_plugin.py b/neutron/db/migration/alembic_migrations/versions/liberty/contract/2a16083502f3_metaplugin_removal.py similarity index 61% rename from neutron/plugins/metaplugin/proxy_neutron_plugin.py rename to neutron/db/migration/alembic_migrations/versions/liberty/contract/2a16083502f3_metaplugin_removal.py index 353dee242ac..802ad7a8cab 100644 --- a/neutron/plugins/metaplugin/proxy_neutron_plugin.py +++ b/neutron/db/migration/alembic_migrations/versions/liberty/contract/2a16083502f3_metaplugin_removal.py @@ -1,5 +1,4 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# All Rights Reserved. +# Copyright 2015 OpenStack Foundation # # 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 @@ -12,8 +11,23 @@ # 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 metaplugin.plugin import proxy_neutron_plugin +"""Metaplugin removal + +Revision ID: 2a16083502f3 +Revises: 5498d17be016 +Create Date: 2015-06-16 09:11:10.488566 + +""" + +# revision identifiers, used by Alembic. +revision = '2a16083502f3' +down_revision = '5498d17be016' + +from alembic import op -ProxyPluginV2 = proxy_neutron_plugin.ProxyPluginV2 +def upgrade(): + op.drop_table('networkflavors') + op.drop_table('routerflavors') diff --git a/neutron/db/migration/models/head.py b/neutron/db/migration/models/head.py index 3341a9a027f..07ba8bfae34 100644 --- a/neutron/db/migration/models/head.py +++ b/neutron/db/migration/models/head.py @@ -52,7 +52,6 @@ from neutron.plugins.brocade.db import models as brocade_models # noqa from neutron.plugins.cisco.db.l3 import l3_models # noqa from neutron.plugins.cisco.db import n1kv_models_v2 # noqa from neutron.plugins.cisco.db import network_models_v2 # noqa -from neutron.plugins.metaplugin import meta_models_v2 # noqa from neutron.plugins.ml2.drivers.arista import db # noqa from neutron.plugins.ml2.drivers.brocade.db import ( # noqa models as ml2_brocade_models) diff --git a/neutron/extensions/flavor.py b/neutron/extensions/flavor.py deleted file mode 100644 index 9cafb13ef0a..00000000000 --- a/neutron/extensions/flavor.py +++ /dev/null @@ -1,64 +0,0 @@ -# Copyright 2012 Nachi Ueno, NTT MCL, Inc. -# 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 oslo_log import log as logging - -from neutron.api import extensions -from neutron.api.v2 import attributes - - -LOG = logging.getLogger(__name__) - -FLAVOR_NETWORK = 'flavor:network' -FLAVOR_ROUTER = 'flavor:router' - -FLAVOR_ATTRIBUTE = { - 'networks': { - FLAVOR_NETWORK: {'allow_post': True, - 'allow_put': False, - 'is_visible': True, - 'default': attributes.ATTR_NOT_SPECIFIED} - }, - 'routers': { - FLAVOR_ROUTER: {'allow_post': True, - 'allow_put': False, - 'is_visible': True, - 'default': attributes.ATTR_NOT_SPECIFIED} - } -} - - -class Flavor(extensions.ExtensionDescriptor): - @classmethod - def get_name(cls): - return "Flavor support for network and router" - - @classmethod - def get_alias(cls): - return "flavor" - - @classmethod - def get_description(cls): - return "Flavor" - - @classmethod - def get_updated(cls): - return "2012-07-20T10:00:00-00:00" - - def get_extended_resources(self, version): - if version == "2.0": - return FLAVOR_ATTRIBUTE - else: - return {} diff --git a/neutron/plugins/metaplugin/README b/neutron/plugins/metaplugin/README deleted file mode 100644 index e2140b1e1c0..00000000000 --- a/neutron/plugins/metaplugin/README +++ /dev/null @@ -1,6 +0,0 @@ -# NOTE - -The main source codes of Metaplugin is now in https://github.com/ntt-sic/networking-metaplugin. -They were moved from Neutron tree to there according to core-vendor-decomposition. -Defining config and DB are still here according to the decomposition policy. -Codes of 'flavor' extension and interface driver used by *-agent remain in Neutron tree too. diff --git a/neutron/plugins/metaplugin/__init__.py b/neutron/plugins/metaplugin/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/neutron/plugins/metaplugin/common/__init__.py b/neutron/plugins/metaplugin/common/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/neutron/plugins/metaplugin/common/config.py b/neutron/plugins/metaplugin/common/config.py deleted file mode 100644 index dfcbfe12080..00000000000 --- a/neutron/plugins/metaplugin/common/config.py +++ /dev/null @@ -1,78 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# 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 oslo_config import cfg - - -meta_plugin_opts = [ - cfg.StrOpt( - 'plugin_list', - default='', - help=_("Comma separated list of flavor:neutron_plugin for " - "plugins to load. Extension method is searched in the " - "list order and the first one is used.")), - cfg.StrOpt( - 'l3_plugin_list', - default='', - help=_("Comma separated list of flavor:neutron_plugin for L3 " - "service plugins to load. This is intended for specifying " - "L2 plugins which support L3 functions. If you use a router " - "service plugin, set this blank.")), - cfg.StrOpt( - 'default_flavor', - default='', - help=_("Default flavor to use, when flavor:network is not " - "specified at network creation.")), - cfg.StrOpt( - 'default_l3_flavor', - default='', - help=_("Default L3 flavor to use, when flavor:router is not " - "specified at router creation. Ignored if 'l3_plugin_list' " - "is blank.")), - cfg.StrOpt( - 'supported_extension_aliases', - default='', - help=_("Comma separated list of supported extension aliases.")), - cfg.StrOpt( - 'extension_map', - default='', - help=_("Comma separated list of method:flavor to select specific " - "plugin for a method. This has priority over method search " - "order based on 'plugin_list'.")), - cfg.StrOpt( - 'rpc_flavor', - default='', - help=_("Specifies flavor for plugin to handle 'q-plugin' RPC " - "requests.")), -] - -proxy_plugin_opts = [ - cfg.StrOpt('admin_user', - help=_("Admin user")), - cfg.StrOpt('admin_password', - help=_("Admin password"), - secret=True), - cfg.StrOpt('admin_tenant_name', - help=_("Admin tenant name")), - cfg.StrOpt('auth_url', - help=_("Authentication URL")), - cfg.StrOpt('auth_strategy', default='keystone', - help=_("The type of authentication to use")), - cfg.StrOpt('auth_region', - help=_("Authentication region")), -] - -cfg.CONF.register_opts(meta_plugin_opts, "META") -cfg.CONF.register_opts(proxy_plugin_opts, "PROXY") diff --git a/neutron/plugins/metaplugin/meta_models_v2.py b/neutron/plugins/metaplugin/meta_models_v2.py deleted file mode 100644 index 70d546edc44..00000000000 --- a/neutron/plugins/metaplugin/meta_models_v2.py +++ /dev/null @@ -1,41 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# 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. - -import sqlalchemy as sa -from sqlalchemy import Column, String - -from neutron.db import models_v2 - - -class NetworkFlavor(models_v2.model_base.BASEV2): - """Represents a binding of network_id to flavor.""" - flavor = Column(String(255)) - network_id = sa.Column(sa.String(36), sa.ForeignKey('networks.id', - ondelete="CASCADE"), - primary_key=True) - - def __repr__(self): - return "" % (self.flavor, self.network_id) - - -class RouterFlavor(models_v2.model_base.BASEV2): - """Represents a binding of router_id to flavor.""" - flavor = Column(String(255)) - router_id = sa.Column(sa.String(36), sa.ForeignKey('routers.id', - ondelete="CASCADE"), - primary_key=True) - - def __repr__(self): - return "" % (self.flavor, self.router_id) diff --git a/neutron/plugins/metaplugin/meta_neutron_plugin.py b/neutron/plugins/metaplugin/meta_neutron_plugin.py deleted file mode 100644 index 9ded159d45f..00000000000 --- a/neutron/plugins/metaplugin/meta_neutron_plugin.py +++ /dev/null @@ -1,19 +0,0 @@ -# Copyright 2012, Nachi Ueno, NTT MCL, Inc. -# 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 metaplugin.plugin import meta_neutron_plugin - - -MetaPluginV2 = meta_neutron_plugin.MetaPluginV2 diff --git a/neutron/plugins/ml2/README b/neutron/plugins/ml2/README index 74f96f6f1f4..0c1fe4597c4 100644 --- a/neutron/plugins/ml2/README +++ b/neutron/plugins/ml2/README @@ -18,10 +18,10 @@ alternative L3 solutions. Additional service plugins can also be used with the ML2 core plugin. Drivers within ML2 implement separately extensible sets of network -types and of mechanisms for accessing networks of those types. Unlike -with the metaplugin, multiple mechanisms can be used simultaneously to -access different ports of the same virtual network. Mechanisms can -utilize L2 agents via RPC and/or interact with external devices or +types and of mechanisms for accessing networks of those +types. Multiple mechanisms can be used simultaneously to access +different ports of the same virtual network. Mechanisms can utilize L2 +agents via RPC and/or interact with external devices or controllers. By utilizing the multiprovidernet extension, virtual networks can be composed of multiple segments of the same or different types. Type and mechanism drivers are loaded as python entrypoints diff --git a/neutron/tests/unit/agent/linux/test_interface.py b/neutron/tests/unit/agent/linux/test_interface.py index 7feb9981b7b..a46354a1a5c 100644 --- a/neutron/tests/unit/agent/linux/test_interface.py +++ b/neutron/tests/unit/agent/linux/test_interface.py @@ -22,7 +22,6 @@ from neutron.agent.linux import interface from neutron.agent.linux import ip_lib from neutron.agent.linux import utils from neutron.common import constants -from neutron.extensions import flavor from neutron.tests import base @@ -504,73 +503,6 @@ class TestBridgeInterfaceDriver(TestBase): mock.call().link.delete()]) -class TestMetaInterfaceDriver(TestBase): - def setUp(self): - super(TestMetaInterfaceDriver, self).setUp() - config.register_interface_driver_opts_helper(self.conf) - self.client_cls_p = mock.patch('neutronclient.v2_0.client.Client') - client_cls = self.client_cls_p.start() - self.client_inst = mock.Mock() - client_cls.return_value = self.client_inst - - fake_network = {'network': {flavor.FLAVOR_NETWORK: 'fake1'}} - fake_port = {'ports': - [{'mac_address': - 'aa:bb:cc:dd:ee:ffa', 'network_id': 'test'}]} - - self.client_inst.list_ports.return_value = fake_port - self.client_inst.show_network.return_value = fake_network - - self.conf.set_override('auth_url', 'http://localhost:35357/v2.0') - self.conf.set_override('auth_region', 'RegionOne') - self.conf.set_override('admin_user', 'neutron') - self.conf.set_override('admin_password', 'password') - self.conf.set_override('admin_tenant_name', 'service') - self.conf.set_override( - 'meta_flavor_driver_mappings', - 'fake1:neutron.agent.linux.interface.OVSInterfaceDriver,' - 'fake2:neutron.agent.linux.interface.BridgeInterfaceDriver') - self.conf.set_override('endpoint_type', 'internalURL') - - def test_get_driver_by_network_id(self): - meta_interface = interface.MetaInterfaceDriver(self.conf) - driver = meta_interface._get_driver_by_network_id('test') - self.assertIsInstance(driver, interface.OVSInterfaceDriver) - - def test_set_device_plugin_tag(self): - meta_interface = interface.MetaInterfaceDriver(self.conf) - driver = meta_interface._get_driver_by_network_id('test') - meta_interface._set_device_plugin_tag(driver, - 'tap0', - namespace=None) - expected = [mock.call('tap0', namespace=None), - mock.call().link.set_alias('fake1')] - self.ip_dev.assert_has_calls(expected) - namespace = '01234567-1234-1234-99' - meta_interface._set_device_plugin_tag(driver, - 'tap1', - namespace=namespace) - expected = [mock.call('tap1', namespace='01234567-1234-1234-99'), - mock.call().link.set_alias('fake1')] - self.ip_dev.assert_has_calls(expected) - - def test_get_device_plugin_tag(self): - meta_interface = interface.MetaInterfaceDriver(self.conf) - self.ip_dev().link.alias = 'fake1' - plugin_tag0 = meta_interface._get_device_plugin_tag('tap0', - namespace=None) - expected = [mock.call('tap0', namespace=None)] - self.ip_dev.assert_has_calls(expected) - self.assertEqual('fake1', plugin_tag0) - namespace = '01234567-1234-1234-99' - expected = [mock.call('tap1', namespace='01234567-1234-1234-99')] - plugin_tag1 = meta_interface._get_device_plugin_tag( - 'tap1', - namespace=namespace) - self.ip_dev.assert_has_calls(expected) - self.assertEqual('fake1', plugin_tag1) - - class TestIVSInterfaceDriver(TestBase): def setUp(self): diff --git a/setup.cfg b/setup.cfg index e3f0f05bb9e..fdee757f909 100644 --- a/setup.cfg +++ b/setup.cfg @@ -58,7 +58,6 @@ data_files = etc/neutron/plugins/cisco/cisco_vpn_agent.ini etc/neutron/plugins/embrane = etc/neutron/plugins/embrane/heleos_conf.ini etc/neutron/plugins/ibm = etc/neutron/plugins/ibm/sdnve_neutron_plugin.ini - etc/neutron/plugins/metaplugin = etc/neutron/plugins/metaplugin/metaplugin.ini etc/neutron/plugins/midonet = etc/neutron/plugins/midonet/midonet.ini etc/neutron/plugins/ml2 = etc/neutron/plugins/bigswitch/restproxy.ini @@ -124,7 +123,6 @@ neutron.core_plugins = ml2 = neutron.plugins.ml2.plugin:Ml2Plugin nec = neutron.plugins.nec.nec_plugin:NECPluginV2 nuage = neutron.plugins.nuage.plugin:NuagePlugin - metaplugin = neutron.plugins.metaplugin.meta_neutron_plugin:MetaPluginV2 oneconvergence = neutron.plugins.oneconvergence.plugin:OneConvergencePluginV2 plumgrid = neutron.plugins.plumgrid.plumgrid_plugin.plumgrid_plugin:NeutronPluginPLUMgridV2 vmware = neutron.plugins.vmware.plugin:NsxMhPlugin