From 334cc66cf64e1ee47d2ce6bdeef9680fc78b5878 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 14 Aug 2019 15:39:44 +0200 Subject: [PATCH 1/4] Bump Version 175 --- hassio/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/const.py b/hassio/const.py index a6447cea4..55954018c 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -3,7 +3,7 @@ from pathlib import Path from ipaddress import ip_network -HASSIO_VERSION = "174" +HASSIO_VERSION = "175" URL_HASSIO_ADDONS = "https://github.com/home-assistant/hassio-addons" URL_HASSIO_VERSION = "https://version.home-assistant.io/{channel}.json" From 2480c83169a14aae37029ed06df0236690a141fa Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 15 Aug 2019 10:17:41 +0200 Subject: [PATCH 2/4] Fix socat command (#1211) --- hassio/misc/forwarder.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/misc/forwarder.py b/hassio/misc/forwarder.py index a20d5d84b..357fd677a 100644 --- a/hassio/misc/forwarder.py +++ b/hassio/misc/forwarder.py @@ -9,7 +9,7 @@ import async_timeout _LOGGER = logging.getLogger(__name__) -COMMAND = "socat UDP-RECVFROM:53,fork UDP-SENDTO:{!s}" +COMMAND = "socat UDP-RECVFROM:53,fork UDP-SENDTO:{!s}:53" class DNSForward: From b6c81d779af29abe38a8abac906de80d6a81ad3a Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 15 Aug 2019 08:51:42 +0000 Subject: [PATCH 3/4] Use own coredns for supervisor --- hassio/dns.py | 34 +++++++++++++++++++++++++++++++++- 1 file changed, 33 insertions(+), 1 deletion(-) diff --git a/hassio/dns.py b/hassio/dns.py index fb23930f0..fe8d9fdd5 100644 --- a/hassio/dns.py +++ b/hassio/dns.py @@ -19,6 +19,7 @@ from .validate import SCHEMA_DNS_CONFIG _LOGGER = logging.getLogger(__name__) COREDNS_TMPL: Path = Path(__file__).parents[0].joinpath("data/coredns.tmpl") +RESOLV_CONF: Path = Path("/etc/resolv.conf") class CoreDNS(JsonConfig, CoreSysAttributes): @@ -100,6 +101,9 @@ class CoreDNS(JsonConfig, CoreSysAttributes): # Start DNS forwarder self.sys_create_task(self.forwarder.start(self.sys_docker.network.dns)) + with suppress(CoreDNSError): + self._update_local_resolv() + # Start is not Running if await self.instance.is_running(): return @@ -293,7 +297,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes): """ return self.instance.is_fails() - async def repair(self): + async def repair(self) -> None: """Repair CoreDNS plugin.""" if await self.instance.exists(): return @@ -303,3 +307,31 @@ class CoreDNS(JsonConfig, CoreSysAttributes): await self.instance.install(self.version) except DockerAPIError: _LOGGER.error("Repairing of CoreDNS fails") + + def _update_local_resolv(self) -> None: + """Update local resolv file.""" + resolv_lines: List[str] = [] + nameserver = f"nameserver {self.sys_docker.network.dns!s}" + + # Read resolv config + try: + with RESOLV_CONF.open("r") as resolv: + for line in resolv.readlines(): + resolv_lines.append(line) + except OSError as err: + _LOGGER.error("Can't read local resolve: %s", err) + raise CoreDNSError() from None + + if nameserver in resolv_lines: + return + _LOGGER.info("Update resolv from Supervisor") + + # Write config back to resolv + resolv_lines.append(nameserver) + try: + with RESOLV_CONF.open("w") as resolv: + for line in resolv_lines: + resolv.write(line) + except OSError as err: + _LOGGER.error("Can't write local resolve: %s", err) + raise CoreDNSError() from None From 63c994845630c94b7b5403a2dec5f8da3ef9e7de Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Thu, 15 Aug 2019 11:05:08 +0200 Subject: [PATCH 4/4] Add CoreDNS to update process (#1212) --- hassio/dns.py | 5 +++++ hassio/tasks.py | 23 ++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/hassio/dns.py b/hassio/dns.py index fe8d9fdd5..949e07bfc 100644 --- a/hassio/dns.py +++ b/hassio/dns.py @@ -74,6 +74,11 @@ class CoreDNS(JsonConfig, CoreSysAttributes): """Return True if a task is in progress.""" return self.instance.in_progress + @property + def need_update(self) -> bool: + """Return True if an update is available.""" + return self.version != self.latest_version + async def load(self) -> None: """Load DNS setup.""" with suppress(CoreDNSError): diff --git a/hassio/tasks.py b/hassio/tasks.py index 344c0f230..13e21f5a4 100644 --- a/hassio/tasks.py +++ b/hassio/tasks.py @@ -11,12 +11,13 @@ HASS_WATCHDOG_API = "HASS_WATCHDOG_API" RUN_UPDATE_SUPERVISOR = 29100 RUN_UPDATE_ADDONS = 57600 -RUN_UPDATE_HASSOSCLI = 29100 +RUN_UPDATE_HASSOSCLI = 28100 +RUN_UPDATE_DNS = 30100 -RUN_RELOAD_ADDONS = 21600 +RUN_RELOAD_ADDONS = 10800 RUN_RELOAD_SNAPSHOTS = 72000 RUN_RELOAD_HOST = 72000 -RUN_RELOAD_UPDATER = 21600 +RUN_RELOAD_UPDATER = 7200 RUN_RELOAD_INGRESS = 930 RUN_WATCHDOG_HOMEASSISTANT_DOCKER = 15 @@ -50,6 +51,9 @@ class Tasks(CoreSysAttributes): self._update_hassos_cli, RUN_UPDATE_HASSOSCLI ) ) + self.jobs.add( + self.sys_scheduler.register_task(self._update_dns, RUN_UPDATE_DNS) + ) # Reload self.jobs.add( @@ -202,6 +206,19 @@ class Tasks(CoreSysAttributes): _LOGGER.info("Found new HassOS CLI version") await self.sys_hassos.update_cli() + async def _update_dns(self): + """Check and run update of CoreDNS plugin.""" + if not self.sys_dns.need_update: + return + + # don't perform an update on dev channel + if self.sys_dev: + _LOGGER.warning("Ignore CoreDNS update on dev channel!") + return + + _LOGGER.info("Found new CoreDNS plugin version") + await self.sys_dns.update() + async def _watchdog_dns_docker(self): """Check running state of Docker and start if they is close.""" # if Home Assistant is active