mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-25 18:16:32 +00:00
save, for next working too
This commit is contained in:
parent
ae003e5b76
commit
082770256b
@ -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."""
|
||||||
|
@ -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'
|
||||||
|
@ -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'])
|
||||||
|
Loading…
x
Reference in New Issue
Block a user