From 71077fb0f78e0c164185ff2ba6606317f10227d1 Mon Sep 17 00:00:00 2001 From: Mike Degatano Date: Mon, 7 Aug 2023 20:53:25 -0400 Subject: [PATCH] Fallback on interface name if path is missing (#4479) --- supervisor/dbus/network/setting/generate.py | 5 ++++- tests/dbus/network/setting/test_generate.py | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) diff --git a/supervisor/dbus/network/setting/generate.py b/supervisor/dbus/network/setting/generate.py index 2e2254717..1e6316ba6 100644 --- a/supervisor/dbus/network/setting/generate.py +++ b/supervisor/dbus/network/setting/generate.py @@ -59,7 +59,10 @@ def get_connection_from_interface( } if interface.type != InterfaceType.VLAN: - conn[CONF_ATTR_MATCH] = {CONF_ATTR_PATH: Variant("as", [interface.path])} + if interface.path: + conn[CONF_ATTR_MATCH] = {CONF_ATTR_PATH: Variant("as", [interface.path])} + else: + conn[CONF_ATTR_CONNECTION]["interface-name"] = Variant("s", interface.name) ipv4 = {} if not interface.ipv4 or interface.ipv4.method == InterfaceMethod.AUTO: diff --git a/tests/dbus/network/setting/test_generate.py b/tests/dbus/network/setting/test_generate.py index ec9916ef8..bf22d0cb9 100644 --- a/tests/dbus/network/setting/test_generate.py +++ b/tests/dbus/network/setting/test_generate.py @@ -1,6 +1,9 @@ """Test settings generation from interface.""" +from unittest.mock import PropertyMock, patch + from supervisor.dbus.network import NetworkManager +from supervisor.dbus.network.interface import NetworkInterface from supervisor.dbus.network.setting.generate import get_connection_from_interface from supervisor.host.network import Interface @@ -24,3 +27,17 @@ async def test_get_connection_from_interface(network_manager: NetworkManager): assert connection_payload["ipv6"]["method"].value == "auto" assert "address-data" not in connection_payload["ipv6"] + + +async def test_get_connection_no_path(network_manager: NetworkManager): + """Test network interface without a path.""" + dbus_interface = network_manager.get(TEST_INTERFACE) + with patch.object(NetworkInterface, "path", new=PropertyMock(return_value=None)): + interface = Interface.from_dbus_interface(dbus_interface) + + connection_payload = get_connection_from_interface(interface) + + assert "connection" in connection_payload + assert "match" not in connection_payload + + assert connection_payload["connection"]["interface-name"].value == "eth0"