mirror of
				https://github.com/home-assistant/supervisor.git
				synced 2025-11-04 08:29:40 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			78 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			78 lines
		
	
	
		
			2.1 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
"""Init file for HassIO docker object."""
 | 
						|
import logging
 | 
						|
 | 
						|
import docker
 | 
						|
 | 
						|
from . import DockerBase
 | 
						|
 | 
						|
_LOGGER = logging.getLogger(__name__)
 | 
						|
 | 
						|
HASS_DOCKER_NAME = 'homeassistant'
 | 
						|
 | 
						|
 | 
						|
class DockerHomeAssistant(DockerBase):
 | 
						|
    """Docker hassio wrapper for HomeAssistant."""
 | 
						|
 | 
						|
    def __init__(self, config, loop, dock, data):
 | 
						|
        """Initialize docker homeassistant wrapper."""
 | 
						|
        super().__init__(config, loop, dock, image=data.image)
 | 
						|
        self.data = data
 | 
						|
 | 
						|
    @property
 | 
						|
    def name(self):
 | 
						|
        """Return name of docker container."""
 | 
						|
        return HASS_DOCKER_NAME
 | 
						|
 | 
						|
    @property
 | 
						|
    def devices(self):
 | 
						|
        """Create list of special device to map into docker."""
 | 
						|
        if not self.data.devices:
 | 
						|
            return
 | 
						|
 | 
						|
        devices = []
 | 
						|
        for device in self.data.devices:
 | 
						|
            devices.append("/dev/{0}:/dev/{0}:rwm".format(device))
 | 
						|
 | 
						|
        return devices
 | 
						|
 | 
						|
    def _run(self):
 | 
						|
        """Run docker image.
 | 
						|
 | 
						|
        Need run inside executor.
 | 
						|
        """
 | 
						|
        if self._is_running():
 | 
						|
            return
 | 
						|
 | 
						|
        # cleanup
 | 
						|
        self._stop()
 | 
						|
 | 
						|
        try:
 | 
						|
            self.dock.containers.run(
 | 
						|
                self.image,
 | 
						|
                name=self.name,
 | 
						|
                hostname=self.name,
 | 
						|
                detach=True,
 | 
						|
                privileged=True,
 | 
						|
                devices=self.devices,
 | 
						|
                network_mode='host',
 | 
						|
                environment={
 | 
						|
                    'HASSIO': self.config.api_endpoint,
 | 
						|
                    'TZ': self.config.timezone,
 | 
						|
                },
 | 
						|
                volumes={
 | 
						|
                    str(self.config.path_extern_config):
 | 
						|
                        {'bind': '/config', 'mode': 'rw'},
 | 
						|
                    str(self.config.path_extern_ssl):
 | 
						|
                        {'bind': '/ssl', 'mode': 'ro'},
 | 
						|
                    str(self.config.path_extern_share):
 | 
						|
                        {'bind': '/share', 'mode': 'rw'},
 | 
						|
                })
 | 
						|
 | 
						|
        except docker.errors.DockerException as err:
 | 
						|
            _LOGGER.error("Can't run %s -> %s", self.image, err)
 | 
						|
            return False
 | 
						|
 | 
						|
        _LOGGER.info(
 | 
						|
            "Start homeassistant %s with version %s", self.image, self.version)
 | 
						|
        return True
 |