save, for next working too

This commit is contained in:
pvizeli 2017-04-10 17:22:26 +02:00 committed by Pascal Vizeli
parent ae003e5b76
commit 082770256b
3 changed files with 49 additions and 12 deletions

View File

@ -29,7 +29,6 @@ SCHEMA_ADDON_CONFIG = vol.Schema({
vol.Optional(ATTR_PORTS): dict, vol.Optional(ATTR_PORTS): dict,
vol.Required(ATTR_MAP_CONFIG): vol.Boolean(), vol.Required(ATTR_MAP_CONFIG): vol.Boolean(),
vol.Required(ATTR_MAP_SSL): vol.Boolean(), vol.Required(ATTR_MAP_SSL): vol.Boolean(),
vol.Required(ATTR_MAP_DATA): vol.Boolean(),
vol.Required(ATTR_OPTIONS): dict, vol.Required(ATTR_OPTIONS): dict,
}) })
@ -61,3 +60,30 @@ class AddonsConfig(Config):
except vol.Invalid as ex: except vol.Invalid as ex:
_LOGGER.warnign("Can't read %s -> %s.", addon, _LOGGER.warnign("Can't read %s -> %s.", addon,
humanize_error(addon_config, ex)) 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."""

View File

@ -36,7 +36,6 @@ ATTR_BOOT = 'boot'
ATTR_PORTS = 'ports' ATTR_PORTS = 'ports'
ATTR_MAP_CONFIG = 'map_config' ATTR_MAP_CONFIG = 'map_config'
ATTR_MAP_SSL = 'map_ssl' ATTR_MAP_SSL = 'map_ssl'
ATTR_MAP_DATA = 'map_data'
ATTR_OPTIONS = 'options' ATTR_OPTIONS = 'options'
ATTR_INSTALLED = 'installed' ATTR_INSTALLED = 'installed'
ATTR_STATE = 'state' ATTR_STATE = 'state'

View File

@ -4,7 +4,6 @@ import logging
import docker import docker
from . import DockerBase from . import DockerBase
from ..const import ATTR_SLUG, ATTR_PORTS
from ..tools import get_version_from_env from ..tools import get_version_from_env
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -15,15 +14,16 @@ HASS_DOCKER_NAME = 'homeassistant'
class DockerHomeAssistant(DockerBase): class DockerHomeAssistant(DockerBase):
"""Docker hassio wrapper for HomeAssistant.""" """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.""" """Initialize docker homeassistant wrapper."""
super().__init__(config, loop, dock, image=image) super().__init__(config, loop, dock, image=image)
self.addon = addon
self.addon_config self.addon_config
@property @property
def docker_name(self): def docker_name(self):
"""Return name of docker container.""" """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): def _run(self):
"""Run docker image. """Run docker image.
@ -36,23 +36,35 @@ class DockerHomeAssistant(DockerBase):
# cleanup old container # cleanup old container
self._stop() 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: try:
self.container = self.dock.containers.run( self.container = self.dock.containers.run(
self.image, self.image,
name=self.docker_name, name=self.docker_name,
detach=True, detach=True,
network_mode='bridge', network_mode='bridge',
ports=self.addon_config[ATTR_PORTS], ports=self.addon_config.get_ports(self.addon),
restart_policy={ restart_policy={
"Name": "on-failure", "Name": "on-failure",
"MaximumRetryCount": 10, "MaximumRetryCount": 10,
}, },
volumes={ volumes=volumes,
self.config.path_config_docker: )
{'bind': '/config', 'mode': 'rw'},
self.config.path_ssl_docker:
{'bind': '/ssl', 'mode': 'rw'},
})
self.version = get_version_from_env( self.version = get_version_from_env(
self.container.attrs['Config']['Env']) self.container.attrs['Config']['Env'])