diff options
author | Jenkins <jenkins@review.openstack.org> | 2017-07-07 21:01:49 +0000 |
---|---|---|
committer | Gerrit Code Review <review@openstack.org> | 2017-07-07 21:01:49 +0000 |
commit | 4c02ef2a1c167b47f7f1f6409b79a0fa872c7b37 (patch) | |
tree | 533e3a1df6370a2c6d5b044bb9b3653fdc3d3773 | |
parent | 54d9f3bba60603dcd158258fcdbe27169ebd38e9 (diff) | |
parent | 7a3b3368cb69c3f119637d93ce8a86510b455c7f (diff) | |
download | neutron-4c02ef2a1c167b47f7f1f6409b79a0fa872c7b37.tar.gz |
Merge "Don't add duplicate metadata rules after router update" into stable/newton
-rw-r--r-- | neutron/agent/metadata/driver.py | 10 | ||||
-rw-r--r-- | neutron/tests/unit/agent/metadata/test_driver.py | 19 |
2 files changed, 27 insertions, 2 deletions
diff --git a/neutron/agent/metadata/driver.py b/neutron/agent/metadata/driver.py index 92e4ba287b..7133725434 100644 --- a/neutron/agent/metadata/driver.py +++ b/neutron/agent/metadata/driver.py @@ -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): diff --git a/neutron/tests/unit/agent/metadata/test_driver.py b/neutron/tests/unit/agent/metadata/test_driver.py index 21d571706c..01b94953a0 100644 --- a/neutron/tests/unit/agent/metadata/test_driver.py +++ b/neutron/tests/unit/agent/metadata/test_driver.py @@ -21,6 +21,7 @@ from neutron.agent.common import config as agent_config from neutron.agent.l3 import agent as l3_agent from neutron.agent.l3 import ha as l3_ha_agent from neutron.agent.l3 import router_info +from neutron.agent.linux import iptables_manager from neutron.agent.metadata import config from neutron.agent.metadata import driver as metadata_driver from neutron.common import constants @@ -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(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() |