mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-13 12:16:29 +00:00
Update DNS plug-in on network change (#5331)
* Update DNS plug-in on network change Restart the DNS plug-in when the primary network changes network changes. This makes sure any potential host OS DNS configuration changes get picked up by the DNS plug-in as well. * Add a test case --------- Co-authored-by: Mike Degatano <michael.degatano@gmail.com>
This commit is contained in:
parent
e2b25fe7ce
commit
2968a5717c
@ -10,7 +10,9 @@ from ..coresys import CoreSys, CoreSysAttributes
|
|||||||
from ..dbus.const import (
|
from ..dbus.const import (
|
||||||
DBUS_ATTR_CONNECTION_ENABLED,
|
DBUS_ATTR_CONNECTION_ENABLED,
|
||||||
DBUS_ATTR_CONNECTIVITY,
|
DBUS_ATTR_CONNECTIVITY,
|
||||||
|
DBUS_ATTR_PRIMARY_CONNECTION,
|
||||||
DBUS_IFACE_NM,
|
DBUS_IFACE_NM,
|
||||||
|
DBUS_OBJECT_BASE,
|
||||||
DBUS_SIGNAL_NM_CONNECTION_ACTIVE_CHANGED,
|
DBUS_SIGNAL_NM_CONNECTION_ACTIVE_CHANGED,
|
||||||
ConnectionStateType,
|
ConnectionStateType,
|
||||||
ConnectivityState,
|
ConnectivityState,
|
||||||
@ -148,6 +150,15 @@ class NetworkManager(CoreSysAttributes):
|
|||||||
connectivity_check: bool | None = changed.get(DBUS_ATTR_CONNECTION_ENABLED)
|
connectivity_check: bool | None = changed.get(DBUS_ATTR_CONNECTION_ENABLED)
|
||||||
connectivity: bool | None = changed.get(DBUS_ATTR_CONNECTIVITY)
|
connectivity: bool | None = changed.get(DBUS_ATTR_CONNECTIVITY)
|
||||||
|
|
||||||
|
# This potentially updated the DNS configuration. Make sure the DNS plug-in
|
||||||
|
# picks up the latest settings.
|
||||||
|
if (
|
||||||
|
DBUS_ATTR_PRIMARY_CONNECTION in changed
|
||||||
|
and changed[DBUS_ATTR_PRIMARY_CONNECTION]
|
||||||
|
and changed[DBUS_ATTR_PRIMARY_CONNECTION] != DBUS_OBJECT_BASE
|
||||||
|
):
|
||||||
|
await self.sys_plugins.dns.restart()
|
||||||
|
|
||||||
if (
|
if (
|
||||||
connectivity_check is True
|
connectivity_check is True
|
||||||
or DBUS_ATTR_CONNECTION_ENABLED in invalidated
|
or DBUS_ATTR_CONNECTION_ENABLED in invalidated
|
||||||
|
@ -7,6 +7,7 @@ from unittest.mock import PropertyMock, patch
|
|||||||
import pytest
|
import pytest
|
||||||
|
|
||||||
from supervisor.coresys import CoreSys
|
from supervisor.coresys import CoreSys
|
||||||
|
from supervisor.plugins.dns import PluginDns
|
||||||
|
|
||||||
from tests.dbus_service_mocks.network_manager import (
|
from tests.dbus_service_mocks.network_manager import (
|
||||||
NetworkManager as NetworkManagerService,
|
NetworkManager as NetworkManagerService,
|
||||||
@ -84,3 +85,20 @@ async def test_connectivity_events(coresys: CoreSys, force: bool):
|
|||||||
},
|
},
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_dns_restart_on_connection_change(
|
||||||
|
coresys: CoreSys, network_manager_service: NetworkManagerService
|
||||||
|
):
|
||||||
|
"""Test dns plugin is restarted when primary connection changes."""
|
||||||
|
await coresys.host.network.load()
|
||||||
|
with patch.object(PluginDns, "restart") as restart:
|
||||||
|
network_manager_service.emit_properties_changed({"PrimaryConnection": "/"})
|
||||||
|
await network_manager_service.ping()
|
||||||
|
restart.assert_not_called()
|
||||||
|
|
||||||
|
network_manager_service.emit_properties_changed(
|
||||||
|
{"PrimaryConnection": "/org/freedesktop/NetworkManager/ActiveConnection/2"}
|
||||||
|
)
|
||||||
|
await network_manager_service.ping()
|
||||||
|
restart.assert_called_once()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user