DNS fallback to docker internal one (#1286)

* DNS fallback to docker internal one

* Fix log

* Fix style

* Fix startup handling
This commit is contained in:
Pascal Vizeli 2019-09-11 17:54:16 +02:00 committed by GitHub
parent c60d4bda92
commit 2672b800d4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 18 deletions

View File

@ -115,14 +115,15 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
# Start DNS forwarder # Start DNS forwarder
self.sys_create_task(self.forwarder.start(self.sys_docker.network.dns)) self.sys_create_task(self.forwarder.start(self.sys_docker.network.dns))
self._update_local_resolv()
with suppress(CoreDNSError): # Reset container configuration
self._update_local_resolv()
# Start is not Running
if await self.instance.is_running(): if await self.instance.is_running():
await self.restart() with suppress(DockerAPIError):
else: await self.instance.stop()
# Run CoreDNS
with suppress(CoreDNSError):
await self.start() await self.start()
async def unload(self) -> None: async def unload(self) -> None:
@ -148,9 +149,8 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
self.version = self.instance.version self.version = self.instance.version
self.save_data() self.save_data()
# Init Hosts / Run server # Init Hosts
self.write_hosts() self.write_hosts()
await self.start()
async def update(self, version: Optional[str] = None) -> None: async def update(self, version: Optional[str] = None) -> None:
"""Update CoreDNS plugin.""" """Update CoreDNS plugin."""
@ -207,6 +207,9 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
def _write_corefile(self) -> None: def _write_corefile(self) -> None:
"""Write CoreDNS config.""" """Write CoreDNS config."""
dns_servers: List[str] = []
# Load Template
try: try:
corefile_template: Template = Template(COREDNS_TMPL.read_text()) corefile_template: Template = Template(COREDNS_TMPL.read_text())
except OSError as err: except OSError as err:
@ -214,8 +217,8 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
raise CoreDNSError() from None raise CoreDNSError() from None
# Prepare DNS serverlist: Prio 1 Local, Prio 2 Manual, Prio 3 Fallback # Prepare DNS serverlist: Prio 1 Local, Prio 2 Manual, Prio 3 Fallback
dns_servers = [] local_dns: List[str] = self.sys_host.network.dns_servers or ["dns://127.0.0.11"]
for server in self.sys_host.network.dns_servers + self.servers + DNS_SERVERS: for server in local_dns + self.servers + DNS_SERVERS:
try: try:
DNS_URL(server) DNS_URL(server)
if server not in dns_servers: if server not in dns_servers:
@ -358,7 +361,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
resolv_lines.append(line.strip()) resolv_lines.append(line.strip())
except OSError as err: except OSError as err:
_LOGGER.warning("Can't read local resolv: %s", err) _LOGGER.warning("Can't read local resolv: %s", err)
raise CoreDNSError() from None return
if nameserver in resolv_lines: if nameserver in resolv_lines:
return return
@ -372,4 +375,4 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
resolv.write(f"{line}\n") resolv.write(f"{line}\n")
except OSError as err: except OSError as err:
_LOGGER.warning("Can't write local resolv: %s", err) _LOGGER.warning("Can't write local resolv: %s", err)
raise CoreDNSError() from None return

View File

@ -54,6 +54,7 @@ class DockerAPI:
self, self,
image: str, image: str,
version: str = "latest", version: str = "latest",
dns: bool = True,
ipv4: Optional[IPv4Address] = None, ipv4: Optional[IPv4Address] = None,
**kwargs: Dict[str, Any], **kwargs: Dict[str, Any],
) -> docker.models.containers.Container: ) -> docker.models.containers.Container:
@ -61,14 +62,15 @@ class DockerAPI:
Need run inside executor. Need run inside executor.
""" """
name: str = kwargs.get("name", image) name: str = kwargs.get("name")
network_mode: str = kwargs.get("network_mode") network_mode: str = kwargs.get("network_mode")
hostname: str = kwargs.get("hostname") hostname: str = kwargs.get("hostname")
# Setup DNS # Setup DNS
kwargs["dns"] = [str(self.network.dns)] if dns:
kwargs["dns_search"] = [DNS_SUFFIX] kwargs["dns"] = [str(self.network.dns)]
kwargs["domainname"] = DNS_SUFFIX kwargs["dns_search"] = [DNS_SUFFIX]
kwargs["domainname"] = DNS_SUFFIX
# Setup network # Setup network
if not network_mode: if not network_mode:

View File

@ -41,6 +41,7 @@ class DockerDNS(DockerInterface, CoreSysAttributes):
docker_container = self.sys_docker.run( docker_container = self.sys_docker.run(
self.image, self.image,
version=self.sys_dns.version, version=self.sys_dns.version,
dns=False,
ipv4=self.sys_docker.network.dns, ipv4=self.sys_docker.network.dns,
name=self.name, name=self.name,
hostname=self.name.replace("_", "-"), hostname=self.name.replace("_", "-"),

View File

@ -32,6 +32,8 @@ class SecretsManager(CoreSysAttributes):
"""Load secrets on start.""" """Load secrets on start."""
await self._read_secrets() await self._read_secrets()
_LOGGER.info("Load Home Assistant secrets: %s", len(self.secrets))
async def reload(self) -> None: async def reload(self) -> None:
"""Reload secrets.""" """Reload secrets."""
await self._read_secrets() await self._read_secrets()
@ -49,4 +51,4 @@ class SecretsManager(CoreSysAttributes):
except YAMLError as err: except YAMLError as err:
_LOGGER.error("Can't process Home Assistant secrets: %s", err) _LOGGER.error("Can't process Home Assistant secrets: %s", err)
else: else:
_LOGGER.info("Load Home Assistant secrets: %s", len(self.secrets)) _LOGGER.debug("Reload Home Assistant secrets: %s", len(self.secrets))

View File

@ -19,7 +19,7 @@ RUN_RELOAD_SNAPSHOTS = 72000
RUN_RELOAD_HOST = 72000 RUN_RELOAD_HOST = 72000
RUN_RELOAD_UPDATER = 7200 RUN_RELOAD_UPDATER = 7200
RUN_RELOAD_INGRESS = 930 RUN_RELOAD_INGRESS = 930
RUN_RELOAD_SECRETS = 630 RUN_RELOAD_SECRETS = 940
RUN_WATCHDOG_HOMEASSISTANT_DOCKER = 15 RUN_WATCHDOG_HOMEASSISTANT_DOCKER = 15
RUN_WATCHDOG_HOMEASSISTANT_API = 300 RUN_WATCHDOG_HOMEASSISTANT_API = 300