]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Set ns_name in RouterInfo as attribute
authorJakub Libosvar <libosvar@redhat.com>
Thu, 3 Apr 2014 12:52:59 +0000 (14:52 +0200)
committerMark McClain <mmcclain@yahoo-inc.com>
Fri, 4 Apr 2014 23:23:38 +0000 (19:23 -0400)
Closes-Bug: #1302007
Change-Id: I02a9b92eea06010569d3d9c5a987e69f89b23be5
(cherry picked from commit ceee7b4ac9d027499dfd2568868f1192bfb77879)

neutron/agent/l3_agent.py
neutron/services/firewall/agents/l3reference/firewall_l3_agent.py
neutron/services/firewall/agents/varmour/varmour_router.py
neutron/services/metering/drivers/iptables/iptables_driver.py
neutron/services/vpn/agent.py
neutron/tests/unit/services/firewall/agents/l3reference/test_firewall_l3_agent.py
neutron/tests/unit/test_l3_agent.py

index 5b7d709d6bfa6be310e65bc58a19dd53fcb27f30..a1c217c657202d849d28b23c1143cd9d61e51b81 100644 (file)
@@ -109,11 +109,11 @@ class RouterInfo(object):
         self.use_namespaces = use_namespaces
         # Invoke the setter for establishing initial SNAT action
         self.router = router
+        self.ns_name = NS_PREFIX + router_id if use_namespaces else None
         self.iptables_manager = iptables_manager.IptablesManager(
             root_helper=root_helper,
             #FIXME(danwent): use_ipv6=True,
-            namespace=self.ns_name())
-
+            namespace=self.ns_name)
         self.routes = []
 
     @property
@@ -135,10 +135,6 @@ class RouterInfo(object):
             # Gateway port was removed, remove rules
             self._snat_action = 'remove_rules'
 
-    def ns_name(self):
-        if self.use_namespaces:
-            return NS_PREFIX + self.router_id
-
     def perform_snat_action(self, snat_callback, *args):
         # Process SNAT rules for attached subnets
         if self._snat_action:
@@ -309,7 +305,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
 
     def _create_router_namespace(self, ri):
             ip_wrapper_root = ip_lib.IPWrapper(self.root_helper)
-            ip_wrapper = ip_wrapper_root.ensure_namespace(ri.ns_name())
+            ip_wrapper = ip_wrapper_root.ensure_namespace(ri.ns_name)
             ip_wrapper.netns.execute(['sysctl', '-w', 'net.ipv4.ip_forward=1'])
 
     def _fetch_external_net_id(self, force=False):
@@ -353,7 +349,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
         ri.iptables_manager.apply()
         super(L3NATAgent, self).process_router_add(ri)
         if self.conf.enable_metadata_proxy:
-            self._spawn_metadata_proxy(ri.router_id, ri.ns_name())
+            self._spawn_metadata_proxy(ri.router_id, ri.ns_name)
 
     def _router_removed(self, router_id):
         ri = self.router_info.get(router_id)
@@ -371,9 +367,9 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
             ri.iptables_manager.ipv4['nat'].remove_rule(c, r)
         ri.iptables_manager.apply()
         if self.conf.enable_metadata_proxy:
-            self._destroy_metadata_proxy(ri.router_id, ri.ns_name())
+            self._destroy_metadata_proxy(ri.router_id, ri.ns_name)
         del self.router_info[router_id]
-        self._destroy_router_namespace(ri.ns_name())
+        self._destroy_router_namespace(ri.ns_name)
 
     def _spawn_metadata_proxy(self, router_id, ns_name):
         def callback(pid_file):
@@ -416,7 +412,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
 
     def _get_existing_devices(self, ri):
         ip_wrapper = ip_lib.IPWrapper(root_helper=self.root_helper,
-                                      namespace=ri.ns_name())
+                                      namespace=ri.ns_name)
         ip_devs = ip_wrapper.get_devices(exclude_loopback=True)
         return [ip_dev.name for ip_dev in ip_devs]
 
@@ -452,7 +448,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
             LOG.debug(_('Deleting stale internal router device: %s'),
                       stale_dev)
             self.driver.unplug(stale_dev,
-                               namespace=ri.ns_name(),
+                               namespace=ri.ns_name,
                                prefix=INTERNAL_DEV_PREFIX)
 
         internal_cidrs = [p['ip_cidr'] for p in ri.internal_ports]
@@ -480,7 +476,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
                       stale_dev)
             self.driver.unplug(stale_dev,
                                bridge=self.conf.external_network_bridge,
-                               namespace=ri.ns_name(),
+                               namespace=ri.ns_name,
                                prefix=EXTERNAL_DEV_PREFIX)
 
         # Process static routes for router
@@ -569,7 +565,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
         fip_statuses = {}
         interface_name = self.get_external_device_name(ex_gw_port['id'])
         device = ip_lib.IPDevice(interface_name, self.root_helper,
-                                 namespace=ri.ns_name())
+                                 namespace=ri.ns_name)
         existing_cidrs = set([addr['cidr'] for addr in device.addr.list()])
         new_cidrs = set()
 
