"""Init file for Hass.io Docker object.""" from ipaddress import IPv4Address import logging import os import docker from ..coresys import CoreSysAttributes from ..exceptions import DockerAPIError from .interface import DockerInterface _LOGGER = logging.getLogger(__name__) class DockerSupervisor(DockerInterface, CoreSysAttributes): """Docker Hass.io wrapper for Supervisor.""" @property def name(self) -> str: """Return name of Docker container.""" return os.environ["SUPERVISOR_NAME"] @property def ip_address(self) -> IPv4Address: """Return IP address of this container.""" return self.sys_docker.network.supervisor def _attach(self) -> None: """Attach to running docker container. Need run inside executor. """ try: docker_container = self.sys_docker.containers.get(self.name) except docker.errors.DockerException: raise DockerAPIError() from None self._meta = docker_container.attrs _LOGGER.info( "Attach to Supervisor %s with version %s", self.image, self.version ) # If already attach if docker_container in self.sys_docker.network.containers: return # Attach to network _LOGGER.info("Connect Supervisor to Hass.io Network") self.sys_docker.network.attach_container( docker_container, alias=["hassio"], ipv4=self.sys_docker.network.supervisor )