From 082770256bb064a30e6a458d9b15d212c799bc5b Mon Sep 17 00:00:00 2001 From: pvizeli Date: Mon, 10 Apr 2017 17:22:26 +0200 Subject: [PATCH] save, for next working too --- hassio/addons/config.py | 28 +++++++++++++++++++++++++++- hassio/const.py | 1 - hassio/dock/addon.py | 32 ++++++++++++++++++++++---------- 3 files changed, 49 insertions(+), 12 deletions(-) diff --git a/hassio/addons/config.py b/hassio/addons/config.py index b48c5864d..211cbb6ab 100644 --- a/hassio/addons/config.py +++ b/hassio/addons/config.py @@ -29,7 +29,6 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_PORTS): dict, vol.Required(ATTR_MAP_CONFIG): vol.Boolean(), vol.Required(ATTR_MAP_SSL): vol.Boolean(), - vol.Required(ATTR_MAP_DATA): vol.Boolean(), vol.Required(ATTR_OPTIONS): dict, }) @@ -61,3 +60,30 @@ class AddonsConfig(Config): except vol.Invalid as ex: _LOGGER.warnign("Can't read %s -> %s.", addon, humanize_error(addon_config, ex)) + + def get_slug(self, addon): + """Return slug of addon.""" + return self._addons_data[addon][ATTR_SLUG] + + def get_ports(self, addon): + """Return ports of addon.""" + return self._addons_data[addon].get(ATTR_PORTS) + + def need_config(self, addon): + """Return True if config map is needed.""" + return self._addons_data[addon][ATTR_MAP_CONFIG] + + def need_ssl(self, addon): + """Return True if ssl map is needed.""" + return self._addons_data[addon][ATTR_MAP_SSL] + + def need_data(self, addon): + """Return True if data map is needed.""" + return self._addons_data[addon][ATTR_MAP_DATA] + + def path_data(self, addon): + """Return addon data path inside supervisor.""" + + + def path_data_docker(self, addon): + """Return addon data path external for docker.""" diff --git a/hassio/const.py b/hassio/const.py index 4d561d958..680d270c9 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -36,7 +36,6 @@ ATTR_BOOT = 'boot' ATTR_PORTS = 'ports' ATTR_MAP_CONFIG = 'map_config' ATTR_MAP_SSL = 'map_ssl' -ATTR_MAP_DATA = 'map_data' ATTR_OPTIONS = 'options' ATTR_INSTALLED = 'installed' ATTR_STATE = 'state' diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 97665573b..9f8bdc2f4 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -4,7 +4,6 @@ import logging import docker from . import DockerBase -from ..const import ATTR_SLUG, ATTR_PORTS from ..tools import get_version_from_env _LOGGER = logging.getLogger(__name__) @@ -15,15 +14,16 @@ HASS_DOCKER_NAME = 'homeassistant' class DockerHomeAssistant(DockerBase): """Docker hassio wrapper for HomeAssistant.""" - def __init__(self, config, loop, dock, addon_config, image): + def __init__(self, config, loop, dock, addon_config, addon, image): """Initialize docker homeassistant wrapper.""" super().__init__(config, loop, dock, image=image) + self.addon = addon self.addon_config @property def docker_name(self): """Return name of docker container.""" - return "addon_{}".format(self.addon_config[ATTR_SLUG]) + return "addon_{}".format(self.addon_config.get_slug(self.addon)) def _run(self): """Run docker image. @@ -36,23 +36,35 @@ class DockerHomeAssistant(DockerBase): # cleanup old container self._stop() + # volumes + volumes = { + self.addon_config.path_data_docker(self.addon): { + 'bind': '/data', 'mode': 'rw' + }} + if self.addon_config.need_config(self.addon): + volumes.update({ + self.config.path_config_docker: { + 'bind': '/config', 'mode': 'rw' + }}) + if self.addon_config.need_ssl(self.addon): + volumes.update({ + self.config.path_ssl_docker: { + 'bind': '/ssl', 'mode': 'rw' + }}) + try: self.container = self.dock.containers.run( self.image, name=self.docker_name, detach=True, network_mode='bridge', - ports=self.addon_config[ATTR_PORTS], + ports=self.addon_config.get_ports(self.addon), restart_policy={ "Name": "on-failure", "MaximumRetryCount": 10, }, - volumes={ - self.config.path_config_docker: - {'bind': '/config', 'mode': 'rw'}, - self.config.path_ssl_docker: - {'bind': '/ssl', 'mode': 'rw'}, - }) + volumes=volumes, + ) self.version = get_version_from_env( self.container.attrs['Config']['Env'])