Use L3 api from vpn ipsec driver via service plugin

VPNaaS and ML2 plugin won't work, because ML2 plugin
supports service version of L3.
In this commit, we modify ipsec driver to use L3 plugin.
This is also backward compatible change, because if L2 plugin
supports L3 get_service_plugin API returns L2 plugin.

Fixes bug 1238846

Change-Id: I36e541bb2e3e1df2e01f73a74f3e9005af6c38b7
Note: Exsiting unit test covers this change
This commit is contained in:
Nachi Ueno 2013-10-11 11:46:32 -07:00
parent cbfd690d65
commit ae1d6d1b70
2 changed files with 9 additions and 1 deletions

View File

@ -21,6 +21,7 @@ from neutron import manager
from neutron.openstack.common import log as logging
from neutron.openstack.common import rpc
from neutron.openstack.common.rpc import proxy
from neutron.plugins.common import constants
from neutron.services.vpn.common import topics
from neutron.services.vpn import service_drivers
@ -72,7 +73,8 @@ class IPsecVpnAgentApi(proxy.RpcProxy):
dispatch notification for the agent.
"""
adminContext = context.is_admin and context or context.elevated()
plugin = manager.NeutronManager.get_plugin()
plugin = manager.NeutronManager.get_service_plugins().get(
constants.L3_ROUTER_NAT)
if not version:
version = self.RPC_API_VERSION
l3_agents = plugin.get_l3_agents_hosting_routers(

View File

@ -19,6 +19,7 @@ import mock
from neutron import context
from neutron.openstack.common import uuidutils
from neutron.plugins.common import constants
from neutron.services.vpn.service_drivers import ipsec as ipsec_driver
from neutron.tests import base
@ -46,8 +47,13 @@ class TestIPsecDriver(base.BaseTestCase):
plugin_p = mock.patch('neutron.manager.NeutronManager.get_plugin')
get_plugin = plugin_p.start()
get_plugin.return_value = plugin
service_plugin_p = mock.patch(
'neutron.manager.NeutronManager.get_service_plugins')
get_service_plugin = service_plugin_p.start()
get_service_plugin.return_value = {constants.L3_ROUTER_NAT: plugin}
service_plugin = mock.Mock()
service_plugin.get_l3_agents_hosting_routers.return_value = [l3_agent]
service_plugin._get_vpnservice.return_value = {
'router_id': _uuid()
}