Metaplugin removal
Metaplugin is removed in Liberty. Remove all metaplugin related codes. DocImpact APIImpact Co-Authored-By: Itsuro Oda <oda@valinux.co.jp> Change-Id: I9cf36e1fd3a009c175e0d475af407a30f4e5c408 Closes-Bug: #1465126
This commit is contained in:
parent
be4ac4d00b
commit
6ff8582896
@ -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
|
||||
|
@ -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'
|
@ -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)
|
||||
|
@ -1,3 +1,3 @@
|
||||
5498d17be016
|
||||
2a16083502f3
|
||||
8675309a5c4f
|
||||
kilo
|
||||
|
@ -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')
|
@ -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)
|
||||
|
@ -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 {}
|
@ -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.
|
@ -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")
|
@ -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 "<NetworkFlavor(%s,%s)>" % (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 "<RouterFlavor(%s,%s)>" % (self.flavor, self.router_id)
|
@ -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
|
@ -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
|
||||
|
@ -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):
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user