From 26a831d2ed1550a6ab8536a3e0dbd621151ee7ed Mon Sep 17 00:00:00 2001 From: Maxim Devaev Date: Sun, 20 Nov 2022 05:52:33 +0300 Subject: [PATCH] janus: fallback for no-gw configuration --- kvmd/apps/janus/runner.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/kvmd/apps/janus/runner.py b/kvmd/apps/janus/runner.py index 140a7b62..e08fade0 100644 --- a/kvmd/apps/janus/runner.py +++ b/kvmd/apps/janus/runner.py @@ -98,19 +98,19 @@ class JanusRunner: # pylint: disable=too-many-instance-attributes def __get_default_ip(self) -> str: try: gws = netifaces.gateways() - if "default" not in gws: - raise RuntimeError(f"No default gateway: {gws}") + if "default" in gws: + for proto in [socket.AF_INET, socket.AF_INET6]: + if proto in gws["default"]: + iface = gws["default"][proto][1] + addrs = netifaces.ifaddresses(iface) + return addrs[proto][0]["addr"] - iface = "" - for proto in [socket.AF_INET, socket.AF_INET6]: - if proto in gws["default"]: - iface = gws["default"][proto][1] - break - else: - raise RuntimeError(f"No iface for the gateway {gws['default']}") - - for addr in netifaces.ifaddresses(iface).get(proto, []): - return addr["addr"] + for iface in netifaces.interfaces(): + if not iface.startswith(("lo", "docker")): + addrs = netifaces.ifaddresses(iface) + for proto in [socket.AF_INET, socket.AF_INET6]: + if proto in addrs: + return addrs[proto][0]["addr"] except Exception as err: get_logger().error("Can't get default IP: %s", tools.efmt(err)) return ""