From: Sebastian Wagner Date: Thu, 20 Jan 2022 11:00:07 +0000 (+0100) Subject: cephadm: _parse_ipv6_route: Fix parsing ifs w/o route X-Git-Tag: v16.2.8~165^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=a6bb5dd4be902b48ed5bfa4214e98c30eb6b12d5;p=ceph.git cephadm: _parse_ipv6_route: Fix parsing ifs w/o route 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 --- diff --git a/src/cephadm/cephadm b/src/cephadm/cephadm index 4889ec5e1eb9d..be491928e911f 100755 --- a/src/cephadm/cephadm +++ b/src/cephadm/cephadm @@ -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) diff --git a/src/cephadm/tests/test_networks.py b/src/cephadm/tests/test_networks.py index f7bd44eb89260..ef0f6778a77dc 100644 --- a/src/cephadm/tests/test_networks.py +++ b/src/cephadm/tests/test_networks.py @@ -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: mtu 65536 state UNKNOWN qlen 1000 + inet6 ::1/128 scope host + valid_lft forever preferred_lft forever + 5: enp3s0f1: 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: 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: 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