From 47e45dfc9fe7a84ee94f66e96bb4b1db1e7f9864 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 16 May 2017 11:45:20 +0200 Subject: [PATCH 1/6] Pump version --- hassio/const.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/const.py b/hassio/const.py index d81e5360e..99bcd96da 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -1,7 +1,7 @@ """Const file for HassIO.""" from pathlib import Path -HASSIO_VERSION = '0.27' +HASSIO_VERSION = '0.28' URL_HASSIO_VERSION = ('https://raw.githubusercontent.com/home-assistant/' 'hassio/master/version.json') From 34c4acf199bde6cd38f2cab9d4f64493c9d176f9 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 16 May 2017 14:50:47 +0200 Subject: [PATCH 2/6] Add device support (#54) Add device support --- hassio/addons/data.py | 6 +++++- hassio/addons/validate.py | 3 ++- hassio/const.py | 1 + hassio/dock/addon.py | 1 + 4 files changed, 9 insertions(+), 2 deletions(-) diff --git a/hassio/addons/data.py b/hassio/addons/data.py index e4eae0a95..b423dbd35 100644 --- a/hassio/addons/data.py +++ b/hassio/addons/data.py @@ -14,7 +14,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, MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP, - ATTR_REPOSITORY, ATTR_URL, ATTR_ARCH, ATTR_LOCATON) + ATTR_REPOSITORY, ATTR_URL, ATTR_ARCH, ATTR_LOCATON, ATTR_DEVICES) from ..config import Config from ..tools import read_json_file, write_json_file @@ -290,6 +290,10 @@ class AddonsData(Config): """Return ports of addon.""" return self._system_data[addon].get(ATTR_PORTS) + def get_devices(self, addon): + """Return devices of addon.""" + return self._system_data[addon].get(ATTR_DEVICES) + 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 e3dcb40b4..e26527411 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -6,7 +6,7 @@ from ..const import ( ATTR_BOOT, ATTR_MAP, ATTR_OPTIONS, ATTR_PORTS, STARTUP_ONCE, STARTUP_AFTER, STARTUP_BEFORE, BOOT_AUTO, BOOT_MANUAL, ATTR_SCHEMA, ATTR_IMAGE, MAP_SSL, MAP_CONFIG, MAP_ADDONS, MAP_BACKUP, ATTR_URL, ATTR_MAINTAINER, ATTR_ARCH, - ARCH_ARMHF, ARCH_AARCH64, ARCH_AMD64, ARCH_I386) + ARCH_ARMHF, ARCH_AARCH64, ARCH_AMD64, ARCH_I386, ATTR_DEVICES) V_STR = 'str' V_INT = 'int' @@ -34,6 +34,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Required(ATTR_BOOT): vol.In([BOOT_AUTO, BOOT_MANUAL]), vol.Optional(ATTR_PORTS): dict, + vol.Optional(ATTR_DEVICES): [vol.Match(r"(.*):(.*):(rwm|rw|rm)")], vol.Optional(ATTR_MAP, default=[]): [ vol.In([MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP]) ], diff --git a/hassio/const.py b/hassio/const.py index 99bcd96da..bac023dc2 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -75,6 +75,7 @@ ATTR_INITIALIZE = 'initialize' ATTR_SESSION = 'session' ATTR_LOCATON = 'location' ATTR_BUILD = 'build' +ATTR_DEVICES = 'devices' STARTUP_BEFORE = 'before' STARTUP_AFTER = 'after' diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 679b594bf..e07cd140a 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -79,6 +79,7 @@ class DockerAddon(DockerBase): detach=True, network_mode='bridge', ports=self.addons_data.get_ports(self.addon), + devices=self.addons_data.get_devices(self.addon), volumes=self.volumes, ) From ebcc21370e2ab3686ec4b298c2c5952b19f2257e Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 16 May 2017 17:15:35 +0200 Subject: [PATCH 3/6] Add policy for mappings (#55) * Add policy for mappings * fix travis --- hassio/addons/data.py | 31 ++++++++++++++----------------- hassio/addons/validate.py | 13 +++++++------ hassio/dock/addon.py | 20 +++++++++++--------- 3 files changed, 32 insertions(+), 32 deletions(-) diff --git a/hassio/addons/data.py b/hassio/addons/data.py index b423dbd35..4228c053a 100644 --- a/hassio/addons/data.py +++ b/hassio/addons/data.py @@ -3,18 +3,20 @@ import copy import logging import json from pathlib import Path, PurePath +import re import voluptuous as vol from voluptuous.humanize import humanize_error from .util import extract_hash_from_path from .validate import ( - validate_options, SCHEMA_ADDON_CONFIG, SCHEMA_REPOSITORY_CONFIG) + validate_options, SCHEMA_ADDON_CONFIG, SCHEMA_REPOSITORY_CONFIG, + MAP_VOLUME) 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, MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP, - ATTR_REPOSITORY, ATTR_URL, ATTR_ARCH, ATTR_LOCATON, ATTR_DEVICES) + ATTR_SCHEMA, ATTR_IMAGE, ATTR_REPOSITORY, ATTR_URL, ATTR_ARCH, + ATTR_LOCATON, ATTR_DEVICES) from ..config import Config from ..tools import read_json_file, write_json_file @@ -26,6 +28,8 @@ USER = 'user' REPOSITORY_CORE = 'core' REPOSITORY_LOCAL = 'local' +RE_VOLUME = re.compile(MAP_VOLUME) + class AddonsData(Config): """Hold data for addons inside HassIO.""" @@ -327,21 +331,14 @@ class AddonsData(Config): ) return ATTR_IMAGE not in addon_data - def map_config(self, addon): - """Return True if config map is needed.""" - return MAP_CONFIG in self._system_data[addon][ATTR_MAP] + def map_volumes(self, addon): + """Return a dict of {volume: policy} from addon.""" + volumes = {} + for volume in self._system_data[addon][ATTR_MAP]: + result = RE_VOLUME.match(volume) + volumes[result.group(1)] = result.group(2) or 'ro' - def map_ssl(self, addon): - """Return True if ssl map is needed.""" - return MAP_SSL in self._system_data[addon][ATTR_MAP] - - def map_addons(self, addon): - """Return True if addons map is needed.""" - return MAP_ADDONS in self._system_data[addon][ATTR_MAP] - - def map_backup(self, addon): - """Return True if backup map is needed.""" - return MAP_BACKUP in self._system_data[addon][ATTR_MAP] + return volumes def path_data(self, addon): """Return addon data path inside supervisor.""" diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index e26527411..6bdfafc63 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -4,9 +4,12 @@ import voluptuous as vol 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, MAP_SSL, - MAP_CONFIG, MAP_ADDONS, MAP_BACKUP, ATTR_URL, ATTR_MAINTAINER, ATTR_ARCH, - ARCH_ARMHF, ARCH_AARCH64, ARCH_AMD64, ARCH_I386, ATTR_DEVICES) + 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) + + +MAP_VOLUME = r"^(config|ssl|addons|backup)(:rw|:ro)?$" V_STR = 'str' V_INT = 'int' @@ -35,9 +38,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.In([BOOT_AUTO, BOOT_MANUAL]), vol.Optional(ATTR_PORTS): dict, vol.Optional(ATTR_DEVICES): [vol.Match(r"(.*):(.*):(rwm|rw|rm)")], - vol.Optional(ATTR_MAP, default=[]): [ - vol.In([MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP]) - ], + vol.Optional(ATTR_MAP, default=[]): [vol.Match(MAP_VOLUME)], vol.Required(ATTR_OPTIONS): dict, vol.Required(ATTR_SCHEMA): { vol.Coerce(str): vol.Any(ADDON_ELEMENT, [ diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index e07cd140a..813890119 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -7,7 +7,7 @@ import docker from . import DockerBase from .util import dockerfile_template -from ..const import META_ADDON +from ..const import META_ADDON, MAP_CONFIG, MAP_SSL, MAP_ADDONS, MAP_BACKUP _LOGGER = logging.getLogger(__name__) @@ -35,28 +35,30 @@ class DockerAddon(DockerBase): 'bind': '/data', 'mode': 'rw' }} - if self.addons_data.map_config(self.addon): + addon_mapping = self.addons_data.map_volumes(self.addon) + + if MAP_CONFIG in addon_mapping: volumes.update({ str(self.config.path_extern_config): { - 'bind': '/config', 'mode': 'rw' + 'bind': '/config', 'mode': addon_mapping[MAP_CONFIG] }}) - if self.addons_data.map_ssl(self.addon): + if MAP_SSL in addon_mapping: volumes.update({ str(self.config.path_extern_ssl): { - 'bind': '/ssl', 'mode': 'rw' + 'bind': '/ssl', 'mode': addon_mapping[MAP_SSL] }}) - if self.addons_data.map_addons(self.addon): + if MAP_ADDONS in addon_mapping: volumes.update({ str(self.config.path_extern_addons_local): { - 'bind': '/addons', 'mode': 'rw' + 'bind': '/addons', 'mode': addon_mapping[MAP_ADDONS] }}) - if self.addons_data.map_backup(self.addon): + if MAP_BACKUP in addon_mapping: volumes.update({ str(self.config.path_extern_backup): { - 'bind': '/backup', 'mode': 'rw' + 'bind': '/backup', 'mode': addon_mapping[MAP_BACKUP] }}) return volumes From e7920bee2a39bf5221c89ecdfba9422836eb2749 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 16 May 2017 22:03:51 +0200 Subject: [PATCH 4/6] Fix group regex --- hassio/addons/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 6bdfafc63..0cd1aa4e5 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -9,7 +9,7 @@ from ..const import ( ARCH_AARCH64, ARCH_AMD64, ARCH_I386) -MAP_VOLUME = r"^(config|ssl|addons|backup)(:rw|:ro)?$" +MAP_VOLUME = r"^(config|ssl|addons|backup)(?::(rw|:ro))?$" V_STR = 'str' V_INT = 'int' From bd756e2a9c68496d21d8303393d20f9fdfb2a34d Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 16 May 2017 22:11:42 +0200 Subject: [PATCH 5/6] fix dev regex --- hassio/addons/validate.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 0cd1aa4e5..39d8f3c1a 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -37,7 +37,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Required(ATTR_BOOT): vol.In([BOOT_AUTO, BOOT_MANUAL]), vol.Optional(ATTR_PORTS): dict, - vol.Optional(ATTR_DEVICES): [vol.Match(r"(.*):(.*):(rwm|rw|rm)")], + vol.Optional(ATTR_DEVICES): [vol.Match(r"^(.*):(.*):([rwm]{1,3})$")], vol.Optional(ATTR_MAP, default=[]): [vol.Match(MAP_VOLUME)], vol.Required(ATTR_OPTIONS): dict, vol.Required(ATTR_SCHEMA): { From 3c7b962cf98b178ac0915d0d3abe16c6419450e5 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 16 May 2017 22:17:19 +0200 Subject: [PATCH 6/6] update hass.io --- version.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/version.json b/version.json index 27be93826..45026aae7 100644 --- a/version.json +++ b/version.json @@ -1,5 +1,5 @@ { - "hassio": "0.27", + "hassio": "0.28", "homeassistant": "0.44.2", "resinos": "0.7", "resinhup": "0.1",