From ece6c644cf8ba301ad9c64257da27bcd3c568dc9 Mon Sep 17 00:00:00 2001 From: Pascal Vizeli Date: Sun, 10 Dec 2017 23:29:51 +0100 Subject: [PATCH] IPC (#267) * Update API.md * Update const.py * Update addon.py * Update validate.py * Update addon.py * Update addons.py * fix lint --- API.md | 3 +++ hassio/addons/addon.py | 7 ++++++- hassio/addons/validate.py | 3 ++- hassio/api/addons.py | 6 +++++- hassio/const.py | 1 + hassio/dock/addon.py | 7 +++++++ 6 files changed, 24 insertions(+), 3 deletions(-) diff --git a/API.md b/API.md index db9e103ec..dbd596b77 100644 --- a/API.md +++ b/API.md @@ -357,6 +357,8 @@ Get all available addons. "audio": "bool", "gpio": "bool", "stdin": "bool", + "host_ipc": "bool", + "host_network": "bool", "hassio_api": "bool", "homeassistant_api": "bool" } @@ -392,6 +394,7 @@ Get all available addons. "options": "{}", "network": "{}|null", "host_network": "bool", + "host_ipc": "bool", "privileged": ["NET_ADMIN", "SYS_ADMIN"], "devices": ["/dev/xy"], "logo": "bool", diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index d232c8ddb..0e0695d18 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -21,7 +21,7 @@ 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_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, ATTR_HOST_IPC) from .util import check_installed from ..dock.addon import DockerAddon from ..tools import write_json_file, read_json_file @@ -243,6 +243,11 @@ class Addon(object): """Return True if addon run on host network.""" return self._mesh[ATTR_HOST_NETWORK] + @property + def host_ipc(self): + """Return True if addon run on host IPC namespace.""" + return self._mesh[ATTR_HOST_IPC] + @property def devices(self): """Return devices of addon.""" diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 4d82b04e9..d24c14535 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -14,7 +14,7 @@ from ..const import ( ARCH_AARCH64, ARCH_AMD64, ARCH_I386, ATTR_TMPFS, ATTR_PRIVILEGED, ATTR_USER, ATTR_STATE, ATTR_SYSTEM, STATE_STARTED, STATE_STOPPED, ATTR_LOCATON, ATTR_REPOSITORY, ATTR_TIMEOUT, ATTR_NETWORK, ATTR_UUID, - ATTR_AUTO_UPDATE, ATTR_WEBUI, ATTR_AUDIO, ATTR_AUDIO_INPUT, + 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) from ..validate import NETWORK_PORT, DOCKER_PORTS, ALSA_CHANNEL @@ -92,6 +92,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_WEBUI): 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_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 dd8aad01c..0c158b748 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -13,7 +13,8 @@ from ..const import ( ATTR_SOURCE, ATTR_REPOSITORIES, ATTR_ADDONS, ATTR_ARCH, ATTR_MAINTAINER, 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_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_HOST_IPC, + BOOT_AUTO, BOOT_MANUAL, CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY) from ..validate import DOCKER_PORTS @@ -75,6 +76,8 @@ class APIAddons(object): ATTR_REPOSITORY: addon.repository, ATTR_BUILD: addon.need_build, ATTR_PRIVILEGED: addon.privileged, + ATTR_HOST_NETWORK: addon.host_network, + ATTR_HOST_IPC: addon.host_ipc, ATTR_DEVICES: self._pretty_devices(addon), ATTR_URL: addon.url, ATTR_LOGO: addon.with_logo, @@ -126,6 +129,7 @@ class APIAddons(object): ATTR_BUILD: addon.need_build, ATTR_NETWORK: addon.ports, ATTR_HOST_NETWORK: addon.host_network, + ATTR_HOST_IPC: addon.host_ipc, 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 56a102f66..0cbb4aff7 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -100,6 +100,7 @@ ATTR_BUILD = 'build' ATTR_DEVICES = 'devices' ATTR_ENVIRONMENT = 'environment' ATTR_HOST_NETWORK = 'host_network' +ATTR_HOST_IPC = 'host_ipc' ATTR_NETWORK = 'network' ATTR_TMPFS = 'tmpfs' ATTR_PRIVILEGED = 'privileged' diff --git a/hassio/dock/addon.py b/hassio/dock/addon.py index 881712d29..453f11cae 100644 --- a/hassio/dock/addon.py +++ b/hassio/dock/addon.py @@ -45,6 +45,12 @@ class DockerAddon(DockerInterface): """Return name of docker container.""" return "addon_{}".format(self.addon.slug) + @property + def ipc(self): + """Return the IPC namespace.""" + if self.addon.host_ipc: + return 'host' + @property def hostname(self): """Return slug/id of addon.""" @@ -204,6 +210,7 @@ class DockerAddon(DockerInterface): hostname=self.hostname, detach=True, init=True, + ipc_mode=self.ipc, stdin_open=self.addon.with_stdin, network_mode=self.network_mode, ports=self.ports,