diff --git a/API.md b/API.md index c1260f734..f423e3e6a 100644 --- a/API.md +++ b/API.md @@ -496,6 +496,7 @@ Get all available addons. "stdin": "bool", "webui": "null|http(s)://[HOST]:port/xy/zx", "gpio": "bool", + "kernel_modules": "bool", "devicetree": "bool", "docker_api": "bool", "audio": "bool", diff --git a/hassio/addons/addon.py b/hassio/addons/addon.py index 273c4b4f7..08a143243 100644 --- a/hassio/addons/addon.py +++ b/hassio/addons/addon.py @@ -28,7 +28,7 @@ from ..const import ( ATTR_HOST_DBUS, ATTR_AUTO_UART, ATTR_DISCOVERY, ATTR_SERVICES, ATTR_APPARMOR, ATTR_DEVICETREE, ATTR_DOCKER_API, ATTR_FULL_ACCESS, ATTR_PROTECTED, ATTR_ACCESS_TOKEN, ATTR_HOST_PID, ATTR_HASSIO_ROLE, - ATTR_MACHINE, ATTR_AUTH_API, + ATTR_MACHINE, ATTR_AUTH_API, ATTR_KERNEL_MODULES, SECURITY_PROFILE, SECURITY_DISABLE, SECURITY_DEFAULT) from ..coresys import CoreSysAttributes from ..docker.addon import DockerAddon @@ -401,6 +401,11 @@ class Addon(CoreSysAttributes): """Return True if the add-on access to GPIO interface.""" return self._mesh[ATTR_GPIO] + @property + def with_kernel_modules(self): + """Return True if the add-on access to kernel modules.""" + return self._mesh[ATTR_KERNEL_MODULES] + @property def with_full_access(self): """Return True if the add-on want full access to hardware.""" diff --git a/hassio/addons/validate.py b/hassio/addons/validate.py index 2476c2f10..81a1f43af 100644 --- a/hassio/addons/validate.py +++ b/hassio/addons/validate.py @@ -20,7 +20,7 @@ from ..const import ( ATTR_HOST_DBUS, ATTR_AUTO_UART, ATTR_SERVICES, ATTR_DISCOVERY, ATTR_APPARMOR, ATTR_DEVICETREE, ATTR_DOCKER_API, ATTR_PROTECTED, ATTR_FULL_ACCESS, ATTR_ACCESS_TOKEN, ATTR_HOST_PID, ATTR_HASSIO_ROLE, - ATTR_MACHINE, ATTR_AUTH_API, + ATTR_MACHINE, ATTR_AUTH_API, ATTR_KERNEL_MODULES, PRIVILEGED_NET_ADMIN, PRIVILEGED_SYS_ADMIN, PRIVILEGED_SYS_RAWIO, PRIVILEGED_IPC_LOCK, PRIVILEGED_SYS_TIME, PRIVILEGED_SYS_NICE, PRIVILEGED_SYS_RESOURCE, PRIVILEGED_SYS_PTRACE, PRIVILEGED_DAC_READ_SEARCH, @@ -142,6 +142,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema({ vol.Optional(ATTR_AUDIO, default=False): vol.Boolean(), vol.Optional(ATTR_GPIO, default=False): vol.Boolean(), vol.Optional(ATTR_DEVICETREE, default=False): vol.Boolean(), + vol.Optional(ATTR_KERNEL_MODULES, default=False): vol.Boolean(), vol.Optional(ATTR_HASSIO_API, default=False): vol.Boolean(), vol.Optional(ATTR_HASSIO_ROLE, default=ROLE_DEFAULT): vol.In(ROLE_ALL), vol.Optional(ATTR_HOMEASSISTANT_API, default=False): vol.Boolean(), diff --git a/hassio/api/addons.py b/hassio/api/addons.py index 000ff9d24..853c923cd 100644 --- a/hassio/api/addons.py +++ b/hassio/api/addons.py @@ -21,6 +21,7 @@ from ..const import ( ATTR_DISCOVERY, ATTR_APPARMOR, ATTR_DEVICETREE, ATTR_DOCKER_API, ATTR_FULL_ACCESS, ATTR_PROTECTED, ATTR_RATING, ATTR_HOST_PID, ATTR_HASSIO_ROLE, ATTR_MACHINE, ATTR_AVAILABLE, ATTR_AUTH_API, + ATTR_KERNEL_MODULES, CONTENT_TYPE_PNG, CONTENT_TYPE_BINARY, CONTENT_TYPE_TEXT, REQUEST_FROM) from ..coresys import CoreSysAttributes from ..validate import DOCKER_PORTS, ALSA_DEVICE @@ -152,6 +153,7 @@ class APIAddons(CoreSysAttributes): ATTR_AUTH_API: addon.access_auth_api, ATTR_HOMEASSISTANT_API: addon.access_homeassistant_api, ATTR_GPIO: addon.with_gpio, + ATTR_KERNEL_MODULES: addon.with_kernel_modules, ATTR_DEVICETREE: addon.with_devicetree, ATTR_DOCKER_API: addon.access_docker_api, ATTR_AUDIO: addon.with_audio, diff --git a/hassio/const.py b/hassio/const.py index 360c7ff0d..24fff6bd0 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -2,17 +2,16 @@ from pathlib import Path from ipaddress import ip_network -HASSIO_VERSION = '142' +HASSIO_VERSION = "142" URL_HASSIO_ADDONS = "https://github.com/home-assistant/hassio-addons" -URL_HASSIO_VERSION = \ - "https://s3.amazonaws.com/hassio-version/{channel}.json" -URL_HASSIO_APPARMOR = \ - "https://s3.amazonaws.com/hassio-version/apparmor.txt" +URL_HASSIO_VERSION = "https://s3.amazonaws.com/hassio-version/{channel}.json" +URL_HASSIO_APPARMOR = "https://s3.amazonaws.com/hassio-version/apparmor.txt" URL_HASSOS_OTA = ( "https://github.com/home-assistant/hassos/releases/download/" - "{version}/hassos_{board}-{version}.raucb") + "{version}/hassos_{board}-{version}.raucb" +) HASSIO_DATA = Path("/data") @@ -26,239 +25,240 @@ FILE_HASSIO_DISCOVERY = Path(HASSIO_DATA, "discovery.json") SOCKET_DOCKER = Path("/var/run/docker.sock") -DOCKER_NETWORK = 'hassio' -DOCKER_NETWORK_MASK = ip_network('172.30.32.0/23') -DOCKER_NETWORK_RANGE = ip_network('172.30.33.0/24') +DOCKER_NETWORK = "hassio" +DOCKER_NETWORK_MASK = ip_network("172.30.32.0/23") +DOCKER_NETWORK_RANGE = ip_network("172.30.33.0/24") -LABEL_VERSION = 'io.hass.version' -LABEL_ARCH = 'io.hass.arch' -LABEL_TYPE = 'io.hass.type' -LABEL_MACHINE = 'io.hass.machine' +LABEL_VERSION = "io.hass.version" +LABEL_ARCH = "io.hass.arch" +LABEL_TYPE = "io.hass.type" +LABEL_MACHINE = "io.hass.machine" -META_ADDON = 'addon' -META_SUPERVISOR = 'supervisor' -META_HOMEASSISTANT = 'homeassistant' +META_ADDON = "addon" +META_SUPERVISOR = "supervisor" +META_HOMEASSISTANT = "homeassistant" -JSON_RESULT = 'result' -JSON_DATA = 'data' -JSON_MESSAGE = 'message' +JSON_RESULT = "result" +JSON_DATA = "data" +JSON_MESSAGE = "message" -RESULT_ERROR = 'error' -RESULT_OK = 'ok' +RESULT_ERROR = "error" +RESULT_OK = "ok" -CONTENT_TYPE_BINARY = 'application/octet-stream' -CONTENT_TYPE_PNG = 'image/png' -CONTENT_TYPE_JSON = 'application/json' -CONTENT_TYPE_TEXT = 'text/plain' -CONTENT_TYPE_TAR = 'application/tar' -CONTENT_TYPE_URL = 'application/x-www-form-urlencoded' -HEADER_HA_ACCESS = 'x-ha-access' -HEADER_TOKEN = 'x-hassio-key' +CONTENT_TYPE_BINARY = "application/octet-stream" +CONTENT_TYPE_PNG = "image/png" +CONTENT_TYPE_JSON = "application/json" +CONTENT_TYPE_TEXT = "text/plain" +CONTENT_TYPE_TAR = "application/tar" +CONTENT_TYPE_URL = "application/x-www-form-urlencoded" +HEADER_HA_ACCESS = "x-ha-access" +HEADER_TOKEN = "x-hassio-key" -ENV_TOKEN = 'HASSIO_TOKEN' -ENV_TIME = 'TZ' +ENV_TOKEN = "HASSIO_TOKEN" +ENV_TIME = "TZ" -REQUEST_FROM = 'HASSIO_FROM' +REQUEST_FROM = "HASSIO_FROM" -ATTR_MACHINE = 'machine' -ATTR_WAIT_BOOT = 'wait_boot' -ATTR_DEPLOYMENT = 'deployment' -ATTR_WATCHDOG = 'watchdog' -ATTR_CHANGELOG = 'changelog' -ATTR_DATE = 'date' -ATTR_ARCH = 'arch' -ATTR_LONG_DESCRIPTION = 'long_description' -ATTR_HOSTNAME = 'hostname' -ATTR_TIMEZONE = 'timezone' -ATTR_ARGS = 'args' -ATTR_OPERATING_SYSTEM = 'operating_system' -ATTR_CHASSIS = 'chassis' -ATTR_TYPE = 'type' -ATTR_SOURCE = 'source' -ATTR_FEATURES = 'features' -ATTR_ADDONS = 'addons' -ATTR_PROVIDERS = 'providers' -ATTR_VERSION = 'version' -ATTR_VERSION_LATEST = 'version_latest' -ATTR_AUTO_UART = 'auto_uart' -ATTR_LAST_BOOT = 'last_boot' -ATTR_LAST_VERSION = 'last_version' -ATTR_CHANNEL = 'channel' -ATTR_NAME = 'name' -ATTR_SLUG = 'slug' -ATTR_DESCRIPTON = 'description' -ATTR_STARTUP = 'startup' -ATTR_BOOT = 'boot' -ATTR_PORTS = 'ports' -ATTR_PORT = 'port' -ATTR_SSL = 'ssl' -ATTR_MAP = 'map' -ATTR_WEBUI = 'webui' -ATTR_OPTIONS = 'options' -ATTR_INSTALLED = 'installed' -ATTR_DETACHED = 'detached' -ATTR_STATE = 'state' -ATTR_SCHEMA = 'schema' -ATTR_IMAGE = 'image' -ATTR_ICON = 'icon' -ATTR_LOGO = 'logo' -ATTR_STDIN = 'stdin' -ATTR_ADDONS_REPOSITORIES = 'addons_repositories' -ATTR_REPOSITORY = 'repository' -ATTR_REPOSITORIES = 'repositories' -ATTR_URL = 'url' -ATTR_MAINTAINER = 'maintainer' -ATTR_PASSWORD = 'password' -ATTR_TOTP = 'totp' -ATTR_INITIALIZE = 'initialize' -ATTR_LOCATON = 'location' -ATTR_BUILD = 'build' -ATTR_DEVICES = 'devices' -ATTR_ENVIRONMENT = 'environment' -ATTR_HOST_NETWORK = 'host_network' -ATTR_HOST_PID = 'host_pid' -ATTR_HOST_IPC = 'host_ipc' -ATTR_HOST_DBUS = 'host_dbus' -ATTR_NETWORK = 'network' -ATTR_TMPFS = 'tmpfs' -ATTR_PRIVILEGED = 'privileged' -ATTR_USER = 'user' -ATTR_SYSTEM = 'system' -ATTR_SNAPSHOTS = 'snapshots' -ATTR_HOMEASSISTANT = 'homeassistant' -ATTR_HASSIO = 'hassio' -ATTR_HASSIO_API = 'hassio_api' -ATTR_HOMEASSISTANT_API = 'homeassistant_api' -ATTR_UUID = 'uuid' -ATTR_FOLDERS = 'folders' -ATTR_SIZE = 'size' -ATTR_TYPE = 'type' -ATTR_TIMEOUT = 'timeout' -ATTR_AUTO_UPDATE = 'auto_update' -ATTR_CUSTOM = 'custom' -ATTR_AUDIO = 'audio' -ATTR_AUDIO_INPUT = 'audio_input' -ATTR_AUDIO_OUTPUT = 'audio_output' -ATTR_INPUT = 'input' -ATTR_OUTPUT = 'output' -ATTR_DISK = 'disk' -ATTR_SERIAL = 'serial' -ATTR_SECURITY = 'security' -ATTR_BUILD_FROM = 'build_from' -ATTR_SQUASH = 'squash' -ATTR_GPIO = 'gpio' -ATTR_LEGACY = 'legacy' -ATTR_ADDONS_CUSTOM_LIST = 'addons_custom_list' -ATTR_CPU_PERCENT = 'cpu_percent' -ATTR_NETWORK_RX = 'network_rx' -ATTR_NETWORK_TX = 'network_tx' -ATTR_MEMORY_LIMIT = 'memory_limit' -ATTR_MEMORY_USAGE = 'memory_usage' -ATTR_BLK_READ = 'blk_read' -ATTR_BLK_WRITE = 'blk_write' -ATTR_ADDON = 'addon' -ATTR_AVAILABLE = 'available' -ATTR_HOST = 'host' -ATTR_USERNAME = 'username' -ATTR_PROTOCOL = 'protocol' -ATTR_DISCOVERY = 'discovery' -ATTR_CONFIG = 'config' -ATTR_SERVICES = 'services' -ATTR_SERVICE = 'service' -ATTR_DISCOVERY = 'discovery' -ATTR_PROTECTED = 'protected' -ATTR_CRYPTO = 'crypto' -ATTR_BRANCH = 'branch' -ATTR_KERNEL = 'kernel' -ATTR_APPARMOR = 'apparmor' -ATTR_DEVICETREE = 'devicetree' -ATTR_CPE = 'cpe' -ATTR_BOARD = 'board' -ATTR_HASSOS = 'hassos' -ATTR_HASSOS_CLI = 'hassos_cli' -ATTR_VERSION_CLI = 'version_cli' -ATTR_VERSION_CLI_LATEST = 'version_cli_latest' -ATTR_REFRESH_TOKEN = 'refresh_token' -ATTR_ACCESS_TOKEN = 'access_token' -ATTR_DOCKER_API = 'docker_api' -ATTR_FULL_ACCESS = 'full_access' -ATTR_PROTECTED = 'protected' -ATTR_RATING = 'rating' -ATTR_HASSIO_ROLE = 'hassio_role' -ATTR_SUPERVISOR = 'supervisor' -ATTR_AUTH_API = 'auth_api' +ATTR_MACHINE = "machine" +ATTR_WAIT_BOOT = "wait_boot" +ATTR_DEPLOYMENT = "deployment" +ATTR_WATCHDOG = "watchdog" +ATTR_CHANGELOG = "changelog" +ATTR_DATE = "date" +ATTR_ARCH = "arch" +ATTR_LONG_DESCRIPTION = "long_description" +ATTR_HOSTNAME = "hostname" +ATTR_TIMEZONE = "timezone" +ATTR_ARGS = "args" +ATTR_OPERATING_SYSTEM = "operating_system" +ATTR_CHASSIS = "chassis" +ATTR_TYPE = "type" +ATTR_SOURCE = "source" +ATTR_FEATURES = "features" +ATTR_ADDONS = "addons" +ATTR_PROVIDERS = "providers" +ATTR_VERSION = "version" +ATTR_VERSION_LATEST = "version_latest" +ATTR_AUTO_UART = "auto_uart" +ATTR_LAST_BOOT = "last_boot" +ATTR_LAST_VERSION = "last_version" +ATTR_CHANNEL = "channel" +ATTR_NAME = "name" +ATTR_SLUG = "slug" +ATTR_DESCRIPTON = "description" +ATTR_STARTUP = "startup" +ATTR_BOOT = "boot" +ATTR_PORTS = "ports" +ATTR_PORT = "port" +ATTR_SSL = "ssl" +ATTR_MAP = "map" +ATTR_WEBUI = "webui" +ATTR_OPTIONS = "options" +ATTR_INSTALLED = "installed" +ATTR_DETACHED = "detached" +ATTR_STATE = "state" +ATTR_SCHEMA = "schema" +ATTR_IMAGE = "image" +ATTR_ICON = "icon" +ATTR_LOGO = "logo" +ATTR_STDIN = "stdin" +ATTR_ADDONS_REPOSITORIES = "addons_repositories" +ATTR_REPOSITORY = "repository" +ATTR_REPOSITORIES = "repositories" +ATTR_URL = "url" +ATTR_MAINTAINER = "maintainer" +ATTR_PASSWORD = "password" +ATTR_TOTP = "totp" +ATTR_INITIALIZE = "initialize" +ATTR_LOCATON = "location" +ATTR_BUILD = "build" +ATTR_DEVICES = "devices" +ATTR_ENVIRONMENT = "environment" +ATTR_HOST_NETWORK = "host_network" +ATTR_HOST_PID = "host_pid" +ATTR_HOST_IPC = "host_ipc" +ATTR_HOST_DBUS = "host_dbus" +ATTR_NETWORK = "network" +ATTR_TMPFS = "tmpfs" +ATTR_PRIVILEGED = "privileged" +ATTR_USER = "user" +ATTR_SYSTEM = "system" +ATTR_SNAPSHOTS = "snapshots" +ATTR_HOMEASSISTANT = "homeassistant" +ATTR_HASSIO = "hassio" +ATTR_HASSIO_API = "hassio_api" +ATTR_HOMEASSISTANT_API = "homeassistant_api" +ATTR_UUID = "uuid" +ATTR_FOLDERS = "folders" +ATTR_SIZE = "size" +ATTR_TYPE = "type" +ATTR_TIMEOUT = "timeout" +ATTR_AUTO_UPDATE = "auto_update" +ATTR_CUSTOM = "custom" +ATTR_AUDIO = "audio" +ATTR_AUDIO_INPUT = "audio_input" +ATTR_AUDIO_OUTPUT = "audio_output" +ATTR_INPUT = "input" +ATTR_OUTPUT = "output" +ATTR_DISK = "disk" +ATTR_SERIAL = "serial" +ATTR_SECURITY = "security" +ATTR_BUILD_FROM = "build_from" +ATTR_SQUASH = "squash" +ATTR_GPIO = "gpio" +ATTR_LEGACY = "legacy" +ATTR_ADDONS_CUSTOM_LIST = "addons_custom_list" +ATTR_CPU_PERCENT = "cpu_percent" +ATTR_NETWORK_RX = "network_rx" +ATTR_NETWORK_TX = "network_tx" +ATTR_MEMORY_LIMIT = "memory_limit" +ATTR_MEMORY_USAGE = "memory_usage" +ATTR_BLK_READ = "blk_read" +ATTR_BLK_WRITE = "blk_write" +ATTR_ADDON = "addon" +ATTR_AVAILABLE = "available" +ATTR_HOST = "host" +ATTR_USERNAME = "username" +ATTR_PROTOCOL = "protocol" +ATTR_DISCOVERY = "discovery" +ATTR_CONFIG = "config" +ATTR_SERVICES = "services" +ATTR_SERVICE = "service" +ATTR_DISCOVERY = "discovery" +ATTR_PROTECTED = "protected" +ATTR_CRYPTO = "crypto" +ATTR_BRANCH = "branch" +ATTR_KERNEL = "kernel" +ATTR_APPARMOR = "apparmor" +ATTR_DEVICETREE = "devicetree" +ATTR_CPE = "cpe" +ATTR_BOARD = "board" +ATTR_HASSOS = "hassos" +ATTR_HASSOS_CLI = "hassos_cli" +ATTR_VERSION_CLI = "version_cli" +ATTR_VERSION_CLI_LATEST = "version_cli_latest" +ATTR_REFRESH_TOKEN = "refresh_token" +ATTR_ACCESS_TOKEN = "access_token" +ATTR_DOCKER_API = "docker_api" +ATTR_FULL_ACCESS = "full_access" +ATTR_PROTECTED = "protected" +ATTR_RATING = "rating" +ATTR_HASSIO_ROLE = "hassio_role" +ATTR_SUPERVISOR = "supervisor" +ATTR_AUTH_API = "auth_api" +ATTR_KERNEL_MODULES = "kernel_modules" -SERVICE_MQTT = 'mqtt' -PROVIDE_SERVICE = 'provide' -NEED_SERVICE = 'need' -WANT_SERVICE = 'want' +SERVICE_MQTT = "mqtt" +PROVIDE_SERVICE = "provide" +NEED_SERVICE = "need" +WANT_SERVICE = "want" -STARTUP_INITIALIZE = 'initialize' -STARTUP_SYSTEM = 'system' -STARTUP_SERVICES = 'services' -STARTUP_APPLICATION = 'application' -STARTUP_ONCE = 'once' +STARTUP_INITIALIZE = "initialize" +STARTUP_SYSTEM = "system" +STARTUP_SERVICES = "services" +STARTUP_APPLICATION = "application" +STARTUP_ONCE = "once" -BOOT_AUTO = 'auto' -BOOT_MANUAL = 'manual' +BOOT_AUTO = "auto" +BOOT_MANUAL = "manual" -STATE_STARTED = 'started' -STATE_STOPPED = 'stopped' -STATE_NONE = 'none' +STATE_STARTED = "started" +STATE_STOPPED = "stopped" +STATE_NONE = "none" -MAP_CONFIG = 'config' -MAP_SSL = 'ssl' -MAP_ADDONS = 'addons' -MAP_BACKUP = 'backup' -MAP_SHARE = 'share' +MAP_CONFIG = "config" +MAP_SSL = "ssl" +MAP_ADDONS = "addons" +MAP_BACKUP = "backup" +MAP_SHARE = "share" -ARCH_ARMHF = 'armhf' -ARCH_AARCH64 = 'aarch64' -ARCH_AMD64 = 'amd64' -ARCH_I386 = 'i386' +ARCH_ARMHF = "armhf" +ARCH_AARCH64 = "aarch64" +ARCH_AMD64 = "amd64" +ARCH_I386 = "i386" -CHANNEL_STABLE = 'stable' -CHANNEL_BETA = 'beta' -CHANNEL_DEV = 'dev' +CHANNEL_STABLE = "stable" +CHANNEL_BETA = "beta" +CHANNEL_DEV = "dev" -REPOSITORY_CORE = 'core' -REPOSITORY_LOCAL = 'local' +REPOSITORY_CORE = "core" +REPOSITORY_LOCAL = "local" -FOLDER_HOMEASSISTANT = 'homeassistant' -FOLDER_SHARE = 'share' -FOLDER_ADDONS = 'addons/local' -FOLDER_SSL = 'ssl' +FOLDER_HOMEASSISTANT = "homeassistant" +FOLDER_SHARE = "share" +FOLDER_ADDONS = "addons/local" +FOLDER_SSL = "ssl" -SNAPSHOT_FULL = 'full' -SNAPSHOT_PARTIAL = 'partial' +SNAPSHOT_FULL = "full" +SNAPSHOT_PARTIAL = "partial" -CRYPTO_AES128 = 'aes128' +CRYPTO_AES128 = "aes128" -SECURITY_PROFILE = 'profile' -SECURITY_DEFAULT = 'default' -SECURITY_DISABLE = 'disable' +SECURITY_PROFILE = "profile" +SECURITY_DEFAULT = "default" +SECURITY_DISABLE = "disable" -PRIVILEGED_NET_ADMIN = 'NET_ADMIN' -PRIVILEGED_SYS_ADMIN = 'SYS_ADMIN' -PRIVILEGED_SYS_RAWIO = 'SYS_RAWIO' -PRIVILEGED_IPC_LOCK = 'IPC_LOCK' -PRIVILEGED_SYS_TIME = 'SYS_TIME' -PRIVILEGED_SYS_NICE = 'SYS_NICE' -PRIVILEGED_SYS_RESOURCE = 'SYS_RESOURCE' -PRIVILEGED_SYS_PTRACE = 'SYS_PTRACE' -PRIVILEGED_DAC_READ_SEARCH = 'DAC_READ_SEARCH' +PRIVILEGED_NET_ADMIN = "NET_ADMIN" +PRIVILEGED_SYS_ADMIN = "SYS_ADMIN" +PRIVILEGED_SYS_RAWIO = "SYS_RAWIO" +PRIVILEGED_IPC_LOCK = "IPC_LOCK" +PRIVILEGED_SYS_TIME = "SYS_TIME" +PRIVILEGED_SYS_NICE = "SYS_NICE" +PRIVILEGED_SYS_RESOURCE = "SYS_RESOURCE" +PRIVILEGED_SYS_PTRACE = "SYS_PTRACE" +PRIVILEGED_DAC_READ_SEARCH = "DAC_READ_SEARCH" -FEATURES_SHUTDOWN = 'shutdown' -FEATURES_REBOOT = 'reboot' -FEATURES_HASSOS = 'hassos' -FEATURES_HOSTNAME = 'hostname' -FEATURES_SERVICES = 'services' +FEATURES_SHUTDOWN = "shutdown" +FEATURES_REBOOT = "reboot" +FEATURES_HASSOS = "hassos" +FEATURES_HOSTNAME = "hostname" +FEATURES_SERVICES = "services" -ROLE_DEFAULT = 'default' -ROLE_HOMEASSISTANT = 'homeassistant' -ROLE_BACKUP = 'backup' -ROLE_MANAGER = 'manager' -ROLE_ADMIN = 'admin' +ROLE_DEFAULT = "default" +ROLE_HOMEASSISTANT = "homeassistant" +ROLE_BACKUP = "backup" +ROLE_MANAGER = "manager" +ROLE_ADMIN = "admin" -CHAN_ID = 'chan_id' -CHAN_TYPE = 'chan_type' +CHAN_ID = "chan_id" +CHAN_TYPE = "chan_type" diff --git a/hassio/docker/addon.py b/hassio/docker/addon.py index 42f3230b1..d45cb09dd 100644 --- a/hassio/docker/addon.py +++ b/hassio/docker/addon.py @@ -233,6 +233,14 @@ class DockerAddon(DockerInterface): }, }) + # Kernel Modules support + if self.addon.with_kernel_modules: + volumes.update({ + "/lib/modules": { + 'bind': "/lib/modules", 'mode': 'ro' + }, + }) + # Docker API support if not self.addon.protected and self.addon.access_docker_api: volumes.update({