]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: _parse_ipv6_route: Fix parsing ifs w/o route 44877/head
authorSebastian Wagner <sewagner@redhat.com>
Thu, 20 Jan 2022 11:00:07 +0000 (12:00 +0100)
committerAdam King <adking@redhat.com>
Thu, 3 Feb 2022 14:36:04 +0000 (09:36 -0500)
Fix parsing interfaces as returned by `ip -6 addr ls` that
don't have a route associated.

Note, in this case there is no route for enp3s0f1

Fixes: https://tracker.ceph.com/issues/53842
Signed-off-by: Sebastian Wagner <sewagner@redhat.com>
src/cephadm/cephadm
src/cephadm/tests/test_networks.py

index 4889ec5e1eb9d796611f9b2d4948dcffb93ee994..be491928e911ff9a0bd9b805b3191d9b53bf64ee 100755 (executable)
@@ -5167,7 +5167,7 @@ def _parse_ipv6_route(routes: str, ips: str) -> Dict[str, Dict[str, Set[str]]]:
         # find the network it belongs to
         net = [n for n in r.keys()
                if ipaddress.ip_address(ip) in ipaddress.ip_network(n)]
-        if net:
+        if net and iface in r[net[0]]:
             assert(iface)
             r[net[0]][iface].add(ip)
 
index f7bd44eb89260413c73a3619e22a456093f91611..ef0f6778a77dc19a4ff3fb44094d67c62da9e531 100644 (file)
@@ -188,6 +188,33 @@ class TestCommandListNetworks:
                 },
             }
         ),
+        (
+            dedent("""
+            ::1 dev lo proto kernel metric 256 pref medium
+            fe80::/64 dev ceph-brx proto kernel metric 256 pref medium
+            fe80::/64 dev brx.0 proto kernel metric 256 pref medium
+            default via fe80::327c:5e00:6487:71e0 dev enp3s0f1 proto ra metric 1024 expires 1790sec hoplimit 64 pref medium            """),
+            dedent("""
+            1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 state UNKNOWN qlen 1000
+                inet6 ::1/128 scope host
+                   valid_lft forever preferred_lft forever
+            5: enp3s0f1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
+                inet6 fe80::ec4:7aff:fe8f:cb83/64 scope link noprefixroute
+                   valid_lft forever preferred_lft forever
+            6: ceph-brx: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
+                inet6 fe80::d8a1:69ff:fede:8f58/64 scope link
+                   valid_lft forever preferred_lft forever
+            7: brx.0@eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 state UP qlen 1000
+                inet6 fe80::a4cb:54ff:fecc:f2a2/64 scope link
+                   valid_lft forever preferred_lft forever
+            """),
+            {
+                'fe80::/64': {
+                    'brx.0': {'fe80::a4cb:54ff:fecc:f2a2'},
+                    'ceph-brx': {'fe80::d8a1:69ff:fede:8f58'}
+                }
+            }
+        ),
     ])
     def test_parse_ipv6_route(self, test_routes, test_ips, expected):
         assert cd._parse_ipv6_route(test_routes, test_ips) == expected