diff --git a/API.md b/API.md index f15e7b374..de8aca967 100644 --- a/API.md +++ b/API.md @@ -482,6 +482,7 @@ Get all available addons. "webui": "null|http(s)://[HOST]:port/xy/zx", "gpio": "bool", "devicetree": "bool", + "docker_api": "bool", "audio": "bool", "audio_input": "null|0,0", "audio_output": "null|0,0", diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index bc0383fab..6dac66d0d 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -25,8 +25,8 @@ from ..const import ( ATTR_HASSIO_API, ATTR_AUDIO, ATTR_AUDIO_OUTPUT, ATTR_AUDIO_INPUT, ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, ATTR_HOST_IPC, ATTR_HOST_DBUS, ATTR_AUTO_UART, ATTR_DISCOVERY, ATTR_SERVICES, - ATTR_APPARMOR, ATTR_DEVICETREE, SECURITY_PROFILE, SECURITY_DISABLE, - SECURITY_DEFAULT) + ATTR_APPARMOR, ATTR_DEVICETREE, ATTR_DOCKER_API, SECURITY_PROFILE, + SECURITY_DISABLE, SECURITY_DEFAULT) from ..coresys import CoreSysAttributes from ..docker.addon import DockerAddon from ..utils.json import write_json_file, read_json_file @@ -335,6 +335,11 @@ class Addon(CoreSysAttributes): """Return if the add-on don't support hass labels.""" return self._mesh.get(ATTR_LEGACY) + @property + def with_docker_api(self): + """Return if the add-on need read-only docker API access.""" + return self._mesh.get(ATTR_DOCKER_API) + @property def access_hassio_api(self): """Return True if the add-on access to hassio api.""" diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index a26a983c9..008ad3fb1 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -18,7 +18,7 @@ from ..const import ( ATTR_AUDIO_OUTPUT, ATTR_HASSIO_API, ATTR_BUILD_FROM, ATTR_SQUASH, ATTR_ARGS, ATTR_GPIO, ATTR_HOMEASSISTANT_API, ATTR_STDIN, ATTR_LEGACY, ATTR_HOST_DBUS, ATTR_AUTO_UART, ATTR_SERVICES, ATTR_DISCOVERY, - ATTR_APPARMOR, ATTR_DEVICETREE) + ATTR_APPARMOR, ATTR_DEVICETREE, ATTR_DOCKER_API) from ..validate import NETWORK_PORT, DOCKER_PORTS, ALSA_DEVICE _LOGGER = logging.getLogger(__name__) @@ -117,6 +117,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_HOMEASSISTANT_API, default=False): vol.Boolean(), vol.Optional(ATTR_STDIN, default=False): vol.Boolean(), vol.Optional(ATTR_LEGACY, default=False): vol.Boolean(), + vol.Optional(ATTR_DOCKER_API, default=False): vol.Boolean(), vol.Optional(ATTR_SERVICES): [vol.Match(RE_SERVICE)], vol.Optional(ATTR_DISCOVERY): [vol.Match(RE_DISCOVERY)], vol.Required(ATTR_OPTIONS): dict, diff --git a/hassio/api/addons.py b/hassio/api/addons.py index badfb0489..12fcc732b 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -17,7 +17,7 @@ from ..const import ( ATTR_CHANGELOG, ATTR_HOST_IPC, ATTR_HOST_DBUS, ATTR_LONG_DESCRIPTION, ATTR_CPU_PERCENT, ATTR_MEMORY_LIMIT, ATTR_MEMORY_USAGE, ATTR_NETWORK_TX, ATTR_NETWORK_RX, ATTR_BLK_READ, ATTR_BLK_WRITE, ATTR_ICON, ATTR_SERVICES, - ATTR_DISCOVERY, ATTR_APPARMOR, ATTR_DEVICETREE, + ATTR_DISCOVERY, ATTR_APPARMOR, ATTR_DEVICETREE, ATTR_DOCKER_API, CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY, CONTENT_TYPE_TEXT) from ..coresys import CoreSysAttributes from ..validate import DOCKER_PORTS, ALSA_DEVICE @@ -137,6 +137,7 @@ class APIAddons(CoreSysAttributes): ATTR_HOMEASSISTANT_API: addon.access_homeassistant_api, ATTR_GPIO: addon.with_gpio, ATTR_DEVICETREE: addon.with_devicetree, + ATTR_DOCKER_API: addon.with_docker_api, ATTR_AUDIO: addon.with_audio, ATTR_AUDIO_INPUT: addon.audio_input, ATTR_AUDIO_OUTPUT: addon.audio_output, diff --git a/hassio/const.py b/hassio/const.py index ca86a5fe2..dc1969c07 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -178,6 +178,7 @@ ATTR_HASSOS_CLI = 'hassos_cli' ATTR_VERSION_CLI = 'version_cli' ATTR_VERSION_CLI_LATEST = 'version_cli_latest' ATTR_REFRESH_TOKEN = 'refresh_token' +ATTR_DOCKER_API = 'docker_api' SERVICE_MQTT = 'mqtt' diff --git a/hassio/docker/addon.py b/hassio/docker/addon.py index a59956c15..1b858dbbe 100644 --- a/hassio/docker/addon.py +++ b/hassio/docker/addon.py @@ -222,6 +222,14 @@ class DockerAddon(DockerInterface): }, }) + # Docker API support + if self.addon.with_docker_api: + volumes.update({ + "/var/run/docker.sock": { + 'bind': "/var/run/docker.sock", 'mode': 'ro' + }, + }) + # Host dbus system if self.addon.host_dbus: volumes.update({