Merge "Do not create fip agent port for dvr_no_external node" into stable/pike

This commit is contained in:
Zuul 2018-01-19 01:37:48 +00:00 committed by Gerrit Code Review
commit 8a943e4dbe
2 changed files with 37 additions and 0 deletions

View File

@ -853,6 +853,9 @@ class _DVRAgentInterfaceMixin(object):
"""
l3_agent_db = self._get_agent_by_type_and_host(
context, const.AGENT_TYPE_L3, host)
l3_agent_mode = self._get_agent_mode(l3_agent_db)
if l3_agent_mode == l3_const.L3_AGENT_MODE_DVR_NO_EXTERNAL:
return
if l3_agent_db:
LOG.debug("Agent ID exists: %s", l3_agent_db['id'])
f_port = self._get_agent_gw_ports_exist_for_network(

View File

@ -29,6 +29,7 @@ from neutron.db import agents_db
from neutron.db import common_db_mixin
from neutron.db import l3_dvr_db
from neutron.db import l3_dvrscheduler_db
from neutron.db.models import agent as agent_model
from neutron.extensions import l3
from neutron.objects import router as router_obj
from neutron.tests.unit.db import test_db_base_plugin_v2
@ -447,6 +448,39 @@ class L3DvrTestCase(test_db_base_plugin_v2.NeutronDbPluginV2TestCase):
fip, floatingip, router))
self.assertTrue(create_fip.called)
def test_create_fip_agent_gw_port_if_not_exists_with_l3_agent(self):
fport_db = {'id': _uuid()}
self.mixin._get_agent_gw_ports_exist_for_network = mock.Mock(
return_value=fport_db)
fipagent = agent_model.Agent(
binary='foo-agent',
host='host',
agent_type='L3 agent',
topic='foo_topic',
configurations='{"agent_mode": "dvr_no_external"}')
self.mixin._get_agent_by_type_and_host = mock.Mock(
return_value=fipagent)
fport = self.mixin.create_fip_agent_gw_port_if_not_exists(
self.ctx,
'network_id',
'host')
self.assertIsNone(fport)
fipagent = agent_model.Agent(
binary='foo-agent',
host='host',
agent_type='L3 agent',
topic='foo_topic',
configurations='{"agent_mode": "dvr"}')
self.mixin._get_agent_by_type_and_host = mock.Mock(
return_value=fipagent)
fport = self.mixin.create_fip_agent_gw_port_if_not_exists(
self.ctx,
'network_id',
'host')
self.assertIsNotNone(fport)
def test_create_floatingip_agent_gw_port_with_non_dvr_router(self):
floatingip = {
'id': _uuid(),