]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Allow passing arbitrary ip route parameters to add/delete_route
authorCarl Baldwin <carl.baldwin@hp.com>
Mon, 31 Aug 2015 21:31:57 +0000 (21:31 +0000)
committerCarl Baldwin <carl@ecbaldwin.net>
Wed, 9 Sep 2015 21:18:39 +0000 (21:18 +0000)
There are arguments to ip route like scope and dev that will need to
be passed to add_route and delete_route.  This patch allows them to be
passed using kwargs.

Change-Id: I06d46bee9ca333c6a308d1af961bd9eadab9db97
Partially-Implements:  blueprint address-scopes

neutron/agent/linux/ip_lib.py
neutron/tests/unit/agent/linux/test_ip_lib.py

index c7acd047bb2c89835eb58755099fe7759715a79d..428c952602bda3aa6950b4aa0754b56da4a48952 100644 (file)
@@ -619,39 +619,25 @@ class IpRouteCommand(IpDeviceCommandBase):
 
             yield route
 
-    def list_routes(self, ip_version):
+    def list_routes(self, ip_version, **kwargs):
         args = ['list']
         args += self._dev_args()
         args += self._table_args()
+        for k, v in kwargs.items():
+            args += [k, v]
 
         output = self._run([ip_version], tuple(args))
-        return [r for r in self._parse_routes(ip_version, output)]
+        return [r for r in self._parse_routes(ip_version, output, **kwargs)]
 
     def list_onlink_routes(self, ip_version):
-        args = ['list']
-        args += self._dev_args()
-        args += ['scope', 'link']
-        args += self._table_args()
-
-        output = self._run([ip_version], tuple(args))
-        return [r for r in self._parse_routes(ip_version, output, scope='link')
-                if 'src' not in r]
+        routes = self.list_routes(ip_version, scope='link')
+        return [r for r in routes if 'src' not in r]
 
     def add_onlink_route(self, cidr):
-        ip_version = get_ip_version(cidr)
-        args = ['replace', cidr]
-        args += self._dev_args()
-        args += ['scope', 'link']
-        args += self._table_args()
-        self._as_root([ip_version], tuple(args))
+        self.add_route(cidr, scope='link')
 
     def delete_onlink_route(self, cidr):
-        ip_version = get_ip_version(cidr)
-        args = ['del', cidr]
-        args += self._dev_args()
-        args += ['scope', 'link']
-        args += self._table_args()
-        self._as_root([ip_version], tuple(args))
+        self.delete_route(cidr, scope='link')
 
     def get_gateway(self, scope=None, filters=None, ip_version=None):
         options = [ip_version] if ip_version else []
@@ -733,22 +719,26 @@ class IpRouteCommand(IpDeviceCommandBase):
                                    'proto', 'kernel',
                                    'dev', device))
 
-    def add_route(self, cidr, via=None, table=None):
+    def add_route(self, cidr, via=None, table=None, **kwargs):
         ip_version = get_ip_version(cidr)
         args = ['replace', cidr]
         if via:
             args += ['via', via]
         args += self._dev_args()
         args += self._table_args(table)
+        for k, v in kwargs.items():
+            args += [k, v]
         self._as_root([ip_version], tuple(args))
 
-    def delete_route(self, cidr, via=None, table=None):
+    def delete_route(self, cidr, via=None, table=None, **kwargs):
         ip_version = get_ip_version(cidr)
         args = ['del', cidr]
         if via:
             args += ['via', via]
         args += self._dev_args()
         args += self._table_args(table)
+        for k, v in kwargs.items():
+            args += [k, v]
         self._as_root([ip_version], tuple(args))
 
 
index 587601f910f8592f37fccf8ea6b119782bdcb5e3..2de408d7686029aa1cd95ed965d21ab1f77888f9 100644 (file)
@@ -958,6 +958,13 @@ class TestIpRouteCommand(TestIPCmdBase):
                            'dev', self.parent.name,
                            'table', self.table))
 
+    def test_add_route_with_scope(self):
+        self.route_cmd.add_route(self.cidr, scope='link')
+        self._assert_sudo([self.ip_version],
+                          ('replace', self.cidr,
+                           'dev', self.parent.name,
+                           'scope', 'link'))
+
     def test_delete_route(self):
         self.route_cmd.delete_route(self.cidr, self.ip, self.table)
         self._assert_sudo([self.ip_version],
@@ -973,6 +980,13 @@ class TestIpRouteCommand(TestIPCmdBase):
                            'dev', self.parent.name,
                            'table', self.table))
 
+    def test_delete_route_with_scope(self):
+        self.route_cmd.delete_route(self.cidr, scope='link')
+        self._assert_sudo([self.ip_version],
+                          ('del', self.cidr,
+                           'dev', self.parent.name,
+                           'scope', 'link'))
+
     def test_list_routes(self):
         self.parent._run.return_value = (
             "default via 172.124.4.1 dev eth0 metric 100\n"
@@ -1002,24 +1016,24 @@ class TestIpRouteCommand(TestIPCmdBase):
             self.ip_version)
         self.assertEqual(['10.0.0.0/22'], [r['cidr'] for r in routes])
         self._assert_call([self.ip_version],
-                          ('list', 'dev', self.parent.name, 'scope', 'link',
-                           'table', self.table))
+                          ('list', 'dev', self.parent.name,
+                           'table', self.table, 'scope', 'link'))
 
     def test_add_onlink_route_subtable(self):
         self.route_cmd.table(self.table).add_onlink_route(self.cidr)
         self._assert_sudo([self.ip_version],
                           ('replace', self.cidr,
                            'dev', self.parent.name,
-                           'scope', 'link',
-                           'table', self.table))
+                           'table', self.table,
+                           'scope', 'link'))
 
     def test_delete_onlink_route_subtable(self):
         self.route_cmd.table(self.table).delete_onlink_route(self.cidr)
         self._assert_sudo([self.ip_version],
                           ('del', self.cidr,
                            'dev', self.parent.name,
-                           'scope', 'link',
-                           'table', self.table))
+                           'table', self.table,
+                           'scope', 'link'))
 
 
 class TestIPv6IpRouteCommand(TestIpRouteCommand):