From 6031a60084bba2a469e75238c2b595b0efb957ba Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Wed, 17 May 2017 17:21:54 +0200 Subject: [PATCH] Add addon share and allow to mount host mnt (#58) * Add addon share and allow to mount host mnt * fix comments logs --- hassio/addons/validate.py | 2 +- hassio/bootstrap.py | 24 ++++++++++++++---------- hassio/config.py | 12 ++++++++++++ hassio/const.py | 2 ++ hassio/dock/addon.py | 16 +++++++++++++++- hassio/dock/homeassistant.py | 4 +++- 6 files changed, 47 insertions(+), 13 deletions(-) diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index d7499c563..d2f7eb27c 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -9,7 +9,7 @@ from ..const import ( 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' 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 6f2aeb6c8..4c39b9f5a 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -92,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 e406e8c9f..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): 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()