From 5c70d68262096ac782352eb2b74bbdcbc36e32f6 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Mon, 10 Apr 2017 22:08:57 +0200 Subject: [PATCH] Addons config support --- hassio/addons/__init__.py | 1 + hassio/addons/config.py | 13 +++++++++++-- hassio/config.py | 7 ++++++- hassio/const.py | 2 ++ hassio/dock/addon.py | 11 ++++++----- hassio/tools.py | 8 ++++++++ 6 files changed, 34 insertions(+), 8 deletions(-) diff --git a/hassio/addons/__init__.py b/hassio/addons/__init__.py index b42a39858..cf4361260 100644 --- a/hassio/addons/__init__.py +++ b/hassio/addons/__init__.py @@ -3,6 +3,7 @@ import logging from .config import AddonsConfig from .git import AddonsRepo +from ..docker.addon import DockerAddon _LOGGER = logging.getLogger(__name__) diff --git a/hassio/addons/config.py b/hassio/addons/config.py index 211cbb6ab..d16102bfd 100644 --- a/hassio/addons/config.py +++ b/hassio/addons/config.py @@ -10,7 +10,7 @@ from ..const import ( 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_OPTIONS, ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER, STARTUP_BEFORE, - BOOT_AUTO, BOOT_MANUAL) + BOOT_AUTO, BOOT_MANUAL, DOCKER_REPO) _LOGGER = logging.getLogger(__name__) @@ -61,6 +61,12 @@ class AddonsConfig(Config): _LOGGER.warnign("Can't read %s -> %s.", addon, 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): """Return slug of addon.""" return self._addons_data[addon][ATTR_SLUG] @@ -83,7 +89,10 @@ class AddonsConfig(Config): def path_data(self, addon): """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): """Return addon data path external for docker.""" + return "{}/{}".format(self.config.path_addons_data_docker, + self._addons_data[addon][ATTR_SLUG]) diff --git a/hassio/config.py b/hassio/config.py index d10f497dc..65905682c 100644 --- a/hassio/config.py +++ b/hassio/config.py @@ -4,7 +4,7 @@ import logging import os 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__) @@ -91,6 +91,11 @@ class CoreConfig(Config): """Set beta upstream mode.""" self._data[UPSTREAM_BETA] = bool(value) + @property + def hassio_arch(self): + """Return arch they run.""" + return get_arch_from_image(self.homeassistant_image) + @property def homeassistant_image(self): """Return docker homeassistant repository.""" diff --git a/hassio/const.py b/hassio/const.py index 680d270c9..0cdb868d3 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -8,6 +8,8 @@ URL_HASSIO_VERSION_BETA = \ URL_HASSIO_ADDONS = 'https://github.com/pvizeli/hassio-addons' +DOCKER_REPO = "pvizeli" + HASSIO_SHARE = "/data" RUN_UPDATE_INFO_TASKS = 28800 diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 9f8bdc2f4..510ae01f3 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -11,12 +11,13 @@ _LOGGER = logging.getLogger(__name__) HASS_DOCKER_NAME = 'homeassistant' -class DockerHomeAssistant(DockerBase): +class DockerAddon(DockerBase): """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.""" - super().__init__(config, loop, dock, image=image) + super().__init__( + config, loop, dock, image=addon_config.get_image(addon)) self.addon = addon self.addon_config @@ -45,12 +46,12 @@ class DockerHomeAssistant(DockerBase): 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( diff --git a/hassio/tools.py b/hassio/tools.py index 3368b58a1..e0033170e 100644 --- a/hassio/tools.py +++ b/hassio/tools.py @@ -12,6 +12,7 @@ from .const import URL_HASSIO_VERSION, URL_HASSIO_VERSION_BETA _LOGGER = logging.getLogger(__name__) _RE_VERSION = re.compile(r"VERSION=(.*)") +_IMAGE_ARCH = re.compile(r"([a-z0-9]*)-hassio-supervisor") 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) +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): """Extract Version from ENV list.""" for env in env_list: