From 973fc25f7b45b7d09935de4bcc8d551d4ba11a5a Mon Sep 17 00:00:00 2001 From: Dan Wendlandt Date: Mon, 31 Mar 2014 23:31:00 -0700 Subject: [PATCH] Remove last parts of Quantum compatibility shim Goodbye Quantum! Change-Id: Idbd0384a892beaff3a937444f04cfc433cb805eb Closes-Bug:1299046 --- etc/quantum | 1 - etc/rootwrap.conf | 2 +- neutron/agent/dhcp_agent.py | 2 - neutron/agent/l3_agent.py | 2 - neutron/common/legacy.py | 95 ------------------- neutron/db/migration/cli.py | 2 - neutron/debug/shell.py | 2 - neutron/manager.py | 3 - neutron/plugins/brocade/README.md | 2 +- .../plugins/ibm/agent/sdnve_neutron_agent.py | 2 - neutron/plugins/nec/README | 2 +- .../openvswitch/agent/ovs_neutron_agent.py | 2 - neutron/quota.py | 2 - neutron/service.py | 11 +-- .../firewall/agents/varmour/varmour_router.py | 2 - neutron/services/loadbalancer/agent/agent.py | 2 - neutron/tests/unit/test_legacy.py | 83 ---------------- quantum/__init__.py | 18 ---- quantum/api/__init__.py | 36 ------- quantum/auth.py | 32 ------- setup.cfg | 24 ----- 21 files changed, 5 insertions(+), 322 deletions(-) delete mode 120000 etc/quantum delete mode 100644 neutron/common/legacy.py delete mode 100644 neutron/tests/unit/test_legacy.py delete mode 100644 quantum/__init__.py delete mode 100644 quantum/api/__init__.py delete mode 100644 quantum/auth.py diff --git a/etc/quantum b/etc/quantum deleted file mode 120000 index 848bfe0411..0000000000 --- a/etc/quantum +++ /dev/null @@ -1 +0,0 @@ -neutron \ No newline at end of file diff --git a/etc/rootwrap.conf b/etc/rootwrap.conf index e62778699e..dee1dd94b1 100644 --- a/etc/rootwrap.conf +++ b/etc/rootwrap.conf @@ -4,7 +4,7 @@ [DEFAULT] # List of directories to load filter definitions from (separated by ','). # These directories MUST all be only writeable by root ! -filters_path=/etc/neutron/rootwrap.d,/usr/share/neutron/rootwrap,/etc/quantum/rootwrap.d,/usr/share/quantum/rootwrap +filters_path=/etc/neutron/rootwrap.d,/usr/share/neutron/rootwrap # List of directories to search executables in, in case filters do not # explicitely specify a full path (separated by ',') diff --git a/neutron/agent/dhcp_agent.py b/neutron/agent/dhcp_agent.py index ae597cd427..2054d2fe05 100644 --- a/neutron/agent/dhcp_agent.py +++ b/neutron/agent/dhcp_agent.py @@ -29,7 +29,6 @@ from neutron.agent.linux import ovs_lib # noqa from neutron.agent import rpc as agent_rpc from neutron.common import constants from neutron.common import exceptions -from neutron.common import legacy from neutron.common import topics from neutron.common import utils from neutron import context @@ -600,7 +599,6 @@ def main(): register_options() cfg.CONF(project='neutron') config.setup_logging(cfg.CONF) - legacy.modernize_quantum_config(cfg.CONF) server = neutron_service.Service.create( binary='neutron-dhcp-agent', topic=topics.DHCP_AGENT, diff --git a/neutron/agent/l3_agent.py b/neutron/agent/l3_agent.py index aed9bd0f8c..c6dc1ce82a 100644 --- a/neutron/agent/l3_agent.py +++ b/neutron/agent/l3_agent.py @@ -25,7 +25,6 @@ from neutron.agent.linux import iptables_manager from neutron.agent.linux import ovs_lib # noqa from neutron.agent import rpc as agent_rpc from neutron.common import constants as l3_constants -from neutron.common import legacy from neutron.common import topics from neutron.common import utils as common_utils from neutron import context @@ -963,7 +962,6 @@ def main(manager='neutron.agent.l3_agent.L3NATAgentWithStateReport'): conf.register_opts(external_process.OPTS) conf(project='neutron') config.setup_logging(conf) - legacy.modernize_quantum_config(conf) server = neutron_service.Service.create( binary='neutron-l3-agent', topic=topics.L3_AGENT, diff --git a/neutron/common/legacy.py b/neutron/common/legacy.py deleted file mode 100644 index d387aa2bbb..0000000000 --- a/neutron/common/legacy.py +++ /dev/null @@ -1,95 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 -# -# Copyright 2013 New Dream Network, LLC (DreamHost) -# 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. - -# @author Mark McClain (DreamHost) - -from oslo.config import cfg - -from neutron.openstack.common import log as logging - -LOG = logging.getLogger(__name__) - - -def scrub_class_path(cls_path): - """Scrub from Quantum from old class_path references.""" - - if isinstance(cls_path, basestring): - if cls_path.startswith('quantum'): - new_path = cls_path.replace('quantum', 'neutron') - new_path = new_path.replace('Quantum', 'Neutron') - LOG.warn( - _("Old class module path in use. Please change '%(old)s' " - "to '%(new)s'."), - {'old': cls_path, 'new': new_path} - ) - cls_path = new_path - return cls_path - - -def override_config(config, config_keys=None): - """Attempt to override config_key with Neutron compatible values.""" - - for key in config_keys: - group = None - if not isinstance(key, basestring): - try: - group, key, module_str = key - old_value = getattr(getattr(config, group), key, None) - except AttributeError: - try: - config.import_opt(key, module_str, group) - old_value = getattr(getattr(config, group), key, None) - except (cfg.NoSuchOptError, - cfg.NoSuchGroupError, - AttributeError): - LOG.warn(_('Key %(key)s in group %(group)s is unknown. ' - 'It may not be defined or needed by this ' - 'service.') % {'key': key, 'group': group}) - continue - else: - old_value = getattr(config, key, None) - if not old_value: - continue - elif isinstance(old_value, list): - new_value = [scrub_class_path(v) for v in old_value] - else: - new_value = scrub_class_path(old_value) - - if new_value != old_value: - config.set_override(key, new_value, group=group) - - -def modernize_quantum_config(config): - """Updates keys from old Quantum configurations for Neutron.""" - config_keys = [ - 'allowed_rpc_exception_modules', - 'core_plugin', - 'device_driver', - 'dhcp_driver', - 'driver_fqn', - 'interface_driver', - 'network_scheduler_driver', - 'notification_driver', - 'router_scheduler_driver', - 'rpc_backend', - 'service_plugins', - ('SECURITYGROUP', - 'firewall_driver', - 'neutron.agent.securitygroups_rpc'), - ] - - override_config(config, config_keys) diff --git a/neutron/db/migration/cli.py b/neutron/db/migration/cli.py index 5cede267cf..850806e898 100644 --- a/neutron/db/migration/cli.py +++ b/neutron/db/migration/cli.py @@ -22,7 +22,6 @@ from alembic import script as alembic_script from alembic import util as alembic_util from oslo.config import cfg -from neutron.common import legacy HEAD_FILENAME = 'HEAD' @@ -165,5 +164,4 @@ def main(): CONF() #TODO(gongysh) enable logging - legacy.modernize_quantum_config(CONF) CONF.command.func(config, CONF.command.name) diff --git a/neutron/debug/shell.py b/neutron/debug/shell.py index 42793f7211..5af173abcf 100644 --- a/neutron/debug/shell.py +++ b/neutron/debug/shell.py @@ -21,7 +21,6 @@ from oslo.config import cfg from neutron.agent.common import config from neutron.agent.linux import interface -from neutron.common import legacy from neutron.debug.debug_agent import NeutronDebugAgent from neutron.openstack.common import importutils from neutronclient.common import exceptions as exc @@ -79,7 +78,6 @@ class NeutronDebugShell(NeutronShell): config.register_root_helper(cfg.CONF) cfg.CONF(['--config-file', self.options.config_file]) config.setup_logging(cfg.CONF) - legacy.modernize_quantum_config(cfg.CONF) driver = importutils.import_object(cfg.CONF.interface_driver, cfg.CONF) self.debug_agent = NeutronDebugAgent(cfg.CONF, client, driver) diff --git a/neutron/manager.py b/neutron/manager.py index 96ff94ae8f..e4127beff3 100644 --- a/neutron/manager.py +++ b/neutron/manager.py @@ -15,7 +15,6 @@ from oslo.config import cfg -from neutron.common import legacy from neutron.common import utils from neutron.openstack.common import importutils from neutron.openstack.common import log as logging @@ -110,8 +109,6 @@ class NeutronManager(object): LOG.info(_("Loading core plugin: %s"), plugin_provider) self.plugin = self._get_plugin_instance('neutron.core_plugins', plugin_provider) - legacy.modernize_quantum_config(cfg.CONF) - msg = validate_post_plugin_load() if msg: LOG.critical(msg) diff --git a/neutron/plugins/brocade/README.md b/neutron/plugins/brocade/README.md index d390c4f771..82b3ad89d8 100644 --- a/neutron/plugins/brocade/README.md +++ b/neutron/plugins/brocade/README.md @@ -100,7 +100,7 @@ http://wiki.openstack.org/brocade-neutron-plugin In order to use Brocade Neutron Plugin, add the following lines in localrc, if localrc file doe not exist create one: -ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,quantum,q-svc,q-agt +ENABLED_SERVICES=g-api,g-reg,key,n-api,n-crt,n-obj,n-cpu,n-net,n-cond,cinder,c-sch,c-api,c-vol,n-sch,n-novnc,n-xvnc,n-cauth,horizon,rabbit,neutron,q-svc,q-agt Q_PLUGIN=brocade As part of running devstack/stack.sh, the configuration files is copied as: diff --git a/neutron/plugins/ibm/agent/sdnve_neutron_agent.py b/neutron/plugins/ibm/agent/sdnve_neutron_agent.py index 5221c974cf..8b1b21dddb 100644 --- a/neutron/plugins/ibm/agent/sdnve_neutron_agent.py +++ b/neutron/plugins/ibm/agent/sdnve_neutron_agent.py @@ -28,7 +28,6 @@ from neutron.agent.linux import ovs_lib from neutron.agent import rpc as agent_rpc from neutron.common import config as logging_config from neutron.common import constants as n_const -from neutron.common import legacy from neutron.common import topics from neutron.common import utils as n_utils from neutron import context @@ -257,7 +256,6 @@ def main(): cfg.CONF.register_opts(ip_lib.OPTS) cfg.CONF(project='neutron') logging_config.setup_logging(cfg.CONF) - legacy.modernize_quantum_config(cfg.CONF) try: agent_config = create_agent_config_map(cfg.CONF) diff --git a/neutron/plugins/nec/README b/neutron/plugins/nec/README index c6205afb80..694b80e99c 100644 --- a/neutron/plugins/nec/README +++ b/neutron/plugins/nec/README @@ -3,7 +3,7 @@ Quantum NEC OpenFlow Plugin # -- What's this? -http://wiki.openstack.org/Quantum-NEC-OpenFlow-Plugin +https://wiki.openstack.org/wiki/Neutron/NEC_OpenFlow_Plugin # -- Installation diff --git a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py index 11ff682183..a92a36bf03 100644 --- a/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py +++ b/neutron/plugins/openvswitch/agent/ovs_neutron_agent.py @@ -32,7 +32,6 @@ from neutron.agent import rpc as agent_rpc from neutron.agent import securitygroups_rpc as sg_rpc from neutron.common import config as logging_config from neutron.common import constants as q_const -from neutron.common import legacy from neutron.common import topics from neutron.common import utils as q_utils from neutron import context @@ -1343,7 +1342,6 @@ def main(): cfg.CONF(project='neutron') logging_config.setup_logging(cfg.CONF) q_utils.log_opt_values(LOG) - legacy.modernize_quantum_config(cfg.CONF) try: agent_config = create_agent_config_map(cfg.CONF) diff --git a/neutron/quota.py b/neutron/quota.py index 9976f71bea..2768b1a273 100644 --- a/neutron/quota.py +++ b/neutron/quota.py @@ -22,7 +22,6 @@ from oslo.config import cfg import webob from neutron.common import exceptions -from neutron.common import legacy from neutron.openstack.common import importutils from neutron.openstack.common import log as logging @@ -58,7 +57,6 @@ quota_opts = [ ] # Register the configuration options cfg.CONF.register_opts(quota_opts, 'QUOTAS') -legacy.override_config(cfg.CONF, [('QUOTAS', 'quota_driver', 'neutron.quota')]) class ConfDriver(object): diff --git a/neutron/service.py b/neutron/service.py index f035156568..754a68f905 100644 --- a/neutron/service.py +++ b/neutron/service.py @@ -22,7 +22,6 @@ import random from oslo.config import cfg from neutron.common import config -from neutron.common import legacy from neutron import context from neutron import manager from neutron import neutron_plugin_base_v2 @@ -91,7 +90,6 @@ class NeutronApiService(WsgiService): # Log the options used when starting if we're in debug mode... config.setup_logging(cfg.CONF) - legacy.modernize_quantum_config(cfg.CONF) # Dump the initial option values cfg.CONF.log_opt_values(LOG, std_logging.DEBUG) service = cls(app_name) @@ -101,13 +99,8 @@ class NeutronApiService(WsgiService): def serve_wsgi(cls): try: - try: - service = cls.create() - service.start() - except RuntimeError: - LOG.exception(_('Error occurred: trying old api-paste.ini.')) - service = cls.create('quantum') - service.start() + service = cls.create() + service.start() except Exception: with excutils.save_and_reraise_exception(): LOG.exception(_('Unrecoverable error: please check log ' diff --git a/neutron/services/firewall/agents/varmour/varmour_router.py b/neutron/services/firewall/agents/varmour/varmour_router.py index 25cf02ffad..97d5de06b0 100755 --- a/neutron/services/firewall/agents/varmour/varmour_router.py +++ b/neutron/services/firewall/agents/varmour/varmour_router.py @@ -28,7 +28,6 @@ from neutron.agent.linux import external_process from neutron.agent.linux import interface from neutron.agent.linux import ip_lib from neutron.common import constants as l3_constants -from neutron.common import legacy from neutron.common import topics from neutron.openstack.common import log as logging from neutron.openstack.common import service @@ -339,7 +338,6 @@ def main(): conf.register_opts(external_process.OPTS) conf(project='neutron') config.setup_logging(conf) - legacy.modernize_quantum_config(conf) server = neutron_service.Service.create( binary='neutron-l3-agent', topic=topics.L3_AGENT, diff --git a/neutron/services/loadbalancer/agent/agent.py b/neutron/services/loadbalancer/agent/agent.py index 3a7116c2b3..d9cc64658e 100644 --- a/neutron/services/loadbalancer/agent/agent.py +++ b/neutron/services/loadbalancer/agent/agent.py @@ -21,7 +21,6 @@ from oslo.config import cfg from neutron.agent.common import config from neutron.agent.linux import interface -from neutron.common import legacy from neutron.common import topics from neutron.openstack.common.rpc import service as rpc_service from neutron.openstack.common import service @@ -59,7 +58,6 @@ def main(): cfg.CONF(project='neutron') config.setup_logging(cfg.CONF) - legacy.modernize_quantum_config(cfg.CONF) mgr = manager.LbaasAgentManager(cfg.CONF) svc = LbaasAgentService( diff --git a/neutron/tests/unit/test_legacy.py b/neutron/tests/unit/test_legacy.py deleted file mode 100644 index 6723d06c1a..0000000000 --- a/neutron/tests/unit/test_legacy.py +++ /dev/null @@ -1,83 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 -# -# Copyright 2013 New Dream Network, LLC (DreamHost) -# 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. - -# @author Mark McClain (DreamHost) - -import mock -from oslo.config import cfg - -from neutron.common import legacy -from neutron.tests import base - - -class TestLegacyScrubPath(base.BaseTestCase): - def test_neutron_path(self): - self.assertEqual( - 'neutron.foo.NeutronPlugin', - legacy.scrub_class_path('neutron.foo.NeutronPlugin') - ) - - def test_quantum_path(self): - with mock.patch.object(legacy, 'LOG') as log: - self.assertEqual( - 'neutron.foo.NeutronPlugin', - legacy.scrub_class_path('quantum.foo.QuantumPlugin') - ) - - log.assert_has_calls([mock.call.warn(mock.ANY, mock.ANY)]) - - def test_third_party_path(self): - self.assertEqual( - 'third.party.quantum.QuantumPlugin', - legacy.scrub_class_path('third.party.quantum.QuantumPlugin') - ) - - -class TestLegacyConfigOverride(base.BaseTestCase): - def setUp(self): - super(TestLegacyConfigOverride, self).setUp() - self.cfg = cfg.ConfigOpts() - self.cfg.register_cli_opts([cfg.StrOpt('foo'), cfg.ListOpt('thelist')]) - self.cfg.register_cli_opts([cfg.StrOpt('baz')], group='bar') - - def test_override_config_simple_key(self): - self.cfg(args=['--foo=quantum']) - legacy.override_config(self.cfg, ['foo']) - self.assertEqual(self.cfg.foo, 'neutron') - - def test_override_config_simple_key_unchanged(self): - self.cfg(args=['--foo=something.else']) - legacy.override_config(self.cfg, ['foo']) - self.assertEqual(self.cfg.foo, 'something.else') - - def test_override_config_missing_key(self): - self.cfg(args=[]) - legacy.override_config(self.cfg, ['foo']) - self.assertIsNone(self.cfg.foo) - - def test_override_config_group_key(self): - self.cfg(args=['--bar-baz=quantum']) - legacy.override_config(self.cfg, [('bar', 'baz', 'mod')]) - self.assertEqual(self.cfg.bar.baz, 'neutron') - - def test_override_config_list_value(self): - self.cfg(args=['--thelist=quantum,neutron,quantum.Quantum']) - legacy.override_config(self.cfg, ['thelist']) - self.assertEqual( - self.cfg.thelist, - ['neutron', 'neutron', 'neutron.Neutron'] - ) diff --git a/quantum/__init__.py b/quantum/__init__.py deleted file mode 100644 index 41e1c7e8fa..0000000000 --- a/quantum/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 -# -# Copyright 2013 New Dream Network, LLC (DreamHost) -# 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. - -# @author Mark McClain (DreamHost) diff --git a/quantum/api/__init__.py b/quantum/api/__init__.py deleted file mode 100644 index 4f87171a13..0000000000 --- a/quantum/api/__init__.py +++ /dev/null @@ -1,36 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 -# -# Copyright 2013 New Dream Network, LLC (DreamHost) -# 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. - -# @author Mark McClain (DreamHost) - -import sys -import warnings - -from neutron import api -from neutron.api import extensions -from neutron.api import v2 - - -warnings.warn( - _('You are using old configuration values for the api-paste config. ' - 'Please update for Neutron.') -) -sys.modules['quantum.api.extensions'] = extensions -sys.modules['quantum.api.v2'] = v2 -# The following assigment must be performed at the end of the module. -# Otherwise local variables will be overwritten. -sys.modules['quantum.api'] = api diff --git a/quantum/auth.py b/quantum/auth.py deleted file mode 100644 index 7631561e40..0000000000 --- a/quantum/auth.py +++ /dev/null @@ -1,32 +0,0 @@ -# vim: tabstop=4 shiftwidth=4 softtabstop=4 -# -# Copyright 2013 New Dream Network, LLC (DreamHost) -# 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. - -# @author Mark McClain (DreamHost) - -import warnings - -from neutron import auth - - -warnings.warn( - _('You are using old configuration values for the api-paste config. ' - 'Please update for Neutron.') -) - -# For compatibility with old configurations -QuantumKeystoneContext = auth.NeutronKeystoneContext -pipeline_factory = auth.pipeline_factory diff --git a/setup.cfg b/setup.cfg index 24c5ee2aef..15a7d9a5e6 100644 --- a/setup.cfg +++ b/setup.cfg @@ -21,7 +21,6 @@ classifier = [files] packages = neutron - quantum data_files = etc/neutron = etc/api-paste.ini @@ -75,9 +74,7 @@ data_files = etc/neutron/plugins/ryu = etc/neutron/plugins/ryu/ryu.ini etc/neutron/plugins/vmware = etc/neutron/plugins/vmware/nsx.ini scripts = - bin/quantum-rootwrap bin/neutron-rootwrap - bin/quantum-rootwrap-xen-dom0 bin/neutron-rootwrap-xen-dom0 [global] @@ -111,28 +108,7 @@ console_scripts = neutron-server = neutron.server:main neutron-rootwrap = oslo.rootwrap.cmd:main neutron-usage-audit = neutron.cmd.usage_audit:main - quantum-check-nvp-config = neutron.plugins.vmware.check_nsx_config:main - quantum-db-manage = neutron.db.migration.cli:main neutron-vpn-agent = neutron.services.vpn.agent:main - quantum-debug = neutron.debug.shell:main - quantum-dhcp-agent = neutron.agent.dhcp_agent:main - quantum-hyperv-agent = neutron.plugins.hyperv.agent.hyperv_neutron_agent:main - quantum-ibm-agent = neutron.plugins.ibm.agent.sdnve_neutron_agent:main - quantum-l3-agent = neutron.agent.l3_agent:main - quantum-lbaas-agent = neutron.services.loadbalancer.agent.agent:main - quantum-linuxbridge-agent = neutron.plugins.linuxbridge.agent.linuxbridge_neutron_agent:main - quantum-metadata-agent = neutron.agent.metadata.agent:main - quantum-mlnx-agent = neutron.plugins.mlnx.agent.eswitch_neutron_agent:main - quantum-nec-agent = neutron.plugins.nec.agent.nec_neutron_agent:main - quantum-netns-cleanup = neutron.agent.netns_cleanup_util:main - quantum-ns-metadata-proxy = neutron.agent.metadata.namespace_proxy:main - quantum-nvsd-agent = neutron.plugins.oneconvergence.agent.nvsd_neutron_agent:main - quantum-openvswitch-agent = neutron.plugins.openvswitch.agent.ovs_neutron_agent:main - quantum-ovs-cleanup = neutron.agent.ovs_cleanup_util:main - quantum-ryu-agent = neutron.plugins.ryu.agent.ryu_neutron_agent:main - quantum-server = neutron.server:main - quantum-rootwrap = oslo.rootwrap.cmd:main - quantum-usage-audit = neutron.cmd.usage_audit:main neutron-metering-agent = neutron.services.metering.agents.metering_agent:main neutron-ofagent-agent = ryu.cmd.ofa_neutron_agent:main neutron.core_plugins =