mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-28 11:36: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
|
# 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))
|
||||||
|
|
||||||
with suppress(CoreDNSError):
|
|
||||||
self._update_local_resolv()
|
self._update_local_resolv()
|
||||||
|
|
||||||
# Start is not Running
|
# Reset container configuration
|
||||||
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
|
||||||
|
@ -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,11 +62,12 @@ 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
|
||||||
|
if dns:
|
||||||
kwargs["dns"] = [str(self.network.dns)]
|
kwargs["dns"] = [str(self.network.dns)]
|
||||||
kwargs["dns_search"] = [DNS_SUFFIX]
|
kwargs["dns_search"] = [DNS_SUFFIX]
|
||||||
kwargs["domainname"] = DNS_SUFFIX
|
kwargs["domainname"] = DNS_SUFFIX
|
||||||
|
@ -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("_", "-"),
|
||||||
|
@ -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))
|
||||||
|
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user