From 26d8dc0ec646309a865cc6a5b64a6809d9e13585 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Tue, 12 Dec 2017 09:10:39 +0100 Subject: [PATCH] Add support for host dbus system (#274) --- API.md | 1 + hassio/addons/addon.py | 8 +++++++- hassio/addons/validate.py | 4 +++- hassio/api/addons.py | 3 ++- hassio/const.py | 1 + hassio/dock/addon.py | 27 +++++++++++++++++---------- 6 files changed, 31 insertions(+), 13 deletions(-) diff --git a/API.md b/API.md index cfd65298e..835138be9 100644 --- a/API.md +++ b/API.md @@ -386,6 +386,7 @@ Get all available addons. "network": "{}|null", "host_network": "bool", "host_ipc": "bool", + "host_dbus": "bool", "privileged": ["NET_ADMIN", "SYS_ADMIN"], "devices": ["/dev/xy"], "logo": "bool", diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index e24653df9..4dc929b47 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -21,7 +21,8 @@ from ..const import ( STATE_STARTED, STATE_STOPPED, STATE_NONE, ATTR_USER, ATTR_SYSTEM, ATTR_STATE, ATTR_TIMEOUT, ATTR_AUTO_UPDATE, ATTR_NETWORK, ATTR_WEBUI, ATTR_HASSIO_API, ATTR_AUDIO, ATTR_AUDIO_OUTPUT, ATTR_AUDIO_INPUT, - ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, ATTR_HOST_IPC) + ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, ATTR_HOST_IPC, + ATTR_HOST_DBUS) from .util import check_installed from ..dock.addon import DockerAddon from ..tools import write_json_file, read_json_file @@ -248,6 +249,11 @@ class Addon(object): """Return True if addon run on host IPC namespace.""" return self._mesh[ATTR_HOST_IPC] + @property + def host_dbus(self): + """Return True if addon run on host DBUS.""" + return self._mesh[ATTR_HOST_DBUS] + @property def devices(self): """Return devices of addon.""" diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index d24c14535..8efaab9dc 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -16,7 +16,8 @@ from ..const import ( ATTR_LOCATON, ATTR_REPOSITORY, ATTR_TIMEOUT, ATTR_NETWORK, ATTR_UUID, ATTR_AUTO_UPDATE, ATTR_WEBUI, ATTR_AUDIO, ATTR_AUDIO_INPUT, ATTR_HOST_IPC, ATTR_AUDIO_OUTPUT, ATTR_HASSIO_API, ATTR_BUILD_FROM, ATTR_SQUASH, - ATTR_ARGS, ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY) + ATTR_ARGS, ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, + ATTR_HOST_DBUS) from ..validate import NETWORK_PORT, DOCKER_PORTS, ALSA_CHANNEL _LOGGER = logging.getLogger(__name__) @@ -93,6 +94,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Match(r"^(?:https?|\[PROTO:\w+\]):\/\/\[HOST\]:\[PORT:\d+\].*$"), vol.Optional(ATTR_HOST_NETWORK, default=False): vol.Boolean(), vol.Optional(ATTR_HOST_IPC, default=False): vol.Boolean(), + vol.Optional(ATTR_HOST_DBUS, default=False): vol.Boolean(), vol.Optional(ATTR_DEVICES): [vol.Match(r"^(.*):(.*):([rwm]{1,3})$")], vol.Optional(ATTR_TMPFS): vol.Match(r"^size=(\d)*[kmg](,uid=\d{1,4})?(,rw)?$"), diff --git a/hassio/api/addons.py b/hassio/api/addons.py index 0e9268168..bdb4512ee 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -14,7 +14,7 @@ from ..const import ( ATTR_INSTALLED, ATTR_LOGO, ATTR_WEBUI, ATTR_DEVICES, ATTR_PRIVILEGED, ATTR_AUDIO, ATTR_AUDIO_INPUT, ATTR_AUDIO_OUTPUT, ATTR_HASSIO_API, ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, BOOT_AUTO, BOOT_MANUAL, - ATTR_CHANGELOG, ATTR_HOST_IPC, + ATTR_CHANGELOG, ATTR_HOST_IPC, ATTR_HOST_DBUS, CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY, CONTENT_TYPE_TEXT) from ..validate import DOCKER_PORTS @@ -121,6 +121,7 @@ class APIAddons(object): ATTR_NETWORK: addon.ports, ATTR_HOST_NETWORK: addon.host_network, ATTR_HOST_IPC: addon.host_ipc, + ATTR_HOST_DBUS: addon.host_dbus, ATTR_PRIVILEGED: addon.privileged, ATTR_DEVICES: self._pretty_devices(addon), ATTR_LOGO: addon.with_logo, diff --git a/hassio/const.py b/hassio/const.py index ba9843525..90e3b45c1 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -103,6 +103,7 @@ ATTR_DEVICES = 'devices' ATTR_ENVIRONMENT = 'environment' ATTR_HOST_NETWORK = 'host_network' ATTR_HOST_IPC = 'host_ipc' +ATTR_HOST_DBUS = 'host_dbus' ATTR_NETWORK = 'network' ATTR_TMPFS = 'tmpfs' ATTR_PRIVILEGED = 'privileged' diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 453f11cae..73c943279 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -140,7 +140,7 @@ class DockerAddon(DockerInterface): """Generate volumes for mappings.""" volumes = { str(self.addon.path_extern_data): { - 'bind': '/data', 'mode': 'rw' + 'bind': "/data", 'mode': 'rw' }} addon_mapping = self.addon.map_volumes @@ -149,44 +149,51 @@ class DockerAddon(DockerInterface): if MAP_CONFIG in addon_mapping: volumes.update({ str(self.config.path_extern_config): { - 'bind': '/config', 'mode': addon_mapping[MAP_CONFIG] + 'bind': "/config", 'mode': addon_mapping[MAP_CONFIG] }}) if MAP_SSL in addon_mapping: volumes.update({ str(self.config.path_extern_ssl): { - 'bind': '/ssl', 'mode': addon_mapping[MAP_SSL] + 'bind': "/ssl", 'mode': addon_mapping[MAP_SSL] }}) if MAP_ADDONS in addon_mapping: volumes.update({ str(self.config.path_extern_addons_local): { - 'bind': '/addons', 'mode': addon_mapping[MAP_ADDONS] + 'bind': "/addons", 'mode': addon_mapping[MAP_ADDONS] }}) if MAP_BACKUP in addon_mapping: volumes.update({ str(self.config.path_extern_backup): { - 'bind': '/backup', 'mode': addon_mapping[MAP_BACKUP] + '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] + 'bind': "/share", 'mode': addon_mapping[MAP_SHARE] }}) # init other hardware mappings if self.addon.with_gpio: volumes.update({ - '/sys/class/gpio': { - 'bind': '/sys/class/gpio', 'mode': "rw" + "/sys/class/gpio": { + 'bind': "/sys/class/gpio", 'mode': 'rw' }, - '/sys/devices/platform/soc': { - 'bind': '/sys/devices/platform/soc', 'mode': "rw" + "/sys/devices/platform/soc": { + 'bind': "/sys/devices/platform/soc", 'mode': 'rw' }, }) + # host dbus system + if self.addon.host_dbus: + volumes.update({ + "/var/run/dbus": { + 'bind': "/var/run/dbus", 'mode': 'rw' + }}) + return volumes def _run(self):