mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-25 18:16:32 +00:00
parent
2bc2a476d9
commit
81413d08ed
@ -3,6 +3,7 @@ from datetime import datetime
|
|||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
from pathlib import Path, PurePath
|
from pathlib import Path, PurePath
|
||||||
|
from typing import Optional
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
ATTR_ADDONS_CUSTOM_LIST,
|
ATTR_ADDONS_CUSTOM_LIST,
|
||||||
@ -11,6 +12,7 @@ from .const import (
|
|||||||
ATTR_LAST_BOOT,
|
ATTR_LAST_BOOT,
|
||||||
ATTR_LOGGING,
|
ATTR_LOGGING,
|
||||||
ATTR_TIMEZONE,
|
ATTR_TIMEZONE,
|
||||||
|
ATTR_VERSION,
|
||||||
ATTR_WAIT_BOOT,
|
ATTR_WAIT_BOOT,
|
||||||
ENV_SUPERVISOR_SHARE,
|
ENV_SUPERVISOR_SHARE,
|
||||||
FILE_HASSIO_CONFIG,
|
FILE_HASSIO_CONFIG,
|
||||||
@ -59,6 +61,16 @@ class CoreConfig(JsonConfig):
|
|||||||
"""Set system timezone."""
|
"""Set system timezone."""
|
||||||
self._data[ATTR_TIMEZONE] = value
|
self._data[ATTR_TIMEZONE] = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def version(self) -> Optional[str]:
|
||||||
|
"""Return config version."""
|
||||||
|
return self._data.get(ATTR_VERSION)
|
||||||
|
|
||||||
|
@version.setter
|
||||||
|
def version(self, value: str):
|
||||||
|
"""Set config version."""
|
||||||
|
self._data[ATTR_VERSION] = str
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def wait_boot(self) -> int:
|
def wait_boot(self) -> int:
|
||||||
"""Return wait time for auto boot stages."""
|
"""Return wait time for auto boot stages."""
|
||||||
|
@ -25,11 +25,22 @@ class Core(CoreSysAttributes):
|
|||||||
"""Initialize Supervisor object."""
|
"""Initialize Supervisor object."""
|
||||||
self.coresys: CoreSys = coresys
|
self.coresys: CoreSys = coresys
|
||||||
self.state: CoreStates = CoreStates.INITIALIZE
|
self.state: CoreStates = CoreStates.INITIALIZE
|
||||||
|
self.healthy: bool = True
|
||||||
|
|
||||||
async def connect(self):
|
async def connect(self):
|
||||||
"""Connect Supervisor container."""
|
"""Connect Supervisor container."""
|
||||||
await self.sys_supervisor.load()
|
await self.sys_supervisor.load()
|
||||||
|
|
||||||
|
# Check if system is healthy
|
||||||
|
if self.sys_dev:
|
||||||
|
self.sys_config.version = self.sys_supervisor.version
|
||||||
|
elif (
|
||||||
|
self.sys_config.version
|
||||||
|
and self.sys_config.version != self.sys_supervisor.version
|
||||||
|
):
|
||||||
|
self.healthy = False
|
||||||
|
_LOGGER.fatal("System running in a unhealthy state. Please update you OS!")
|
||||||
|
|
||||||
async def setup(self):
|
async def setup(self):
|
||||||
"""Setup supervisor orchestration."""
|
"""Setup supervisor orchestration."""
|
||||||
self.state = CoreStates.STARTUP
|
self.state = CoreStates.STARTUP
|
||||||
@ -90,8 +101,8 @@ class Core(CoreSysAttributes):
|
|||||||
# On release channel, try update itself
|
# On release channel, try update itself
|
||||||
if self.sys_supervisor.need_update:
|
if self.sys_supervisor.need_update:
|
||||||
try:
|
try:
|
||||||
if self.sys_dev:
|
if self.sys_dev or not self.healthy:
|
||||||
_LOGGER.warning("Ignore Supervisor updates on dev!")
|
_LOGGER.warning("Ignore Supervisor updates!")
|
||||||
else:
|
else:
|
||||||
await self.sys_supervisor.update()
|
await self.sys_supervisor.update()
|
||||||
except SupervisorUpdateError:
|
except SupervisorUpdateError:
|
||||||
|
@ -101,7 +101,7 @@ class HassOS(CoreSysAttributes):
|
|||||||
if cpe.get_product()[0] != "hassos":
|
if cpe.get_product()[0] != "hassos":
|
||||||
raise NotImplementedError()
|
raise NotImplementedError()
|
||||||
except NotImplementedError:
|
except NotImplementedError:
|
||||||
_LOGGER.debug("Found no HassOS")
|
_LOGGER.warning("No Home Assistant Operating-System found!")
|
||||||
return
|
return
|
||||||
else:
|
else:
|
||||||
self._available = True
|
self._available = True
|
||||||
|
@ -3,8 +3,8 @@ import asyncio
|
|||||||
import logging
|
import logging
|
||||||
from typing import Dict, List
|
from typing import Dict, List
|
||||||
|
|
||||||
from ..coresys import CoreSys, CoreSysAttributes
|
|
||||||
from ..const import REPOSITORY_CORE, REPOSITORY_LOCAL
|
from ..const import REPOSITORY_CORE, REPOSITORY_LOCAL
|
||||||
|
from ..coresys import CoreSys, CoreSysAttributes
|
||||||
from .addon import AddonStore
|
from .addon import AddonStore
|
||||||
from .data import StoreData
|
from .data import StoreData
|
||||||
from .repository import Repository
|
from .repository import Repository
|
||||||
|
@ -124,6 +124,9 @@ class Supervisor(CoreSysAttributes):
|
|||||||
except DockerAPIError:
|
except DockerAPIError:
|
||||||
_LOGGER.error("Update of Supervisor fails!")
|
_LOGGER.error("Update of Supervisor fails!")
|
||||||
raise SupervisorUpdateError() from None
|
raise SupervisorUpdateError() from None
|
||||||
|
else:
|
||||||
|
self.sys_config.version = version
|
||||||
|
self.sys_config.save_data()
|
||||||
|
|
||||||
with suppress(SupervisorError):
|
with suppress(SupervisorError):
|
||||||
await self.update_apparmor()
|
await self.update_apparmor()
|
||||||
|
@ -100,7 +100,7 @@ DOCKER_PORTS_DESCRIPTION = vol.Schema(
|
|||||||
SCHEMA_HASS_CONFIG = vol.Schema(
|
SCHEMA_HASS_CONFIG = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): uuid_match,
|
vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): uuid_match,
|
||||||
vol.Optional(ATTR_VERSION): vol.Maybe(vol.Coerce(str)),
|
vol.Optional(ATTR_VERSION): vol.Coerce(str),
|
||||||
vol.Optional(ATTR_IMAGE): docker_image,
|
vol.Optional(ATTR_IMAGE): docker_image,
|
||||||
vol.Optional(ATTR_ACCESS_TOKEN): token,
|
vol.Optional(ATTR_ACCESS_TOKEN): token,
|
||||||
vol.Optional(ATTR_BOOT, default=True): vol.Boolean(),
|
vol.Optional(ATTR_BOOT, default=True): vol.Boolean(),
|
||||||
@ -151,6 +151,7 @@ SCHEMA_SUPERVISOR_CONFIG = vol.Schema(
|
|||||||
{
|
{
|
||||||
vol.Optional(ATTR_TIMEZONE, default="UTC"): validate_timezone,
|
vol.Optional(ATTR_TIMEZONE, default="UTC"): validate_timezone,
|
||||||
vol.Optional(ATTR_LAST_BOOT): vol.Coerce(str),
|
vol.Optional(ATTR_LAST_BOOT): vol.Coerce(str),
|
||||||
|
vol.Optional(ATTR_VERSION): vol.Coerce(str),
|
||||||
vol.Optional(
|
vol.Optional(
|
||||||
ATTR_ADDONS_CUSTOM_LIST,
|
ATTR_ADDONS_CUSTOM_LIST,
|
||||||
default=["https://github.com/hassio-addons/repository"],
|
default=["https://github.com/hassio-addons/repository"],
|
||||||
|
Loading…
x
Reference in New Issue
Block a user