mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-08 17:56:33 +00:00
add support for custom image
This commit is contained in:
parent
fe72e768ec
commit
b5ec1e0cfd
@ -9,7 +9,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_OPTIONS,
|
ATTR_STARTUP, ATTR_BOOT, ATTR_MAP_SSL, ATTR_MAP_CONFIG, ATTR_OPTIONS,
|
||||||
ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER, STARTUP_BEFORE, BOOT_AUTO,
|
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 ..config import Config
|
||||||
from ..tools import read_json_file, write_json_file
|
from ..tools import read_json_file, write_json_file
|
||||||
|
|
||||||
@ -40,6 +40,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({
|
|||||||
vol.Required(ATTR_SCHEMA): {
|
vol.Required(ATTR_SCHEMA): {
|
||||||
vol.Any: vol.In([V_STR, V_INT, V_FLOAT, V_BOOL])
|
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):
|
def read_addons_repo(self):
|
||||||
"""Read data from addons repository."""
|
"""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):
|
for addon in glob.iglob(pattern):
|
||||||
try:
|
try:
|
||||||
@ -191,6 +197,14 @@ class AddonsData(Config):
|
|||||||
"""Return ports of addon."""
|
"""Return ports of addon."""
|
||||||
return self._addons_data[addon].get(ATTR_PORTS)
|
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):
|
def need_config(self, addon):
|
||||||
"""Return True if config map is needed."""
|
"""Return True if config map is needed."""
|
||||||
return self._addons_data[addon][ATTR_MAP_CONFIG]
|
return self._addons_data[addon][ATTR_MAP_CONFIG]
|
||||||
|
@ -32,6 +32,11 @@ def initialize_system_data(websession):
|
|||||||
config.path_addons_data)
|
config.path_addons_data)
|
||||||
os.mkdir(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
|
return config
|
||||||
|
|
||||||
|
|
||||||
|
@ -18,6 +18,7 @@ HASSIO_CURRENT = 'hassio_current'
|
|||||||
|
|
||||||
ADDONS_REPO = "{}/addons"
|
ADDONS_REPO = "{}/addons"
|
||||||
ADDONS_DATA = "{}/addons_data"
|
ADDONS_DATA = "{}/addons_data"
|
||||||
|
ADDONS_CUSTOM = "{}/addons_custom"
|
||||||
|
|
||||||
UPSTREAM_BETA = 'upstream_beta'
|
UPSTREAM_BETA = 'upstream_beta'
|
||||||
|
|
||||||
@ -132,6 +133,11 @@ class CoreConfig(Config):
|
|||||||
"""Return git repo path for addons."""
|
"""Return git repo path for addons."""
|
||||||
return ADDONS_REPO.format(HASSIO_SHARE)
|
return ADDONS_REPO.format(HASSIO_SHARE)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def path_addons_custom(self):
|
||||||
|
"""Return path for customs addons."""
|
||||||
|
return ADDONS_CUSTOM.format(HASSIO_SHARE)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def path_addons_data(self):
|
def path_addons_data(self):
|
||||||
"""Return root addon data folder."""
|
"""Return root addon data folder."""
|
||||||
|
@ -44,6 +44,7 @@ ATTR_OPTIONS = 'options'
|
|||||||
ATTR_INSTALLED = 'installed'
|
ATTR_INSTALLED = 'installed'
|
||||||
ATTR_STATE = 'state'
|
ATTR_STATE = 'state'
|
||||||
ATTR_SCHEMA = 'schema'
|
ATTR_SCHEMA = 'schema'
|
||||||
|
ATTR_IMAGE = 'image'
|
||||||
|
|
||||||
STARTUP_BEFORE = 'before'
|
STARTUP_BEFORE = 'before'
|
||||||
STARTUP_AFTER = 'after'
|
STARTUP_AFTER = 'after'
|
||||||
|
@ -24,7 +24,7 @@ class DockerAddon(DockerBase):
|
|||||||
@property
|
@property
|
||||||
def docker_name(self):
|
def docker_name(self):
|
||||||
"""Return name of docker container."""
|
"""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):
|
def _run(self):
|
||||||
"""Run docker image.
|
"""Run docker image.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user