]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Add a configuration item to disable metadata proxy
authorgongysh <gongysh@linux.vnet.ibm.com>
Tue, 9 Apr 2013 02:33:43 +0000 (10:33 +0800)
committergongysh <gongysh@linux.vnet.ibm.com>
Thu, 9 May 2013 06:08:02 +0000 (14:08 +0800)
Bug #1166543

Change-Id: If7aee8d79b7ca275f89cf9299eac1f76d5500fcc

etc/l3_agent.ini
quantum/agent/l3_agent.py
quantum/tests/unit/test_l3_agent.py

index 133576c3f37c5b48fd3ae175d3eae6a7f73c5f5c..962c3afbe22b518428ff3035e907c41cb3e25d77 100644 (file)
@@ -51,3 +51,7 @@ interface_driver = quantum.agent.linux.interface.OVSInterfaceDriver
 # seconds to start to sync routers' data after
 # starting agent
 # periodic_fuzzy_delay = 5
+
+# enable_metadata_proxy, which is true by default, can be set to False
+# if the Nova metadata server is not available
+# enable_metadata_proxy = True
\ No newline at end of file
index 368cfb5c6eef7a3619f29ada1f05fd13ad06e782..55bfe2908c80bc6a2141d3f622c86f77641ce090 100644 (file)
@@ -139,6 +139,8 @@ class L3NATAgent(manager.Manager):
         cfg.StrOpt('gateway_external_network_id', default='',
                    help=_("UUID of external network for routers implemented "
                           "by the agents.")),
+        cfg.BoolOpt('enable_metadata_proxy', default=True,
+                    help=_("Allow running metadata proxy.")),
     ]
 
     def __init__(self, host, conf=None):
@@ -232,7 +234,8 @@ class L3NATAgent(manager.Manager):
         for c, r in self.metadata_nat_rules():
             ri.iptables_manager.ipv4['nat'].add_rule(c, r)
         ri.iptables_manager.apply()
-        self._spawn_metadata_proxy(ri)
+        if self.conf.enable_metadata_proxy:
+            self._spawn_metadata_proxy(ri)
 
     def _router_removed(self, router_id):
         ri = self.router_info[router_id]
@@ -245,7 +248,8 @@ class L3NATAgent(manager.Manager):
         for c, r in self.metadata_nat_rules():
             ri.iptables_manager.ipv4['nat'].remove_rule(c, r)
         ri.iptables_manager.apply()
-        self._destroy_metadata_proxy(ri)
+        if self.conf.enable_metadata_proxy:
+            self._destroy_metadata_proxy(ri)
         del self.router_info[router_id]
         self._destroy_router_namespace(ri.ns_name())
 
index 0ac24a2c04d60a069946916e20efd98403e1f41e..95211f3ca7aec839b1cab94bbd4b00e7cce6f16f 100644 (file)
@@ -429,6 +429,35 @@ class TestBasicRouterOperations(base.BaseTestCase):
 
         self.assertEqual(agent._destroy_router_namespace.call_count, 1)
 
+    def _configure_metadata_proxy(self, enableflag=True):
+        if not enableflag:
+            self.conf.set_override('enable_metadata_proxy', False)
+        agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
+        router_id = _uuid()
+        router = {'id': _uuid(),
+                  'external_gateway_info': {},
+                  'routes': []}
+        with mock.patch.object(
+            agent, '_destroy_metadata_proxy') as destroy_proxy:
+            with mock.patch.object(
+                agent, '_spawn_metadata_proxy') as spawn_proxy:
+                agent._router_added(router_id, router)
+                if enableflag:
+                    spawn_proxy.assert_called_with(mock.ANY)
+                else:
+                    self.assertFalse(spawn_proxy.call_count)
+                agent._router_removed(router_id)
+                if enableflag:
+                    destroy_proxy.assert_called_with(mock.ANY)
+                else:
+                    self.assertFalse(destroy_proxy.call_count)
+
+    def test_enable_metadata_proxy(self):
+        self._configure_metadata_proxy()
+
+    def test_disable_metadata_proxy_spawn(self):
+        self._configure_metadata_proxy(enableflag=False)
+
 
 class TestL3AgentEventHandler(base.BaseTestCase):