]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Enable SNAT by default in L3 agents
authorFrancois Eleouet <f.eleouet@gmail.com>
Fri, 16 Aug 2013 11:24:20 +0000 (13:24 +0200)
committerFrancois Eleouet <f.eleouet@gmail.com>
Mon, 19 Aug 2013 06:42:37 +0000 (08:42 +0200)
If ext-gw-mode extension isn't supported by plugin, it won't
return enable_snat param in router info. Agent will currently
default to enable_snat = false, which changes from expected
default behaviour prior to ext-gw-mode introduction.

This patch changes L3 agent to enable SNAT by default if plugin
doesn't support ext-gw-mode extension.

Change-Id: I35e8f8c20392bff9ac2f875f2c9a1038ab06ad7b
Closes-Bug: #1212868

neutron/agent/l3_agent.py
neutron/tests/unit/test_l3_agent.py

index 6b21c2cd602e0e056895cb91d74d3e62452b6dc5..c2eeff6f2e525b4fadb73fae399eb46003e50180 100644 (file)
@@ -116,15 +116,15 @@ class RouterInfo(object):
         self._router = value
         if not self._router:
             return
+        # enable_snat by default if it wasn't specified by plugin
+        self._snat_enabled = self._router.get('enable_snat', True)
         # Set a SNAT action for the router
         if self._router.get('gw_port'):
-            self._snat_action = (
-                'add_rules' if self._router.get('enable_snat')
-                else 'remove_rules')
+            self._snat_action = ('add_rules' if self._snat_enabled
+                                 else 'remove_rules')
         elif self.ex_gw_port:
             # Gateway port was removed, remove rules
             self._snat_action = 'remove_rules'
-        self._snat_enabled = self._router.get('enable_snat')
 
     def ns_name(self):
         if self.use_namespaces:
index 2f9cb52bbd1c8fb39278ad53da201f7af99f6c1d..a18123d8a4de6f8b08c4f839b15263fde6c96071 100644 (file)
@@ -352,7 +352,7 @@ class TestBasicRouterOperations(base.BaseTestCase):
             else:
                 self.assertIn(r.rule, expected_rules)
 
-    def _prepare_router_data(self, enable_snat=True, num_internal_ports=1):
+    def _prepare_router_data(self, enable_snat=None, num_internal_ports=1):
         router_id = _uuid()
         ex_gw_port = {'id': _uuid(),
                       'network_id': _uuid(),
@@ -374,9 +374,10 @@ class TestBasicRouterOperations(base.BaseTestCase):
         router = {
             'id': router_id,
             l3_constants.INTERFACE_KEY: int_ports,
-            'enable_snat': enable_snat,
             'routes': [],
             'gw_port': ex_gw_port}
+        if enable_snat is not None:
+            router['enable_snat'] = enable_snat
         return router
 
     def testProcessRouter(self):
@@ -409,7 +410,7 @@ class TestBasicRouterOperations(base.BaseTestCase):
 
     def test_process_router_snat_disabled(self):
         agent = l3_agent.L3NATAgent(HOSTNAME, self.conf)
-        router = self._prepare_router_data()
+        router = self._prepare_router_data(enable_snat=True)
         ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper,
                                  self.conf.use_namespaces, router=router)
         # Process with NAT
@@ -432,10 +433,10 @@ class TestBasicRouterOperations(base.BaseTestCase):
         router = self._prepare_router_data(enable_snat=False)
         ri = l3_agent.RouterInfo(router['id'], self.conf.root_helper,
                                  self.conf.use_namespaces, router=router)
-        # Process with NAT
+        # Process without NAT
         agent.process_router(ri)
         orig_nat_rules = ri.iptables_manager.ipv4['nat'].rules[:]
-        # Reprocess without NAT
+        # Reprocess with NAT
         router['enable_snat'] = True
         # Reassign the router object to RouterInfo
         ri.router = router