mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-09 18:26:30 +00:00
Addons config support
This commit is contained in:
parent
082770256b
commit
5c70d68262
@ -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__)
|
||||||
|
|
||||||
|
@ -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])
|
||||||
|
@ -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."""
|
||||||
|
@ -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
|
||||||
|
@ -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(
|
||||||
|
@ -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:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user