Do not create fip agent port for dvr_no_external node

Change-Id: I6c108806aaf41ee12594d9b0909b1a301c394c64
Closes-Bug: #1723891
This commit is contained in:
zhsun 2017-10-21 07:36:58 +08:00
parent c0fe9e34a1
commit d2e14524c9
2 changed files with 37 additions and 0 deletions

View File

@ -848,6 +848,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.db.models import l3 as l3_models
from neutron.db import models_v2
from neutron.extensions import l3
@ -470,6 +471,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(),