diff --git a/API.md b/API.md index e0bb0159b..32f96620f 100644 --- a/API.md +++ b/API.md @@ -480,7 +480,7 @@ Get all available addons. "homeassistant_api": "bool", "full_access": "bool", "protected": "bool", - "rating": "1-5", + "rating": "1-6", "stdin": "bool", "webui": "null|http(s)://[HOST]:port/xy/zx", "gpio": "bool", diff --git a/hassio/addons/utils.py b/hassio/addons/utils.py index 27c393f09..83f05ad2e 100644 --- a/hassio/addons/utils.py +++ b/hassio/addons/utils.py @@ -19,7 +19,7 @@ def rating_security(addon): 1 = not secure 5 = high secure """ - rating = 4 + rating = 5 # AppArmor if addon.apparmor == SECURITY_DISABLE: @@ -36,6 +36,10 @@ def rating_security(addon): PRIVILEGED_SYS_RAWIO): rating += -1 + # Not secure Networking + if addon.host_network: + rating += -1 + # Full Access if addon.with_full_access: rating += -2 @@ -44,7 +48,7 @@ def rating_security(addon): if addon.access_docker_api: rating = 1 - return max(min(5, rating), 1) + return max(min(6, rating), 1) def get_hash_from_repository(name): diff --git a/hassio/const.py b/hassio/const.py index 1a28061f9..002805399 100644 --- a/hassio/const.py +++ b/hassio/const.py @@ -2,7 +2,7 @@ from pathlib import Path from ipaddress import ip_network -HASSIO_VERSION = '126' +HASSIO_VERSION = '127' URL_HASSIO_ADDONS = "https://github.com/home-assistant/hassio-addons" URL_HASSIO_VERSION = \ diff --git a/hassio/docker/homeassistant.py b/hassio/docker/homeassistant.py index ea54f00cf..556d355ea 100644 --- a/hassio/docker/homeassistant.py +++ b/hassio/docker/homeassistant.py @@ -102,6 +102,8 @@ class DockerHomeAssistant(DockerInterface): {'bind': '/config', 'mode': 'rw'}, str(self.sys_config.path_extern_ssl): {'bind': '/ssl', 'mode': 'ro'}, + str(self.sys_config.path_extern_share): + {'bind': '/share', 'mode': 'ro'}, } ) diff --git a/hassio/homeassistant.py b/hassio/homeassistant.py index 832a2d04b..660603632 100644 --- a/hassio/homeassistant.py +++ b/hassio/homeassistant.py @@ -4,6 +4,7 @@ from contextlib import asynccontextmanager, suppress import logging import os import re +from pathlib import Path import socket import time @@ -437,6 +438,9 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): async def _block_till_run(self): """Block until Home-Assistant is booting up or startup timeout.""" start_time = time.monotonic() + migration_progress = False + migration_file = Path( + self.sys_config.path_homeassistant, '.migration_progress') def check_port(): """Check if port is mapped.""" @@ -452,21 +456,39 @@ class HomeAssistant(JsonConfig, CoreSysAttributes): pass return False - while time.monotonic() - start_time < self.wait_boot: + while True: + await asyncio.sleep(10) + + # 1 + # Check if Container is is_running + if not await self.instance.is_running(): + _LOGGER.error("HomeAssistant is crashed!") + break + + # 2 # Check if API response if await self.sys_run_in_executor(check_port): _LOGGER.info("Detect a running HomeAssistant instance") self._error_state = False return - # wait and don't hit the system - await asyncio.sleep(10) + # 3 + # Running DB Migration + if migration_file.exists(): + if not migration_progress: + migration_progress = True + _LOGGER.info("HomeAssistant record migration in progress") + continue + elif migration_progress: + migration_progress = False # Reset start time + start_time = time.monotonic() + _LOGGER.info("HomeAssistant record migration done") - # Check if Container is is_running - if not await self.instance.is_running(): - _LOGGER.error("Home Assistant is crashed!") + # 4 + # Timeout + if time.monotonic() - start_time > self.wait_boot: + _LOGGER.warning("Don't wait anymore of HomeAssistant startup!") break - _LOGGER.warning("Don't wait anymore of HomeAssistant startup!") self._error_state = True raise HomeAssistantError()