mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-20 15:46:29 +00:00
Add stage flag (#1460)
* Add stage flag * Add filter * Remove filter * Fix lint
This commit is contained in:
parent
0a8b1c2797
commit
f253c797af
2
API.md
2
API.md
@ -457,6 +457,7 @@ Get all available addons.
|
|||||||
"slug": "xy",
|
"slug": "xy",
|
||||||
"description": "description",
|
"description": "description",
|
||||||
"advanced": "bool",
|
"advanced": "bool",
|
||||||
|
"stage": "stable|experimental|deprecated",
|
||||||
"repository": "core|local|REP_ID",
|
"repository": "core|local|REP_ID",
|
||||||
"version": "LAST_VERSION",
|
"version": "LAST_VERSION",
|
||||||
"installed": "none|INSTALL_VERSION",
|
"installed": "none|INSTALL_VERSION",
|
||||||
@ -496,6 +497,7 @@ Get all available addons.
|
|||||||
"detached": "bool",
|
"detached": "bool",
|
||||||
"available": "bool",
|
"available": "bool",
|
||||||
"advanced": "bool",
|
"advanced": "bool",
|
||||||
|
"stage": "stable|experimental|deprecated",
|
||||||
"arch": ["armhf", "aarch64", "i386", "amd64"],
|
"arch": ["armhf", "aarch64", "i386", "amd64"],
|
||||||
"machine": "[raspberrypi2, tinker]",
|
"machine": "[raspberrypi2, tinker]",
|
||||||
"homeassistant": "null|min Home Assistant version",
|
"homeassistant": "null|min Home Assistant version",
|
||||||
|
@ -49,6 +49,7 @@ from ..const import (
|
|||||||
ATTR_SERVICES,
|
ATTR_SERVICES,
|
||||||
ATTR_SLUG,
|
ATTR_SLUG,
|
||||||
ATTR_SNAPSHOT_EXCLUDE,
|
ATTR_SNAPSHOT_EXCLUDE,
|
||||||
|
ATTR_STAGE,
|
||||||
ATTR_STARTUP,
|
ATTR_STARTUP,
|
||||||
ATTR_STDIN,
|
ATTR_STDIN,
|
||||||
ATTR_TIMEOUT,
|
ATTR_TIMEOUT,
|
||||||
@ -60,9 +61,10 @@ from ..const import (
|
|||||||
SECURITY_DEFAULT,
|
SECURITY_DEFAULT,
|
||||||
SECURITY_DISABLE,
|
SECURITY_DISABLE,
|
||||||
SECURITY_PROFILE,
|
SECURITY_PROFILE,
|
||||||
|
AddonStages,
|
||||||
)
|
)
|
||||||
from ..coresys import CoreSysAttributes
|
from ..coresys import CoreSysAttributes
|
||||||
from .validate import RE_SERVICE, RE_VOLUME, validate_options, schema_ui_options
|
from .validate import RE_SERVICE, RE_VOLUME, schema_ui_options, validate_options
|
||||||
|
|
||||||
Data = Dict[str, Any]
|
Data = Dict[str, Any]
|
||||||
|
|
||||||
@ -195,6 +197,11 @@ class AddonModel(CoreSysAttributes):
|
|||||||
"""Return advanced mode of add-on."""
|
"""Return advanced mode of add-on."""
|
||||||
return self.data[ATTR_ADVANCED]
|
return self.data[ATTR_ADVANCED]
|
||||||
|
|
||||||
|
@property
|
||||||
|
def stage(self) -> AddonStages:
|
||||||
|
"""Return stage mode of add-on."""
|
||||||
|
return self.data[ATTR_STAGE]
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def services_role(self) -> Dict[str, str]:
|
def services_role(self) -> Dict[str, str]:
|
||||||
"""Return dict of services with rights."""
|
"""Return dict of services with rights."""
|
||||||
|
@ -65,6 +65,7 @@ from ..const import (
|
|||||||
ATTR_SLUG,
|
ATTR_SLUG,
|
||||||
ATTR_SNAPSHOT_EXCLUDE,
|
ATTR_SNAPSHOT_EXCLUDE,
|
||||||
ATTR_SQUASH,
|
ATTR_SQUASH,
|
||||||
|
ATTR_STAGE,
|
||||||
ATTR_STARTUP,
|
ATTR_STARTUP,
|
||||||
ATTR_STATE,
|
ATTR_STATE,
|
||||||
ATTR_STDIN,
|
ATTR_STDIN,
|
||||||
@ -87,6 +88,7 @@ from ..const import (
|
|||||||
STARTUP_SERVICES,
|
STARTUP_SERVICES,
|
||||||
STATE_STARTED,
|
STATE_STARTED,
|
||||||
STATE_STOPPED,
|
STATE_STOPPED,
|
||||||
|
AddonStages,
|
||||||
)
|
)
|
||||||
from ..coresys import CoreSys
|
from ..coresys import CoreSys
|
||||||
from ..discovery.validate import valid_discovery_service
|
from ..discovery.validate import valid_discovery_service
|
||||||
@ -188,6 +190,7 @@ SCHEMA_ADDON_CONFIG = vol.Schema(
|
|||||||
vol.Required(ATTR_STARTUP): vol.All(_simple_startup, vol.In(STARTUP_ALL)),
|
vol.Required(ATTR_STARTUP): vol.All(_simple_startup, vol.In(STARTUP_ALL)),
|
||||||
vol.Required(ATTR_BOOT): vol.In([BOOT_AUTO, BOOT_MANUAL]),
|
vol.Required(ATTR_BOOT): vol.In([BOOT_AUTO, BOOT_MANUAL]),
|
||||||
vol.Optional(ATTR_ADVANCED, default=False): vol.Boolean(),
|
vol.Optional(ATTR_ADVANCED, default=False): vol.Boolean(),
|
||||||
|
vol.Optional(ATTR_STAGE, default=AddonStages.STABLE): vol.Coerce(AddonStages),
|
||||||
vol.Optional(ATTR_PORTS): DOCKER_PORTS,
|
vol.Optional(ATTR_PORTS): DOCKER_PORTS,
|
||||||
vol.Optional(ATTR_PORTS_DESCRIPTION): DOCKER_PORTS_DESCRIPTION,
|
vol.Optional(ATTR_PORTS_DESCRIPTION): DOCKER_PORTS_DESCRIPTION,
|
||||||
vol.Optional(ATTR_WEBUI): vol.Match(
|
vol.Optional(ATTR_WEBUI): vol.Match(
|
||||||
|
@ -76,6 +76,7 @@ from ..const import (
|
|||||||
ATTR_SERVICES,
|
ATTR_SERVICES,
|
||||||
ATTR_SLUG,
|
ATTR_SLUG,
|
||||||
ATTR_SOURCE,
|
ATTR_SOURCE,
|
||||||
|
ATTR_STAGE,
|
||||||
ATTR_STATE,
|
ATTR_STATE,
|
||||||
ATTR_STDIN,
|
ATTR_STDIN,
|
||||||
ATTR_UDEV,
|
ATTR_UDEV,
|
||||||
@ -149,6 +150,7 @@ class APIAddons(CoreSysAttributes):
|
|||||||
ATTR_SLUG: addon.slug,
|
ATTR_SLUG: addon.slug,
|
||||||
ATTR_DESCRIPTON: addon.description,
|
ATTR_DESCRIPTON: addon.description,
|
||||||
ATTR_ADVANCED: addon.advanced,
|
ATTR_ADVANCED: addon.advanced,
|
||||||
|
ATTR_STAGE: addon.stage,
|
||||||
ATTR_VERSION: addon.latest_version,
|
ATTR_VERSION: addon.latest_version,
|
||||||
ATTR_INSTALLED: addon.version if addon.is_installed else None,
|
ATTR_INSTALLED: addon.version if addon.is_installed else None,
|
||||||
ATTR_AVAILABLE: addon.available,
|
ATTR_AVAILABLE: addon.available,
|
||||||
@ -193,6 +195,7 @@ class APIAddons(CoreSysAttributes):
|
|||||||
ATTR_DESCRIPTON: addon.description,
|
ATTR_DESCRIPTON: addon.description,
|
||||||
ATTR_LONG_DESCRIPTION: addon.long_description,
|
ATTR_LONG_DESCRIPTION: addon.long_description,
|
||||||
ATTR_ADVANCED: addon.advanced,
|
ATTR_ADVANCED: addon.advanced,
|
||||||
|
ATTR_STAGE: addon.stage,
|
||||||
ATTR_AUTO_UPDATE: None,
|
ATTR_AUTO_UPDATE: None,
|
||||||
ATTR_REPOSITORY: addon.repository,
|
ATTR_REPOSITORY: addon.repository,
|
||||||
ATTR_VERSION: None,
|
ATTR_VERSION: None,
|
||||||
|
@ -37,11 +37,12 @@ from ..const import (
|
|||||||
ATTR_WAIT_BOOT,
|
ATTR_WAIT_BOOT,
|
||||||
CONTENT_TYPE_BINARY,
|
CONTENT_TYPE_BINARY,
|
||||||
HASSIO_VERSION,
|
HASSIO_VERSION,
|
||||||
|
UpdateChannels,
|
||||||
)
|
)
|
||||||
from ..coresys import CoreSysAttributes
|
from ..coresys import CoreSysAttributes
|
||||||
from ..exceptions import APIError
|
from ..exceptions import APIError
|
||||||
from ..utils.validate import validate_timezone
|
from ..utils.validate import validate_timezone
|
||||||
from ..validate import channels, log_level, repositories, wait_boot
|
from ..validate import log_level, repositories, wait_boot
|
||||||
from .utils import api_process, api_process_raw, api_validate
|
from .utils import api_process, api_process_raw, api_validate
|
||||||
|
|
||||||
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||||
@ -49,7 +50,7 @@ _LOGGER: logging.Logger = logging.getLogger(__name__)
|
|||||||
# pylint: disable=no-value-for-parameter
|
# pylint: disable=no-value-for-parameter
|
||||||
SCHEMA_OPTIONS = vol.Schema(
|
SCHEMA_OPTIONS = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Optional(ATTR_CHANNEL): channels,
|
vol.Optional(ATTR_CHANNEL): vol.Coerce(UpdateChannels),
|
||||||
vol.Optional(ATTR_ADDONS_REPOSITORIES): repositories,
|
vol.Optional(ATTR_ADDONS_REPOSITORIES): repositories,
|
||||||
vol.Optional(ATTR_TIMEZONE): validate_timezone,
|
vol.Optional(ATTR_TIMEZONE): validate_timezone,
|
||||||
vol.Optional(ATTR_WAIT_BOOT): wait_boot,
|
vol.Optional(ATTR_WAIT_BOOT): wait_boot,
|
||||||
|
@ -11,7 +11,7 @@ from .addons import AddonManager
|
|||||||
from .api import RestAPI
|
from .api import RestAPI
|
||||||
from .arch import CpuArch
|
from .arch import CpuArch
|
||||||
from .auth import Auth
|
from .auth import Auth
|
||||||
from .const import CHANNEL_DEV, SOCKET_DOCKER
|
from .const import SOCKET_DOCKER, UpdateChannels
|
||||||
from .core import HassIO
|
from .core import HassIO
|
||||||
from .coresys import CoreSys
|
from .coresys import CoreSys
|
||||||
from .dbus import DBusManager
|
from .dbus import DBusManager
|
||||||
@ -142,7 +142,7 @@ def initialize_system_data(coresys: CoreSys):
|
|||||||
# Check if ENV is in development mode
|
# Check if ENV is in development mode
|
||||||
if bool(os.environ.get("SUPERVISOR_DEV", 0)):
|
if bool(os.environ.get("SUPERVISOR_DEV", 0)):
|
||||||
_LOGGER.warning("SUPERVISOR_DEV is set")
|
_LOGGER.warning("SUPERVISOR_DEV is set")
|
||||||
coresys.updater.channel = CHANNEL_DEV
|
coresys.updater.channel = UpdateChannels.DEV
|
||||||
coresys.config.logging = "debug"
|
coresys.config.logging = "debug"
|
||||||
coresys.config.debug = True
|
coresys.config.debug = True
|
||||||
|
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
"""Constants file for Hass.io."""
|
"""Constants file for Hass.io."""
|
||||||
from pathlib import Path
|
from enum import Enum
|
||||||
from ipaddress import ip_network
|
from ipaddress import ip_network
|
||||||
|
from pathlib import Path
|
||||||
|
|
||||||
HASSIO_VERSION = "197"
|
HASSIO_VERSION = "197"
|
||||||
|
|
||||||
@ -224,6 +225,7 @@ ATTR_VALUE = "value"
|
|||||||
ATTR_SNAPSHOT_EXCLUDE = "snapshot_exclude"
|
ATTR_SNAPSHOT_EXCLUDE = "snapshot_exclude"
|
||||||
ATTR_DOCUMENTATION = "documentation"
|
ATTR_DOCUMENTATION = "documentation"
|
||||||
ATTR_ADVANCED = "advanced"
|
ATTR_ADVANCED = "advanced"
|
||||||
|
ATTR_STAGE = "stage"
|
||||||
|
|
||||||
PROVIDE_SERVICE = "provide"
|
PROVIDE_SERVICE = "provide"
|
||||||
NEED_SERVICE = "need"
|
NEED_SERVICE = "need"
|
||||||
@ -264,10 +266,6 @@ ARCH_I386 = "i386"
|
|||||||
|
|
||||||
ARCH_ALL = [ARCH_ARMHF, ARCH_ARMV7, ARCH_AARCH64, ARCH_AMD64, ARCH_I386]
|
ARCH_ALL = [ARCH_ARMHF, ARCH_ARMV7, ARCH_AARCH64, ARCH_AMD64, ARCH_I386]
|
||||||
|
|
||||||
CHANNEL_STABLE = "stable"
|
|
||||||
CHANNEL_BETA = "beta"
|
|
||||||
CHANNEL_DEV = "dev"
|
|
||||||
|
|
||||||
REPOSITORY_CORE = "core"
|
REPOSITORY_CORE = "core"
|
||||||
REPOSITORY_LOCAL = "local"
|
REPOSITORY_LOCAL = "local"
|
||||||
|
|
||||||
@ -325,3 +323,19 @@ ROLE_ALL = [ROLE_DEFAULT, ROLE_HOMEASSISTANT, ROLE_BACKUP, ROLE_MANAGER, ROLE_AD
|
|||||||
|
|
||||||
CHAN_ID = "chan_id"
|
CHAN_ID = "chan_id"
|
||||||
CHAN_TYPE = "chan_type"
|
CHAN_TYPE = "chan_type"
|
||||||
|
|
||||||
|
|
||||||
|
class AddonStages(str, Enum):
|
||||||
|
"""Stage types of add-on."""
|
||||||
|
|
||||||
|
STABLE = "stable"
|
||||||
|
EXPERIMENTAL = "experimental"
|
||||||
|
DEPRECATED = "deprecated"
|
||||||
|
|
||||||
|
|
||||||
|
class UpdateChannels(str, Enum):
|
||||||
|
"""Core supported update channels."""
|
||||||
|
|
||||||
|
STABLE = "stable"
|
||||||
|
BETA = "beta"
|
||||||
|
DEV = "dev"
|
||||||
|
@ -6,7 +6,7 @@ from typing import TYPE_CHECKING, Optional
|
|||||||
import aiohttp
|
import aiohttp
|
||||||
|
|
||||||
from .config import CoreConfig
|
from .config import CoreConfig
|
||||||
from .const import CHANNEL_DEV
|
from .const import UpdateChannels
|
||||||
from .docker import DockerAPI
|
from .docker import DockerAPI
|
||||||
from .misc.hardware import Hardware
|
from .misc.hardware import Hardware
|
||||||
from .misc.scheduler import Scheduler
|
from .misc.scheduler import Scheduler
|
||||||
@ -85,7 +85,7 @@ class CoreSys:
|
|||||||
@property
|
@property
|
||||||
def dev(self) -> bool:
|
def dev(self) -> bool:
|
||||||
"""Return True if we run dev mode."""
|
"""Return True if we run dev mode."""
|
||||||
return self._updater.channel == CHANNEL_DEV
|
return self._updater.channel == UpdateChannels.DEV
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def timezone(self) -> str:
|
def timezone(self) -> str:
|
||||||
|
@ -17,6 +17,7 @@ from .const import (
|
|||||||
ATTR_HOMEASSISTANT,
|
ATTR_HOMEASSISTANT,
|
||||||
FILE_HASSIO_UPDATER,
|
FILE_HASSIO_UPDATER,
|
||||||
URL_HASSIO_VERSION,
|
URL_HASSIO_VERSION,
|
||||||
|
UpdateChannels,
|
||||||
)
|
)
|
||||||
from .coresys import CoreSysAttributes
|
from .coresys import CoreSysAttributes
|
||||||
from .exceptions import HassioUpdaterError
|
from .exceptions import HassioUpdaterError
|
||||||
@ -71,12 +72,12 @@ class Updater(JsonConfig, CoreSysAttributes):
|
|||||||
return self._data.get(ATTR_DNS)
|
return self._data.get(ATTR_DNS)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def channel(self) -> str:
|
def channel(self) -> UpdateChannels:
|
||||||
"""Return upstream channel of Hass.io instance."""
|
"""Return upstream channel of Hass.io instance."""
|
||||||
return self._data[ATTR_CHANNEL]
|
return self._data[ATTR_CHANNEL]
|
||||||
|
|
||||||
@channel.setter
|
@channel.setter
|
||||||
def channel(self, value: str):
|
def channel(self, value: UpdateChannels):
|
||||||
"""Set upstream mode."""
|
"""Set upstream mode."""
|
||||||
self._data[ATTR_CHANNEL] = value
|
self._data[ATTR_CHANNEL] = value
|
||||||
|
|
||||||
|
@ -32,9 +32,7 @@ from .const import (
|
|||||||
ATTR_VERSION,
|
ATTR_VERSION,
|
||||||
ATTR_WAIT_BOOT,
|
ATTR_WAIT_BOOT,
|
||||||
ATTR_WATCHDOG,
|
ATTR_WATCHDOG,
|
||||||
CHANNEL_BETA,
|
UpdateChannels,
|
||||||
CHANNEL_DEV,
|
|
||||||
CHANNEL_STABLE,
|
|
||||||
)
|
)
|
||||||
from .utils.validate import validate_timezone
|
from .utils.validate import validate_timezone
|
||||||
|
|
||||||
@ -47,7 +45,6 @@ network_port = vol.All(vol.Coerce(int), vol.Range(min=1, max=65535))
|
|||||||
wait_boot = vol.All(vol.Coerce(int), vol.Range(min=1, max=60))
|
wait_boot = vol.All(vol.Coerce(int), vol.Range(min=1, max=60))
|
||||||
docker_image = vol.Match(r"^[\w{}]+/[\-\w{}]+$")
|
docker_image = vol.Match(r"^[\w{}]+/[\-\w{}]+$")
|
||||||
alsa_device = vol.Maybe(vol.Match(r"\d+,\d+"))
|
alsa_device = vol.Maybe(vol.Match(r"\d+,\d+"))
|
||||||
channels = vol.In([CHANNEL_STABLE, CHANNEL_BETA, CHANNEL_DEV])
|
|
||||||
uuid_match = vol.Match(r"^[0-9a-f]{32}$")
|
uuid_match = vol.Match(r"^[0-9a-f]{32}$")
|
||||||
sha256 = vol.Match(r"^[0-9a-f]{64}$")
|
sha256 = vol.Match(r"^[0-9a-f]{64}$")
|
||||||
token = vol.Match(r"^[0-9a-f]{32,256}$")
|
token = vol.Match(r"^[0-9a-f]{32,256}$")
|
||||||
@ -122,7 +119,9 @@ SCHEMA_HASS_CONFIG = vol.Schema(
|
|||||||
|
|
||||||
SCHEMA_UPDATER_CONFIG = vol.Schema(
|
SCHEMA_UPDATER_CONFIG = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Optional(ATTR_CHANNEL, default=CHANNEL_STABLE): channels,
|
vol.Optional(ATTR_CHANNEL, default=UpdateChannels.STABLE): vol.Coerce(
|
||||||
|
UpdateChannels
|
||||||
|
),
|
||||||
vol.Optional(ATTR_HOMEASSISTANT): vol.Coerce(str),
|
vol.Optional(ATTR_HOMEASSISTANT): vol.Coerce(str),
|
||||||
vol.Optional(ATTR_HASSIO): vol.Coerce(str),
|
vol.Optional(ATTR_HASSIO): vol.Coerce(str),
|
||||||
vol.Optional(ATTR_HASSOS): vol.Coerce(str),
|
vol.Optional(ATTR_HASSOS): vol.Coerce(str),
|
||||||
|
Loading…
x
Reference in New Issue
Block a user