add support for custom image

This commit is contained in:
Pascal Vizeli 2017-04-16 11:39:54 +02:00
parent fe72e768ec
commit b5ec1e0cfd
5 changed files with 29 additions and 3 deletions

View File

@ -9,7 +9,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_OPTIONS,
ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER, STARTUP_BEFORE, BOOT_AUTO,
BOOT_MANUAL, DOCKER_REPO, ATTR_INSTALLED, ATTR_SCHEMA)
BOOT_MANUAL, DOCKER_REPO, ATTR_INSTALLED, ATTR_SCHEMA, ATTR_IMAGE)
from ..config import Config
from ..tools import read_json_file, write_json_file
@ -40,6 +40,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({
vol.Required(ATTR_SCHEMA): {
vol.Any: vol.In([V_STR, V_INT, V_FLOAT, V_BOOL])
},
vol.Optional(ATTR_IMAGE): vol.Match(r"\w*/\w*"),
})
@ -54,7 +55,12 @@ class AddonsData(Config):
def read_addons_repo(self):
"""Read data from addons repository."""
pattern = ADDONS_REPO_PATTERN.format(self.config.path_addons_repo)
self._read_addons_folder(self.config.path_addons_repo)
self._read_addons_folder(self.config.path_addons_custom)
def _read_addons_folder(self, folder):
"""Read data from addons folder."""
pattern = ADDONS_REPO_PATTERN.format(folder)
for addon in glob.iglob(pattern):
try:
@ -191,6 +197,14 @@ class AddonsData(Config):
"""Return ports of addon."""
return self._addons_data[addon].get(ATTR_PORTS)
def get_image(self, addon):
"""Return image name of addon."""
if ATTR_IMAGE is not in self._addons_data[addon]:
return "{}/addon_{}".format(
DOCKER_REPO, self.addons_data.get_slug(self.addon))
return self._addons_data[addon][ATTR_IMAGE]
def need_config(self, addon):
"""Return True if config map is needed."""
return self._addons_data[addon][ATTR_MAP_CONFIG]

View File

@ -32,6 +32,11 @@ def initialize_system_data(websession):
config.path_addons_data)
os.mkdir(config.path_addons_data)
if not os.path.isdir(config.path_addons_custom):
_LOGGER.info("Create Home-Assistant addon custom folder %s",
config.path_addons_custom)
os.mkdir(config.path_addons_custom)
return config

View File

@ -18,6 +18,7 @@ HASSIO_CURRENT = 'hassio_current'
ADDONS_REPO = "{}/addons"
ADDONS_DATA = "{}/addons_data"
ADDONS_CUSTOM = "{}/addons_custom"
UPSTREAM_BETA = 'upstream_beta'
@ -132,6 +133,11 @@ class CoreConfig(Config):
"""Return git repo path for addons."""
return ADDONS_REPO.format(HASSIO_SHARE)
@property
def path_addons_custom(self):
"""Return path for customs addons."""
return ADDONS_CUSTOM.format(HASSIO_SHARE)
@property
def path_addons_data(self):
"""Return root addon data folder."""

View File

@ -44,6 +44,7 @@ ATTR_OPTIONS = 'options'
ATTR_INSTALLED = 'installed'
ATTR_STATE = 'state'
ATTR_SCHEMA = 'schema'
ATTR_IMAGE = 'image'
STARTUP_BEFORE = 'before'
STARTUP_AFTER = 'after'

View File

@ -24,7 +24,7 @@ class DockerAddon(DockerBase):
@property
def docker_name(self):
"""Return name of docker container."""
return "addon_{}".format(self.addons_data.get_slug(self.addon))
return self.addons_data.get_image(self.addon)
def _run(self):
"""Run docker image.