Merge "Don't add duplicate metadata rules after router update" into stable/ocata

This commit is contained in:
Jenkins 2017-06-17 13:58:56 +00:00 committed by Gerrit Code Review
commit 90db5afe2b
2 changed files with 27 additions and 2 deletions

View File

@ -170,8 +170,14 @@ def after_router_added(resource, event, l3_agent, **kwargs):
def after_router_updated(resource, event, l3_agent, **kwargs):
router = kwargs['router']
proxy = l3_agent.metadata_driver
if not proxy.monitors.get(router.router_id):
after_router_added(resource, event, l3_agent, **kwargs)
if (not proxy.monitors.get(router.router_id) and
not isinstance(router, ha_router.HaRouter)):
proxy.spawn_monitored_metadata_proxy(
l3_agent.process_monitor,
router.ns_name,
proxy.metadata_port,
l3_agent.conf,
router_id=router.router_id)
def before_router_removed(resource, event, l3_agent, **kwargs):

View File

@ -20,6 +20,7 @@ from oslo_utils import uuidutils
from neutron.agent.common import config as agent_config
from neutron.agent.l3 import agent as l3_agent
from neutron.agent.l3 import router_info
from neutron.agent.linux import iptables_manager
from neutron.agent.metadata import driver as metadata_driver
from neutron.common import constants
from neutron.conf.agent.l3 import config as l3_config
@ -93,6 +94,24 @@ class TestMetadataDriverProcess(base.BaseTestCase):
f.assert_called_once_with(
'router', 'after_update', agent, router=ri)
def test_after_router_updated_should_not_call_add_metadata_rules(self):
with mock.patch.object(iptables_manager.IptablesTable,
'add_rule') as f,\
mock.patch.object(iptables_manager.IptablesManager,
'apply'),\
mock.patch.object(metadata_driver.MetadataDriver,
'spawn_monitored_metadata_proxy'),\
mock.patch.object(router_info.RouterInfo, 'process'):
agent = l3_agent.L3NATAgent('localhost')
router_id = _uuid()
router = {'id': router_id}
ri = router_info.RouterInfo(mock.Mock(), router_id, router,
agent.conf, mock.ANY)
agent.router_info[router_id] = ri
f.reset_mock()
agent._process_updated_router(router)
f.assert_not_called()
def _test_spawn_metadata_proxy(self, expected_user, expected_group,
user='', group='', watch_log=True):
router_id = _uuid()