summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2017-07-07 21:01:49 +0000
committerGerrit Code Review <review@openstack.org>2017-07-07 21:01:49 +0000
commit4c02ef2a1c167b47f7f1f6409b79a0fa872c7b37 (patch)
tree533e3a1df6370a2c6d5b044bb9b3653fdc3d3773
parent54d9f3bba60603dcd158258fcdbe27169ebd38e9 (diff)
parent7a3b3368cb69c3f119637d93ce8a86510b455c7f (diff)
downloadneutron-4c02ef2a1c167b47f7f1f6409b79a0fa872c7b37.tar.gz
Merge "Don't add duplicate metadata rules after router update" into stable/newton
-rw-r--r--neutron/agent/metadata/driver.py10
-rw-r--r--neutron/tests/unit/agent/metadata/test_driver.py19
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()