Addons config support

This commit is contained in:
Pascal Vizeli 2017-04-10 22:08:57 +02:00
parent 082770256b
commit 5c70d68262
6 changed files with 34 additions and 8 deletions

View File

@ -3,6 +3,7 @@ import logging
from .config import AddonsConfig from .config import AddonsConfig
from .git import AddonsRepo from .git import AddonsRepo
from ..docker.addon import DockerAddon
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)

View File

@ -10,7 +10,7 @@ from ..const import (
FILE_HASSIO_ADDONS, ATTR_NAME, ATTR_VERSION, ATTR_SLUG, ATTR_DESCRIPTON, FILE_HASSIO_ADDONS, ATTR_NAME, ATTR_VERSION, ATTR_SLUG, ATTR_DESCRIPTON,
ATTR_STARTUP, ATTR_BOOT, ATTR_MAP_SSL, ATTR_MAP_CONFIG, ATTR_MAP_DATA, ATTR_STARTUP, ATTR_BOOT, ATTR_MAP_SSL, ATTR_MAP_CONFIG, ATTR_MAP_DATA,
ATTR_OPTIONS, ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER, STARTUP_BEFORE, ATTR_OPTIONS, ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER, STARTUP_BEFORE,
BOOT_AUTO, BOOT_MANUAL) BOOT_AUTO, BOOT_MANUAL, DOCKER_REPO)
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -61,6 +61,12 @@ class AddonsConfig(Config):
_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_image(self, addon):
"""Return name of addon docker image."""
return "{}/{}-addon-{}".format(
DOCKER_REPO, self.config.hassio_arch,
self._addons_data[addon][ATTR_SLUG])
def get_slug(self, addon): def get_slug(self, addon):
"""Return slug of addon.""" """Return slug of addon."""
return self._addons_data[addon][ATTR_SLUG] return self._addons_data[addon][ATTR_SLUG]
@ -83,7 +89,10 @@ class AddonsConfig(Config):
def path_data(self, addon): def path_data(self, addon):
"""Return addon data path inside supervisor.""" """Return addon data path inside supervisor."""
return "{}/{}".format(
self.config.path_addons_data, self._addons_data[addon][ATTR_SLUG])
def path_data_docker(self, addon): def path_data_docker(self, addon):
"""Return addon data path external for docker.""" """Return addon data path external for docker."""
return "{}/{}".format(self.config.path_addons_data_docker,
self._addons_data[addon][ATTR_SLUG])

View File

@ -4,7 +4,7 @@ import logging
import os import os
from .const import FILE_HASSIO_CONFIG, HASSIO_SHARE from .const import FILE_HASSIO_CONFIG, HASSIO_SHARE
from .tools import fetch_current_versions from .tools import fetch_current_versions, get_arch_from_image
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
@ -91,6 +91,11 @@ class CoreConfig(Config):
"""Set beta upstream mode.""" """Set beta upstream mode."""
self._data[UPSTREAM_BETA] = bool(value) self._data[UPSTREAM_BETA] = bool(value)
@property
def hassio_arch(self):
"""Return arch they run."""
return get_arch_from_image(self.homeassistant_image)
@property @property
def homeassistant_image(self): def homeassistant_image(self):
"""Return docker homeassistant repository.""" """Return docker homeassistant repository."""

View File

@ -8,6 +8,8 @@ URL_HASSIO_VERSION_BETA = \
URL_HASSIO_ADDONS = 'https://github.com/pvizeli/hassio-addons' URL_HASSIO_ADDONS = 'https://github.com/pvizeli/hassio-addons'
DOCKER_REPO = "pvizeli"
HASSIO_SHARE = "/data" HASSIO_SHARE = "/data"
RUN_UPDATE_INFO_TASKS = 28800 RUN_UPDATE_INFO_TASKS = 28800

View File

@ -11,12 +11,13 @@ _LOGGER = logging.getLogger(__name__)
HASS_DOCKER_NAME = 'homeassistant' HASS_DOCKER_NAME = 'homeassistant'
class DockerHomeAssistant(DockerBase): class DockerAddon(DockerBase):
"""Docker hassio wrapper for HomeAssistant.""" """Docker hassio wrapper for HomeAssistant."""
def __init__(self, config, loop, dock, addon_config, addon, image): def __init__(self, config, loop, dock, addon_config, addon):
"""Initialize docker homeassistant wrapper.""" """Initialize docker homeassistant wrapper."""
super().__init__(config, loop, dock, image=image) super().__init__(
config, loop, dock, image=addon_config.get_image(addon))
self.addon = addon self.addon = addon
self.addon_config self.addon_config
@ -45,12 +46,12 @@ class DockerHomeAssistant(DockerBase):
volumes.update({ volumes.update({
self.config.path_config_docker: { self.config.path_config_docker: {
'bind': '/config', 'mode': 'rw' 'bind': '/config', 'mode': 'rw'
}}) }})
if self.addon_config.need_ssl(self.addon): if self.addon_config.need_ssl(self.addon):
volumes.update({ volumes.update({
self.config.path_ssl_docker: { self.config.path_ssl_docker: {
'bind': '/ssl', 'mode': 'rw' 'bind': '/ssl', 'mode': 'rw'
}}) }})
try: try:
self.container = self.dock.containers.run( self.container = self.dock.containers.run(

View File

@ -12,6 +12,7 @@ from .const import URL_HASSIO_VERSION, URL_HASSIO_VERSION_BETA
_LOGGER = logging.getLogger(__name__) _LOGGER = logging.getLogger(__name__)
_RE_VERSION = re.compile(r"VERSION=(.*)") _RE_VERSION = re.compile(r"VERSION=(.*)")
_IMAGE_ARCH = re.compile(r"([a-z0-9]*)-hassio-supervisor")
async def fetch_current_versions(websession, beta=False): async def fetch_current_versions(websession, beta=False):
@ -29,6 +30,13 @@ async def fetch_current_versions(websession, beta=False):
_LOGGER.warning("Can't fetch versions from %s! %s", url, err) _LOGGER.warning("Can't fetch versions from %s! %s", url, err)
def get_arch_from_image(image):
"""Return arch from hassio image name."""
found = _IMAGE_ARCH.match(image)
if found:
return found.group(1)
def get_version_from_env(env_list): def get_version_from_env(env_list):
"""Extract Version from ENV list.""" """Extract Version from ENV list."""
for env in env_list: for env in env_list: