mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-14 20:56:30 +00:00
Fix landingpage on first boot (#2713)
This commit is contained in:
parent
85a66c663c
commit
a52713611c
@ -26,10 +26,10 @@ from ..const import (
|
|||||||
)
|
)
|
||||||
from ..coresys import CoreSys, CoreSysAttributes
|
from ..coresys import CoreSys, CoreSysAttributes
|
||||||
from ..utils.common import FileConfiguration
|
from ..utils.common import FileConfiguration
|
||||||
from ..validate import SCHEMA_HASS_CONFIG
|
|
||||||
from .api import HomeAssistantAPI
|
from .api import HomeAssistantAPI
|
||||||
from .core import HomeAssistantCore
|
from .core import HomeAssistantCore
|
||||||
from .secrets import HomeAssistantSecrets
|
from .secrets import HomeAssistantSecrets
|
||||||
|
from .validate import SCHEMA_HASS_CONFIG
|
||||||
from .websocket import HomeAssistantWebSocket
|
from .websocket import HomeAssistantWebSocket
|
||||||
|
|
||||||
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||||
|
@ -11,7 +11,7 @@ from aiohttp import hdrs
|
|||||||
from ..coresys import CoreSys, CoreSysAttributes
|
from ..coresys import CoreSys, CoreSysAttributes
|
||||||
from ..exceptions import HomeAssistantAPIError, HomeAssistantAuthError
|
from ..exceptions import HomeAssistantAPIError, HomeAssistantAuthError
|
||||||
from ..utils import check_port
|
from ..utils import check_port
|
||||||
from .core import LANDINGPAGE
|
from .const import LANDINGPAGE
|
||||||
|
|
||||||
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -1,8 +1,12 @@
|
|||||||
"""Constants for homeassistant."""
|
"""Constants for homeassistant."""
|
||||||
from enum import Enum
|
from enum import Enum
|
||||||
|
|
||||||
|
from awesomeversion import AwesomeVersion
|
||||||
|
|
||||||
from ..const import CoreState
|
from ..const import CoreState
|
||||||
|
|
||||||
|
LANDINGPAGE: AwesomeVersion = AwesomeVersion("landingpage")
|
||||||
|
|
||||||
MIN_VERSION = {"supervisor/event": "2021.2.4"}
|
MIN_VERSION = {"supervisor/event": "2021.2.4"}
|
||||||
|
|
||||||
CLOSING_STATES = [
|
CLOSING_STATES = [
|
||||||
|
@ -25,13 +25,12 @@ from ..exceptions import (
|
|||||||
from ..jobs.decorator import Job, JobCondition
|
from ..jobs.decorator import Job, JobCondition
|
||||||
from ..resolution.const import ContextType, IssueType
|
from ..resolution.const import ContextType, IssueType
|
||||||
from ..utils import convert_to_ascii, process_lock
|
from ..utils import convert_to_ascii, process_lock
|
||||||
|
from .const import LANDINGPAGE
|
||||||
|
|
||||||
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
_LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
RE_YAML_ERROR = re.compile(r"homeassistant\.util\.yaml")
|
RE_YAML_ERROR = re.compile(r"homeassistant\.util\.yaml")
|
||||||
|
|
||||||
LANDINGPAGE: AwesomeVersion = AwesomeVersion("landingpage")
|
|
||||||
|
|
||||||
|
|
||||||
@attr.s(frozen=True)
|
@attr.s(frozen=True)
|
||||||
class ConfigResult:
|
class ConfigResult:
|
||||||
@ -88,6 +87,18 @@ class HomeAssistantCore(CoreSysAttributes):
|
|||||||
@process_lock
|
@process_lock
|
||||||
async def install_landingpage(self) -> None:
|
async def install_landingpage(self) -> None:
|
||||||
"""Install a landing page."""
|
"""Install a landing page."""
|
||||||
|
# Try to use a preinstalled landingpage
|
||||||
|
try:
|
||||||
|
await self.instance.attach(version=LANDINGPAGE)
|
||||||
|
except DockerError:
|
||||||
|
pass
|
||||||
|
else:
|
||||||
|
_LOGGER.info("Using preinstalled landingpage")
|
||||||
|
self.sys_homeassistant.version = LANDINGPAGE
|
||||||
|
self.sys_homeassistant.image = self.instance.image
|
||||||
|
self.sys_homeassistant.save_data()
|
||||||
|
return
|
||||||
|
|
||||||
_LOGGER.info("Setting up Home Assistant landingpage")
|
_LOGGER.info("Setting up Home Assistant landingpage")
|
||||||
while True:
|
while True:
|
||||||
if not self.sys_updater.image_homeassistant:
|
if not self.sys_updater.image_homeassistant:
|
||||||
@ -108,7 +119,7 @@ class HomeAssistantCore(CoreSysAttributes):
|
|||||||
except Exception as err: # pylint: disable=broad-except
|
except Exception as err: # pylint: disable=broad-except
|
||||||
self.sys_capture_exception(err)
|
self.sys_capture_exception(err)
|
||||||
else:
|
else:
|
||||||
self.sys_homeassistant.version = self.instance.version
|
self.sys_homeassistant.version = LANDINGPAGE
|
||||||
self.sys_homeassistant.image = self.sys_updater.image_homeassistant
|
self.sys_homeassistant.image = self.sys_updater.image_homeassistant
|
||||||
self.sys_homeassistant.save_data()
|
self.sys_homeassistant.save_data()
|
||||||
break
|
break
|
||||||
|
41
supervisor/homeassistant/validate.py
Normal file
41
supervisor/homeassistant/validate.py
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
"""Validate functions."""
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
import voluptuous as vol
|
||||||
|
|
||||||
|
from ..const import (
|
||||||
|
ATTR_ACCESS_TOKEN,
|
||||||
|
ATTR_AUDIO_INPUT,
|
||||||
|
ATTR_AUDIO_OUTPUT,
|
||||||
|
ATTR_BOOT,
|
||||||
|
ATTR_IMAGE,
|
||||||
|
ATTR_PORT,
|
||||||
|
ATTR_REFRESH_TOKEN,
|
||||||
|
ATTR_SSL,
|
||||||
|
ATTR_UUID,
|
||||||
|
ATTR_VERSION,
|
||||||
|
ATTR_WAIT_BOOT,
|
||||||
|
ATTR_WATCHDOG,
|
||||||
|
)
|
||||||
|
from ..validate import docker_image, network_port, token, uuid_match, version_tag
|
||||||
|
|
||||||
|
# pylint: disable=no-value-for-parameter
|
||||||
|
SCHEMA_HASS_CONFIG = vol.Schema(
|
||||||
|
{
|
||||||
|
vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): uuid_match,
|
||||||
|
vol.Optional(ATTR_VERSION): version_tag,
|
||||||
|
vol.Optional(ATTR_IMAGE): docker_image,
|
||||||
|
vol.Optional(ATTR_ACCESS_TOKEN): token,
|
||||||
|
vol.Optional(ATTR_BOOT, default=True): vol.Boolean(),
|
||||||
|
vol.Optional(ATTR_PORT, default=8123): network_port,
|
||||||
|
vol.Optional(ATTR_REFRESH_TOKEN): vol.Maybe(vol.Coerce(str)),
|
||||||
|
vol.Optional(ATTR_SSL, default=False): vol.Boolean(),
|
||||||
|
vol.Optional(ATTR_WATCHDOG, default=True): vol.Boolean(),
|
||||||
|
vol.Optional(ATTR_WAIT_BOOT, default=600): vol.All(
|
||||||
|
vol.Coerce(int), vol.Range(min=60)
|
||||||
|
),
|
||||||
|
vol.Optional(ATTR_AUDIO_OUTPUT, default=None): vol.Maybe(vol.Coerce(str)),
|
||||||
|
vol.Optional(ATTR_AUDIO_INPUT, default=None): vol.Maybe(vol.Coerce(str)),
|
||||||
|
},
|
||||||
|
extra=vol.REMOVE_EXTRA,
|
||||||
|
)
|
@ -2,18 +2,13 @@
|
|||||||
import ipaddress
|
import ipaddress
|
||||||
import re
|
import re
|
||||||
from typing import Optional, Union
|
from typing import Optional, Union
|
||||||
import uuid
|
|
||||||
|
|
||||||
from awesomeversion import AwesomeVersion
|
from awesomeversion import AwesomeVersion
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
ATTR_ACCESS_TOKEN,
|
|
||||||
ATTR_ADDONS_CUSTOM_LIST,
|
ATTR_ADDONS_CUSTOM_LIST,
|
||||||
ATTR_AUDIO,
|
ATTR_AUDIO,
|
||||||
ATTR_AUDIO_INPUT,
|
|
||||||
ATTR_AUDIO_OUTPUT,
|
|
||||||
ATTR_BOOT,
|
|
||||||
ATTR_CHANNEL,
|
ATTR_CHANNEL,
|
||||||
ATTR_CLI,
|
ATTR_CLI,
|
||||||
ATTR_DEBUG,
|
ATTR_DEBUG,
|
||||||
@ -29,19 +24,14 @@ from .const import (
|
|||||||
ATTR_OBSERVER,
|
ATTR_OBSERVER,
|
||||||
ATTR_OTA,
|
ATTR_OTA,
|
||||||
ATTR_PASSWORD,
|
ATTR_PASSWORD,
|
||||||
ATTR_PORT,
|
|
||||||
ATTR_PORTS,
|
ATTR_PORTS,
|
||||||
ATTR_REFRESH_TOKEN,
|
|
||||||
ATTR_REGISTRIES,
|
ATTR_REGISTRIES,
|
||||||
ATTR_SESSION,
|
ATTR_SESSION,
|
||||||
ATTR_SSL,
|
|
||||||
ATTR_SUPERVISOR,
|
ATTR_SUPERVISOR,
|
||||||
ATTR_TIMEZONE,
|
ATTR_TIMEZONE,
|
||||||
ATTR_USERNAME,
|
ATTR_USERNAME,
|
||||||
ATTR_UUID,
|
|
||||||
ATTR_VERSION,
|
ATTR_VERSION,
|
||||||
ATTR_WAIT_BOOT,
|
ATTR_WAIT_BOOT,
|
||||||
ATTR_WATCHDOG,
|
|
||||||
SUPERVISOR_VERSION,
|
SUPERVISOR_VERSION,
|
||||||
LogLevel,
|
LogLevel,
|
||||||
UpdateChannel,
|
UpdateChannel,
|
||||||
@ -108,28 +98,6 @@ docker_ports = vol.Schema({docker_port: vol.Maybe(network_port)})
|
|||||||
docker_ports_description = vol.Schema({docker_port: vol.Coerce(str)})
|
docker_ports_description = vol.Schema({docker_port: vol.Coerce(str)})
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=no-value-for-parameter
|
|
||||||
SCHEMA_HASS_CONFIG = vol.Schema(
|
|
||||||
{
|
|
||||||
vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): uuid_match,
|
|
||||||
vol.Optional(ATTR_VERSION): version_tag,
|
|
||||||
vol.Optional(ATTR_IMAGE): docker_image,
|
|
||||||
vol.Optional(ATTR_ACCESS_TOKEN): token,
|
|
||||||
vol.Optional(ATTR_BOOT, default=True): vol.Boolean(),
|
|
||||||
vol.Optional(ATTR_PORT, default=8123): network_port,
|
|
||||||
vol.Optional(ATTR_REFRESH_TOKEN): vol.Maybe(vol.Coerce(str)),
|
|
||||||
vol.Optional(ATTR_SSL, default=False): vol.Boolean(),
|
|
||||||
vol.Optional(ATTR_WATCHDOG, default=True): vol.Boolean(),
|
|
||||||
vol.Optional(ATTR_WAIT_BOOT, default=600): vol.All(
|
|
||||||
vol.Coerce(int), vol.Range(min=60)
|
|
||||||
),
|
|
||||||
vol.Optional(ATTR_AUDIO_OUTPUT, default=None): vol.Maybe(vol.Coerce(str)),
|
|
||||||
vol.Optional(ATTR_AUDIO_INPUT, default=None): vol.Maybe(vol.Coerce(str)),
|
|
||||||
},
|
|
||||||
extra=vol.REMOVE_EXTRA,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# pylint: disable=no-value-for-parameter
|
# pylint: disable=no-value-for-parameter
|
||||||
SCHEMA_UPDATER_CONFIG = vol.Schema(
|
SCHEMA_UPDATER_CONFIG = vol.Schema(
|
||||||
{
|
{
|
||||||
|
Loading…
x
Reference in New Issue
Block a user