diff --git a/hassio/addons/data.py b/hassio/addons/data.py index 4228c053a..c9e134823 100644 --- a/hassio/addons/data.py +++ b/hassio/addons/data.py @@ -16,7 +16,7 @@ from ..const import ( FILE_HASSIO_ADDONS, ATTR_NAME, ATTR_VERSION, ATTR_SLUG, ATTR_DESCRIPTON, ATTR_STARTUP, ATTR_BOOT, ATTR_MAP, ATTR_OPTIONS, ATTR_PORTS, BOOT_AUTO, ATTR_SCHEMA, ATTR_IMAGE, ATTR_REPOSITORY, ATTR_URL, ATTR_ARCH, - ATTR_LOCATON, ATTR_DEVICES) + ATTR_LOCATON, ATTR_DEVICES, ATTR_ENVIRONMENT) from ..config import Config from ..tools import read_json_file, write_json_file @@ -298,6 +298,10 @@ class AddonsData(Config): """Return devices of addon.""" return self._system_data[addon].get(ATTR_DEVICES) + def get_environment(self, addon): + """Return environment of addon.""" + return self._system_data[addon].get(ATTR_ENVIRONMENT) + def get_url(self, addon): """Return url of addon.""" if addon in self._addons_cache: diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 39d8f3c1a..d2f7eb27c 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -5,11 +5,11 @@ from ..const import ( ATTR_NAME, ATTR_VERSION, ATTR_SLUG, ATTR_DESCRIPTON, ATTR_STARTUP, ATTR_BOOT, ATTR_MAP, ATTR_OPTIONS, ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER, STARTUP_BEFORE, BOOT_AUTO, BOOT_MANUAL, ATTR_SCHEMA, ATTR_IMAGE, - ATTR_URL, ATTR_MAINTAINER, ATTR_ARCH, ATTR_DEVICES, ARCH_ARMHF, - ARCH_AARCH64, ARCH_AMD64, ARCH_I386) + ATTR_URL, ATTR_MAINTAINER, ATTR_ARCH, ATTR_DEVICES, ATTR_ENVIRONMENT, + ARCH_ARMHF, ARCH_AARCH64, ARCH_AMD64, ARCH_I386) -MAP_VOLUME = r"^(config|ssl|addons|backup)(?::(rw|:ro))?$" +MAP_VOLUME = r"^(config|ssl|addons|backup|share|mnt)(?::(rw|:ro))?$" V_STR = 'str' V_INT = 'int' @@ -39,6 +39,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_PORTS): dict, vol.Optional(ATTR_DEVICES): [vol.Match(r"^(.*):(.*):([rwm]{1,3})$")], vol.Optional(ATTR_MAP, default=[]): [vol.Match(MAP_VOLUME)], + vol.Optional(ATTR_ENVIRONMENT): {vol.Match(r"\w*"): vol.Coerce(str)}, vol.Required(ATTR_OPTIONS): dict, vol.Required(ATTR_SCHEMA): { vol.Coerce(str): vol.Any(ADDON_ELEMENT, [ diff --git a/hassio/bootstrap.py b/hassio/bootstrap.py index 89a37cdcf..81648467e 100644 --- a/hassio/bootstrap.py +++ b/hassio/bootstrap.py @@ -21,24 +21,24 @@ def initialize_system_data(websession): "Create Home-Assistant config folder %s", config.path_config) config.path_config.mkdir() - # homeassistant ssl folder + # hassio ssl folder if not config.path_ssl.is_dir(): - _LOGGER.info("Create Home-Assistant ssl folder %s", config.path_ssl) + _LOGGER.info("Create hassio ssl folder %s", config.path_ssl) config.path_ssl.mkdir() - # homeassistant addon data folder + # hassio addon data folder if not config.path_addons_data.is_dir(): - _LOGGER.info("Create Home-Assistant addon data folder %s", - config.path_addons_data) + _LOGGER.info( + "Create hassio addon data folder %s", config.path_addons_data) config.path_addons_data.mkdir(parents=True) if not config.path_addons_local.is_dir(): - _LOGGER.info("Create Home-Assistant addon local repository folder %s", + _LOGGER.info("Create hassio addon local repository folder %s", config.path_addons_local) config.path_addons_local.mkdir(parents=True) if not config.path_addons_git.is_dir(): - _LOGGER.info("Create Home-Assistant addon git repositories folder %s", + _LOGGER.info("Create hassio addon git repositories folder %s", config.path_addons_git) config.path_addons_git.mkdir(parents=True) @@ -47,12 +47,16 @@ def initialize_system_data(websession): config.path_addons_build) config.path_addons_build.mkdir(parents=True) - # homeassistant backup folder + # hassio backup folder if not config.path_backup.is_dir(): - _LOGGER.info("Create Home-Assistant backup folder %s", - config.path_backup) + _LOGGER.info("Create hassio backup folder %s", config.path_backup) config.path_backup.mkdir() + # share folder + if not config.path_share.is_dir(): + _LOGGER.info("Create hassio share folder %s", config.path_share) + config.path_share.mkdir() + return config diff --git a/hassio/config.py b/hassio/config.py index fad13e98a..fd295cbac 100644 --- a/hassio/config.py +++ b/hassio/config.py @@ -32,6 +32,8 @@ ADDONS_CUSTOM_LIST = 'addons_custom_list' BACKUP_DATA = PurePath("backup") +SHARE_DATA = PurePath("share") + UPSTREAM_BETA = 'upstream_beta' API_ENDPOINT = 'api_endpoint' @@ -233,6 +235,16 @@ class CoreConfig(Config): """Return root backup data folder extern for docker.""" return PurePath(self.path_extern_hassio, BACKUP_DATA) + @property + def path_share(self): + """Return root share data folder.""" + return Path(HASSIO_SHARE, SHARE_DATA) + + @property + def path_extern_share(self): + """Return root share data folder extern for docker.""" + return PurePath(self.path_extern_hassio, SHARE_DATA) + @property def addons_repositories(self): """Return list of addons custom repositories.""" diff --git a/hassio/const.py b/hassio/const.py index bac023dc2..4c39b9f5a 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -1,7 +1,7 @@ """Const file for HassIO.""" from pathlib import Path -HASSIO_VERSION = '0.28' +HASSIO_VERSION = '0.29' URL_HASSIO_VERSION = ('https://raw.githubusercontent.com/home-assistant/' 'hassio/master/version.json') @@ -76,6 +76,7 @@ ATTR_SESSION = 'session' ATTR_LOCATON = 'location' ATTR_BUILD = 'build' ATTR_DEVICES = 'devices' +ATTR_ENVIRONMENT = 'environment' STARTUP_BEFORE = 'before' STARTUP_AFTER = 'after' @@ -91,6 +92,8 @@ MAP_CONFIG = 'config' MAP_SSL = 'ssl' MAP_ADDONS = 'addons' MAP_BACKUP = 'backup' +MAP_SHARE = 'share' +MAP_MNT = 'mnt' ARCH_ARMHF = 'armhf' ARCH_AARCH64 = 'aarch64' diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 813890119..86b33eb5d 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -7,7 +7,9 @@ import docker from . import DockerBase from .util import dockerfile_template -from ..const import META_ADDON, MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP +from ..const import ( + META_ADDON, MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP, MAP_SHARE, + MAP_MNT) _LOGGER = logging.getLogger(__name__) @@ -61,6 +63,18 @@ class DockerAddon(DockerBase): 'bind': '/backup', 'mode': addon_mapping[MAP_BACKUP] }}) + if MAP_SHARE in addon_mapping: + volumes.update({ + str(self.config.path_extern_share): { + 'bind': '/share', 'mode': addon_mapping[MAP_SHARE] + }}) + + if MAP_MNT in addon_mapping: + volumes.update({ + '/mnt': { + 'bind': '/mnt', 'mode': addon_mapping[MAP_MNT] + }}) + return volumes def _run(self): @@ -82,6 +96,7 @@ class DockerAddon(DockerBase): network_mode='bridge', ports=self.addons_data.get_ports(self.addon), devices=self.addons_data.get_devices(self.addon), + environment=self.addons_data.get_environment(self.addon), volumes=self.volumes, ) diff --git a/hassio/dock/homeassistant.py b/hassio/dock/homeassistant.py index b981af0fb..588a0b1dd 100644 --- a/hassio/dock/homeassistant.py +++ b/hassio/dock/homeassistant.py @@ -47,7 +47,9 @@ class DockerHomeAssistant(DockerBase): str(self.config.path_extern_config): {'bind': '/config', 'mode': 'rw'}, str(self.config.path_extern_ssl): - {'bind': '/ssl', 'mode': 'rw'}, + {'bind': '/ssl', 'mode': 'ro'}, + str(self.config.path_extern_share): + {'bind': '/share', 'mode': 'rw'}, }) self.process_metadata() diff --git a/version.json b/version.json index 45026aae7..f8d19c78b 100644 --- a/version.json +++ b/version.json @@ -1,5 +1,5 @@ { - "hassio": "0.28", + "hassio": "0.29", "homeassistant": "0.44.2", "resinos": "0.7", "resinhup": "0.1",