mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-28 03:26:32 +00:00
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:
parent
c60d4bda92
commit
2672b800d4
@ -115,14 +115,15 @@ 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
|
||||
# Reset container configuration
|
||||
if await self.instance.is_running():
|
||||
await self.restart()
|
||||
else:
|
||||
with suppress(DockerAPIError):
|
||||
await self.instance.stop()
|
||||
|
||||
# Run CoreDNS
|
||||
with suppress(CoreDNSError):
|
||||
await self.start()
|
||||
|
||||
async def unload(self) -> None:
|
||||
@ -148,9 +149,8 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
self.version = self.instance.version
|
||||
self.save_data()
|
||||
|
||||
# Init Hosts / Run server
|
||||
# Init Hosts
|
||||
self.write_hosts()
|
||||
await self.start()
|
||||
|
||||
async def update(self, version: Optional[str] = None) -> None:
|
||||
"""Update CoreDNS plugin."""
|
||||
@ -207,6 +207,9 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
|
||||
def _write_corefile(self) -> None:
|
||||
"""Write CoreDNS config."""
|
||||
dns_servers: List[str] = []
|
||||
|
||||
# Load Template
|
||||
try:
|
||||
corefile_template: Template = Template(COREDNS_TMPL.read_text())
|
||||
except OSError as err:
|
||||
@ -214,8 +217,8 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
raise CoreDNSError() from None
|
||||
|
||||
# Prepare DNS serverlist: Prio 1 Local, Prio 2 Manual, Prio 3 Fallback
|
||||
dns_servers = []
|
||||
for server in self.sys_host.network.dns_servers + self.servers + DNS_SERVERS:
|
||||
local_dns: List[str] = self.sys_host.network.dns_servers or ["dns://127.0.0.11"]
|
||||
for server in local_dns + self.servers + DNS_SERVERS:
|
||||
try:
|
||||
DNS_URL(server)
|
||||
if server not in dns_servers:
|
||||
@ -358,7 +361,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
resolv_lines.append(line.strip())
|
||||
except OSError as err:
|
||||
_LOGGER.warning("Can't read local resolv: %s", err)
|
||||
raise CoreDNSError() from None
|
||||
return
|
||||
|
||||
if nameserver in resolv_lines:
|
||||
return
|
||||
@ -372,4 +375,4 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
resolv.write(f"{line}\n")
|
||||
except OSError as err:
|
||||
_LOGGER.warning("Can't write local resolv: %s", err)
|
||||
raise CoreDNSError() from None
|
||||
return
|
||||
|
@ -54,6 +54,7 @@ class DockerAPI:
|
||||
self,
|
||||
image: str,
|
||||
version: str = "latest",
|
||||
dns: bool = True,
|
||||
ipv4: Optional[IPv4Address] = None,
|
||||
**kwargs: Dict[str, Any],
|
||||
) -> docker.models.containers.Container:
|
||||
@ -61,11 +62,12 @@ class DockerAPI:
|
||||
|
||||
Need run inside executor.
|
||||
"""
|
||||
name: str = kwargs.get("name", image)
|
||||
name: str = kwargs.get("name")
|
||||
network_mode: str = kwargs.get("network_mode")
|
||||
hostname: str = kwargs.get("hostname")
|
||||
|
||||
# Setup DNS
|
||||
if dns:
|
||||
kwargs["dns"] = [str(self.network.dns)]
|
||||
kwargs["dns_search"] = [DNS_SUFFIX]
|
||||
kwargs["domainname"] = DNS_SUFFIX
|
||||
|
@ -41,6 +41,7 @@ class DockerDNS(DockerInterface, CoreSysAttributes):
|
||||
docker_container = self.sys_docker.run(
|
||||
self.image,
|
||||
version=self.sys_dns.version,
|
||||
dns=False,
|
||||
ipv4=self.sys_docker.network.dns,
|
||||
name=self.name,
|
||||
hostname=self.name.replace("_", "-"),
|
||||
|
@ -32,6 +32,8 @@ class SecretsManager(CoreSysAttributes):
|
||||
"""Load secrets on start."""
|
||||
await self._read_secrets()
|
||||
|
||||
_LOGGER.info("Load Home Assistant secrets: %s", len(self.secrets))
|
||||
|
||||
async def reload(self) -> None:
|
||||
"""Reload secrets."""
|
||||
await self._read_secrets()
|
||||
@ -49,4 +51,4 @@ class SecretsManager(CoreSysAttributes):
|
||||
except YAMLError as err:
|
||||
_LOGGER.error("Can't process Home Assistant secrets: %s", err)
|
||||
else:
|
||||
_LOGGER.info("Load Home Assistant secrets: %s", len(self.secrets))
|
||||
_LOGGER.debug("Reload Home Assistant secrets: %s", len(self.secrets))
|
||||
|
@ -19,7 +19,7 @@ RUN_RELOAD_SNAPSHOTS = 72000
|
||||
RUN_RELOAD_HOST = 72000
|
||||
RUN_RELOAD_UPDATER = 7200
|
||||
RUN_RELOAD_INGRESS = 930
|
||||
RUN_RELOAD_SECRETS = 630
|
||||
RUN_RELOAD_SECRETS = 940
|
||||
|
||||
RUN_WATCHDOG_HOMEASSISTANT_DOCKER = 15
|
||||
RUN_WATCHDOG_HOMEASSISTANT_API = 300
|
||||
|
Loading…
x
Reference in New Issue
Block a user