@@ -617,7 +613,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
                       ip_address]
         try:
             ip_wrapper = ip_lib.IPWrapper(self.root_helper,
-                                          namespace=ri.ns_name())
+                                          namespace=ri.ns_name)
             ip_wrapper.netns.execute(arping_cmd, check_exit_code=True)
         except Exception as e:
             LOG.error(_("Failed sending gratuitous ARP: %s"), str(e))
@@ -639,7 +635,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
                          ex_gw_port['id'], interface_name,
                          ex_gw_port['mac_address'],
                          bridge=self.conf.external_network_bridge,
-                         namespace=ri.ns_name(),
+                         namespace=ri.ns_name,
                          prefix=EXTERNAL_DEV_PREFIX)
 
         # Compute a list of addresses this router is supposed to have.
@@ -650,7 +646,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
                         for ip in floating_ips]
 
         self.driver.init_l3(interface_name, [ex_gw_port['ip_cidr']],
-                            namespace=ri.ns_name(),
+                            namespace=ri.ns_name,
                             preserve_ips=preserve_ips)
         ip_address = ex_gw_port['ip_cidr'].split('/')[0]
         self._send_gratuitous_arp_packet(ri, interface_name, ip_address)
@@ -659,7 +655,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
         if ex_gw_port['subnet']['gateway_ip']:
             cmd = ['route', 'add', 'default', 'gw', gw_ip]
             ip_wrapper = ip_lib.IPWrapper(self.root_helper,
-                                          namespace=ri.ns_name())
+                                          namespace=ri.ns_name)
             ip_wrapper.netns.execute(cmd, check_exit_code=False)
 
     def external_gateway_removed(self, ri, ex_gw_port,
@@ -667,7 +663,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
 
         self.driver.unplug(interface_name,
                            bridge=self.conf.external_network_bridge,
-                           namespace=ri.ns_name(),
+                           namespace=ri.ns_name,
                            prefix=EXTERNAL_DEV_PREFIX)
 
     def metadata_filter_rules(self):
@@ -701,13 +697,13 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
         interface_name = self.get_internal_device_name(port_id)
         if not ip_lib.device_exists(interface_name,
                                     root_helper=self.root_helper,
-                                    namespace=ri.ns_name()):
+                                    namespace=ri.ns_name):
             self.driver.plug(network_id, port_id, interface_name, mac_address,
-                             namespace=ri.ns_name(),
+                             namespace=ri.ns_name,
                              prefix=INTERNAL_DEV_PREFIX)
 
         self.driver.init_l3(interface_name, [internal_cidr],
-                            namespace=ri.ns_name())
+                            namespace=ri.ns_name)
         ip_address = internal_cidr.split('/')[0]
         self._send_gratuitous_arp_packet(ri, interface_name, ip_address)
 
@@ -715,8 +711,8 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
         interface_name = self.get_internal_device_name(port_id)
         if ip_lib.device_exists(interface_name,
                                 root_helper=self.root_helper,
-                                namespace=ri.ns_name()):
-            self.driver.unplug(interface_name, namespace=ri.ns_name(),
+                                namespace=ri.ns_name):
+            self.driver.unplug(interface_name, namespace=ri.ns_name,
                                prefix=INTERNAL_DEV_PREFIX)
 
     def internal_network_nat_rules(self, ex_gw_ip, internal_cidr):
@@ -874,7 +870,7 @@ class L3NATAgent(firewall_l3_agent.FWaaSL3AgentRpcCallback, manager.Manager):
         cmd = ['ip', 'route', operation, 'to', route['destination'],
                'via', route['nexthop']]
         ip_wrapper = ip_lib.IPWrapper(self.root_helper,
-                                      namespace=ri.ns_name())
+                                      namespace=ri.ns_name)
         ip_wrapper.netns.execute(cmd, check_exit_code=False)
 
     def routes_updated(self, ri):
index a3646c6bbf1c573df02af2022fb30253b7a5a76b..865051835c8ae3b6f19b95ad13add4b95aa3e900 100644 (file)
@@ -102,7 +102,7 @@ class FWaaSL3AgentRpcCallback(api.FWaaSAgentRpcCallbackMixin):
             if rid not in self.router_info:
                 continue
             if self.router_info[rid].use_namespaces:
-                router_ns = self.router_info[rid].ns_name()
+                router_ns = self.router_info[rid].ns_name
                 if router_ns in local_ns_list:
                     router_info_list.append(self.router_info[rid])
             else:
index 25cf02ffadff9b0789de07b7a15ef41a538acf4a..0ca3572295164e6f0dbffb28ac792ddaf19ec526 100755 (executable)
@@ -308,15 +308,15 @@ class vArmourL3NATAgent(l3_agent.L3NATAgent,
 
         if not ip_lib.device_exists(interface_name,
                                     root_helper=self.root_helper,
-                                    namespace=ri.ns_name()):
+                                    namespace=ri.ns_name):
             self.driver.plug(ex_gw_port['network_id'],
                              ex_gw_port['id'], interface_name,
                              ex_gw_port['mac_address'],
                              bridge=self.conf.external_network_bridge,
-                             namespace=ri.ns_name(),
+                             namespace=ri.ns_name,
                              prefix=l3_agent.EXTERNAL_DEV_PREFIX)
         self.driver.init_l3(interface_name, [ex_gw_port['ip_cidr']],
-                            namespace=ri.ns_name())
+                            namespace=ri.ns_name)
 
     def _update_routing_table(self, ri, operation, route):
         return
