neutron/neutron/services/l3_router
Richard Theis c7c9c398db Support callbacks for L3 plugins without an agent
Agentless L3 plugins, such as used by networking-ovn, were required
to inherit from L3_NAT_db_mixin instead of L3_NAT_dbonly_mixin due
to an L3 NAT DB signature mismatch which was fixed by [1]. With [1]
fix, agentless L3 plugins would still implicitly pick up callbacks
intended for use by L3 agents. Such callbacks will fail unless the
L3 plugin inherits from L3_NAT_db_mixin. This patch supports
callbacks for L3 plugins without an agent. The callbacks
have been refactored and are now done implicitly during object
creation. As a result, the l3_db subscribe() method has been
deprecated.

[1] https://review.openstack.org/#/c/348558/

Change-Id: Id5dd012ffd274314f7d1b39a28525893e0675500
Partial-Bug: #1597898
2016-08-02 12:29:23 -05:00
..
service_providers Add flavor/service provider support to routers 2016-07-26 16:13:35 -07:00
README Adds support for L3 routing/NAT as a service plugin 2013-09-11 12:12:10 +02:00
__init__.py Empty files should not contain copyright or license 2014-10-20 00:50:32 +00:00
l3_router_plugin.py Support callbacks for L3 plugins without an agent 2016-08-02 12:29:23 -05:00

README

This service plugin implements the L3 routing functionality (resources router
and floatingip) that in earlier releases before Havana was provided by core
plugins (openvswitch, linuxbridge, ... etc).

Core plugins can now choose not to implement L3 routing functionality and
instead delegate that to the L3 routing service plugin.

The required changes to a core plugin are in that case:
- Do not inherit 'l3_db.L3_NAT_db_mixin' (or its descendants like extraroute)
  anymore.
- Remove "router" from 'supported_extension_aliases'.
- Modify any 'self' references to members in L3_NAT_db_mixin to instead use
  'manager.NeutronManager.get_service_plugins().get(constants.L3_ROUTER_NAT)'
  For example,
     self.prevent_l3_port_deletion(...)
  becomes something like
     plugin = manager.NeutronManager.get_service_plugins().get(
         constants.L3_ROUTER_NAT)
     if plugin:
         plugin.prevent_l3_port_deletion(...)

If the core plugin has relied on the L3Agent the following must also be changed:
- Do not inherit 'l3_rpc_base.L3RpcCallbackMixin' in any '*RpcCallbacks' class.
- Do not be a consumer of the topics.L3PLUGIN topic for RPC.

To use the L3 routing service plugin, add
'neutron.services.l3_router.l3_router_plugin.L3RouterPlugin'
to 'service_plugins' in '/etc/neutron/neutron.conf'.
That is,
service_plugins = neutron.services.l3_router.l3_router_plugin.L3RouterPlugin