mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-24 09:36:31 +00:00
Supervisor use own dns layer (#1610)
* Supervisor use own dns layer * Add logs
This commit is contained in:
parent
7b2377291f
commit
58155c35f9
5
supervisor/data/resolv.tmpl
Normal file
5
supervisor/data/resolv.tmpl
Normal file
@ -0,0 +1,5 @@
|
||||
search local.hass.io
|
||||
{% for server in servers %}
|
||||
nameserver {{ server }}
|
||||
{% endfor %}
|
||||
options ndots:0
|
@ -22,7 +22,8 @@ from .validate import dns_url, SCHEMA_DNS_CONFIG
|
||||
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||
|
||||
COREDNS_TMPL: Path = Path(__file__).parents[0].joinpath("data/coredns.tmpl")
|
||||
RESOLV_CONF: Path = Path("/etc/resolv.conf")
|
||||
RESOLV_TMPL: Path = Path(__file__).parents[0].joinpath("data/resolv.tmpl")
|
||||
HOST_RESOLV: Path = Path("/etc/resolv.conf")
|
||||
|
||||
|
||||
@attr.s
|
||||
@ -43,6 +44,7 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
self.instance: DockerDNS = DockerDNS(coresys)
|
||||
self.forwarder: DNSForward = DNSForward()
|
||||
self.coredns_template: Optional[jinja2.Template] = None
|
||||
self.resolv_template: Optional[jinja2.Template] = None
|
||||
|
||||
self._hosts: List[HostEntry] = []
|
||||
self._loop: bool = False
|
||||
@ -123,6 +125,10 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
self.coredns_template = jinja2.Template(COREDNS_TMPL.read_text())
|
||||
except OSError as err:
|
||||
_LOGGER.error("Can't read coredns.tmpl: %s", err)
|
||||
try:
|
||||
self.resolv_template = jinja2.Template(RESOLV_TMPL.read_text())
|
||||
except OSError as err:
|
||||
_LOGGER.error("Can't read coredns.tmpl: %s", err)
|
||||
|
||||
# Run CoreDNS
|
||||
with suppress(CoreDNSError):
|
||||
@ -131,6 +137,9 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
else:
|
||||
await self.start()
|
||||
|
||||
# Update supervisor
|
||||
self._write_resolv(HOST_RESOLV)
|
||||
|
||||
async def unload(self) -> None:
|
||||
"""Unload DNS forwarder."""
|
||||
await self.forwarder.stop()
|
||||
@ -375,3 +384,19 @@ class CoreDNS(JsonConfig, CoreSysAttributes):
|
||||
await self.instance.install(self.version)
|
||||
except DockerAPIError:
|
||||
_LOGGER.error("Repairing of CoreDNS fails")
|
||||
|
||||
def _write_resolv(self, resolv_conf: Path) -> None:
|
||||
"""Update/Write resolv.conf file."""
|
||||
nameservers = [f"{self.sys_docker.network.dns!s}", "127.0.0.11"]
|
||||
|
||||
# Read resolv config
|
||||
data = self.resolv_template.render(servers=nameservers)
|
||||
|
||||
# Write config back to resolv
|
||||
try:
|
||||
resolv_conf.write_text(data)
|
||||
except OSError as err:
|
||||
_LOGGER.warning("Can't write/update %s: %s", resolv_conf, err)
|
||||
return
|
||||
|
||||
_LOGGER.info("Updated %s", resolv_conf)
|
||||
|
Loading…
x
Reference in New Issue
Block a user