index 33a4d27b638c15d46997aa0c08a56e2766ffb3f7..3eb17c24607704911a70f0fda5a6fa5c3d04c186 100644 (file)
@@ -70,16 +70,13 @@ class RouterWithMetering(object):
         self.id = router['id']
         self.router = router
         self.root_helper = config.get_root_helper(self.conf)
+        self.ns_name = NS_PREFIX + self.id if conf.use_namespaces else None
         self.iptables_manager = iptables_manager.IptablesManager(
             root_helper=self.root_helper,
-            namespace=self.ns_name(),
+            namespace=self.ns_name,
             binary_name=WRAP_NAME)
         self.metering_labels = {}
 
-    def ns_name(self):
-        if self.conf.use_namespaces:
-            return NS_PREFIX + self.router['id']
-
 
 class IptablesMeteringDriver(abstract_driver.MeteringAbstractDriver):
 
index ffb4d74b6e6a66096e33832470edcb2233809dcb..8c666b497f69324f5a946b364fcca69926216568 100644 (file)
@@ -67,7 +67,7 @@ class VPNAgent(l3_agent.L3NATAgentWithStateReport):
         router_info = self.router_info.get(router_id)
         if not router_info:
             return
-        return router_info.ns_name()
+        return router_info.ns_name
 
     def add_nat_rule(self, router_id, chain, rule, top=False):
         """Add nat rule in namespace.
index f638daa27ed85349d86958199eddaf753f9982de..934e0b1e7686a8050ec880e7abafb017234d73ba 100644 (file)
@@ -321,7 +321,7 @@ class TestFwaasL3AgentRpcCallback(base.BaseTestCase):
         self.api.router_info = {ri.router_id: ri}
         with mock.patch.object(ip_lib.IPWrapper,
                                'get_namespaces') as mock_get_namespaces:
-            mock_get_namespaces.return_value = ri.ns_name()
+            mock_get_namespaces.return_value = ri.ns_name
             router_info_list = self.api._get_router_info_list_for_tenant(
                 routers,
                 ri.router['tenant_id'])
@@ -376,7 +376,7 @@ class TestFwaasL3AgentRpcCallback(base.BaseTestCase):
             ri_expected.append(ri)
         with mock.patch.object(ip_lib.IPWrapper,
                                'get_namespaces') as mock_get_namespaces:
-            mock_get_namespaces.return_value = ri.ns_name()
+            mock_get_namespaces.return_value = ri.ns_name
             router_info_list = self.api._get_router_info_list_for_tenant(
                 routers,
                 ri.router['tenant_id'])
index d390ac29bd6e83161cd04a2f1cbbccedf1767384..89e3e4320287a96030c1c5a2533ac9bd120efce2 100644 (file)
@@ -96,7 +96,7 @@ class TestBasicRouterOperations(base.BaseTestCase):
         ri = l3_agent.RouterInfo(id, self.conf.root_helper,
                                  self.conf.use_namespaces, None)
 
-        self.assertTrue(ri.ns_name().endswith(id))
+        self.assertTrue(ri.ns_name.endswith(id))
 
     def test_router_info_create_with_router(self):
         id = _uuid()
@@ -113,7 +113,7 @@ class TestBasicRouterOperations(base.BaseTestCase):
             'gw_port': ex_gw_port}
         ri = l3_agent.RouterInfo(id, self.conf.root_helper,
                                  self.conf.use_namespaces, router)
-        self.assertTrue(ri.ns_name().endswith(id))
+        self.assertTrue(ri.ns_name.endswith(id))
         self.assertEqual(ri.router, router)
 
     def test_agent_create(self):
@@ -838,7 +838,7 @@ class TestBasicRouterOperations(base.BaseTestCase):
             self.assertEqual(self.mock_driver.unplug.call_count,
                              len(stale_devnames))
             calls = [mock.call(stale_devname,
-                               namespace=ri.ns_name(),
+                               namespace=ri.ns_name,
                                prefix=l3_agent.INTERNAL_DEV_PREFIX)
                      for stale_devname in stale_devnames]
             self.mock_driver.unplug.assert_has_calls(calls, any_order=True)
@@ -867,7 +867,7 @@ class TestBasicRouterOperations(base.BaseTestCase):
         self.mock_driver.unplug.assert_called_with(
             stale_devnames[0],
             bridge="br-ex",
-            namespace=ri.ns_name(),
+            namespace=ri.ns_name,
             prefix=l3_agent.EXTERNAL_DEV_PREFIX)
 
     def test_routers_with_admin_state_down(self):