From a481ad73f3eb3d592c3e3dbdef5d4db50f738da7 Mon Sep 17 00:00:00 2001 From: Matt White Date: Mon, 6 Jan 2020 13:22:46 +0000 Subject: [PATCH] Prefer admin defined DNS (#1399) * Prefer admin defined DNS servers * Remove space * Update debug log * Test for customisation of manual DNS servers. * Warn that manual DNS will be removed on reset in v200 * Remove TODO * Format with black * Implement DNS fix for versions <194 * Insert missing docstring * Add missing docstring * Remove self.servers == DNS_SERVERS test --- hassio/dns.py | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/hassio/dns.py b/hassio/dns.py index 049453bf7..6808ca95d 100644 --- a/hassio/dns.py +++ b/hassio/dns.py @@ -113,6 +113,11 @@ class CoreDNS(JsonConfig, CoreSysAttributes): self.version = self.instance.version self.save_data() + # Fix dns server handling before 194 / Cleanup with version 200 + if DNS_SERVERS == self.servers: + self.servers.clear() + self.save_data() + # Start DNS forwarder self.sys_create_task(self.forwarder.start(self.sys_docker.network.dns)) @@ -194,8 +199,10 @@ class CoreDNS(JsonConfig, CoreSysAttributes): raise CoreDNSError() from None async def reset(self) -> None: - """Reset Config / Hosts.""" - self.servers = DNS_SERVERS + """Reset DNS and hosts.""" + # Reset manually defined DNS + self.servers.clear() + self.save_data() # Resets hosts with suppress(OSError): @@ -215,15 +222,18 @@ class CoreDNS(JsonConfig, CoreSysAttributes): _LOGGER.error("Can't read coredns template file: %s", err) raise CoreDNSError() from None - # Prepare DNS serverlist: Prio 1 Local, Prio 2 Manual, Prio 3 Fallback + # Prepare DNS serverlist: Prio 1 Manual, Prio 2 Local, Prio 3 Fallback local_dns: List[str] = self.sys_host.network.dns_servers or ["dns://127.0.0.11"] + servers: List[str] = self.servers + local_dns + DNS_SERVERS + _LOGGER.debug( - "local-dns = %s, config-dns = %s, backup-dns = %s", - local_dns, + "config-dns = %s, local-dns = %s , backup-dns = %s", self.servers, + local_dns, DNS_SERVERS, ) - for server in local_dns + self.servers + DNS_SERVERS: + + for server in servers: try: dns_url(server) if server not in dns_servers: