mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-08 17:56:33 +00:00
parent
dc1933fa88
commit
2c84daefab
4
API.md
4
API.md
@ -44,6 +44,8 @@ The addons from `addons` are only installed one.
|
|||||||
"logging": "debug|info|warning|error|critical",
|
"logging": "debug|info|warning|error|critical",
|
||||||
"ip_address": "ip address",
|
"ip_address": "ip address",
|
||||||
"wait_boot": "int",
|
"wait_boot": "int",
|
||||||
|
"debug": "bool",
|
||||||
|
"debug_block": "bool",
|
||||||
"addons": [
|
"addons": [
|
||||||
{
|
{
|
||||||
"name": "xy bla",
|
"name": "xy bla",
|
||||||
@ -80,6 +82,8 @@ Optional:
|
|||||||
"channel": "stable|beta|dev",
|
"channel": "stable|beta|dev",
|
||||||
"timezone": "TIMEZONE",
|
"timezone": "TIMEZONE",
|
||||||
"wait_boot": "int",
|
"wait_boot": "int",
|
||||||
|
"debug": "bool",
|
||||||
|
"debug_block": "bool",
|
||||||
"logging": "debug|info|warning|error|critical",
|
"logging": "debug|info|warning|error|critical",
|
||||||
"addons_repositories": [
|
"addons_repositories": [
|
||||||
"REPO_URL"
|
"REPO_URL"
|
||||||
|
11
Dockerfile
11
Dockerfile
@ -1,6 +1,8 @@
|
|||||||
ARG BUILD_FROM
|
ARG BUILD_FROM
|
||||||
FROM $BUILD_FROM
|
FROM $BUILD_FROM
|
||||||
|
|
||||||
|
ARG BUILD_ARCH
|
||||||
|
|
||||||
# Install base
|
# Install base
|
||||||
RUN apk add --no-cache \
|
RUN apk add --no-cache \
|
||||||
openssl \
|
openssl \
|
||||||
@ -15,13 +17,10 @@ RUN apk add --no-cache \
|
|||||||
# Install requirements
|
# Install requirements
|
||||||
COPY requirements.txt /usr/src/
|
COPY requirements.txt /usr/src/
|
||||||
RUN apk add --no-cache --virtual .build-dependencies \
|
RUN apk add --no-cache --virtual .build-dependencies \
|
||||||
make \
|
build-base \
|
||||||
g++ \
|
|
||||||
openssl-dev \
|
|
||||||
libffi-dev \
|
|
||||||
musl-dev \
|
|
||||||
&& export MAKEFLAGS="-j$(nproc)" \
|
&& export MAKEFLAGS="-j$(nproc)" \
|
||||||
&& pip3 install --no-cache-dir -r /usr/src/requirements.txt \
|
&& pip3 install --no-cache-dir --find-links https://wheels.hass.io/alpine-3.9/${BUILD_ARCH}/ \
|
||||||
|
-r /usr/src/requirements.txt \
|
||||||
&& apk del .build-dependencies \
|
&& apk del .build-dependencies \
|
||||||
&& rm -f /usr/src/requirements.txt
|
&& rm -f /usr/src/requirements.txt
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
[](https://dev.azure.com/home-assistant/Home%20Assistant/_build/latest?definitionId=2&branchName=dev)
|
[](https://dev.azure.com/home-assistant/Hass.io/_build/latest?definitionId=2&branchName=dev)
|
||||||
|
|
||||||
# Hass.io
|
# Hass.io
|
||||||
|
|
||||||
|
@ -40,6 +40,7 @@ if __name__ == "__main__":
|
|||||||
coresys = loop.run_until_complete(bootstrap.initialize_coresys())
|
coresys = loop.run_until_complete(bootstrap.initialize_coresys())
|
||||||
|
|
||||||
bootstrap.migrate_system_env(coresys)
|
bootstrap.migrate_system_env(coresys)
|
||||||
|
bootstrap.supervisor_debugger(coresys)
|
||||||
|
|
||||||
_LOGGER.info("Setup HassIO")
|
_LOGGER.info("Setup HassIO")
|
||||||
loop.run_until_complete(coresys.core.setup())
|
loop.run_until_complete(coresys.core.setup())
|
||||||
|
@ -14,6 +14,8 @@ from ..const import (
|
|||||||
ATTR_BLK_WRITE,
|
ATTR_BLK_WRITE,
|
||||||
ATTR_CHANNEL,
|
ATTR_CHANNEL,
|
||||||
ATTR_CPU_PERCENT,
|
ATTR_CPU_PERCENT,
|
||||||
|
ATTR_DEBUG,
|
||||||
|
ATTR_DEBUG_BLOCK,
|
||||||
ATTR_DESCRIPTON,
|
ATTR_DESCRIPTON,
|
||||||
ATTR_ICON,
|
ATTR_ICON,
|
||||||
ATTR_INSTALLED,
|
ATTR_INSTALLED,
|
||||||
@ -43,6 +45,7 @@ from .utils import api_process, api_process_raw, api_validate
|
|||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
# pylint: disable=no-value-for-parameter
|
||||||
SCHEMA_OPTIONS = vol.Schema(
|
SCHEMA_OPTIONS = vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Optional(ATTR_CHANNEL): CHANNELS,
|
vol.Optional(ATTR_CHANNEL): CHANNELS,
|
||||||
@ -50,6 +53,8 @@ SCHEMA_OPTIONS = vol.Schema(
|
|||||||
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,
|
||||||
vol.Optional(ATTR_LOGGING): LOG_LEVEL,
|
vol.Optional(ATTR_LOGGING): LOG_LEVEL,
|
||||||
|
vol.Optional(ATTR_DEBUG): vol.Boolean(),
|
||||||
|
vol.Optional(ATTR_DEBUG_BLOCK): vol.Boolean(),
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -111,6 +116,12 @@ class APISupervisor(CoreSysAttributes):
|
|||||||
if ATTR_WAIT_BOOT in body:
|
if ATTR_WAIT_BOOT in body:
|
||||||
self.sys_config.wait_boot = body[ATTR_WAIT_BOOT]
|
self.sys_config.wait_boot = body[ATTR_WAIT_BOOT]
|
||||||
|
|
||||||
|
if ATTR_DEBUG in body:
|
||||||
|
self.sys_config.debug = body[ATTR_DEBUG]
|
||||||
|
|
||||||
|
if ATTR_DEBUG_BLOCK in body:
|
||||||
|
self.sys_config.debug_block = body[ATTR_DEBUG_BLOCK]
|
||||||
|
|
||||||
if ATTR_LOGGING in body:
|
if ATTR_LOGGING in body:
|
||||||
self.sys_config.logging = body[ATTR_LOGGING]
|
self.sys_config.logging = body[ATTR_LOGGING]
|
||||||
|
|
||||||
|
@ -67,7 +67,7 @@ async def initialize_coresys():
|
|||||||
return coresys
|
return coresys
|
||||||
|
|
||||||
|
|
||||||
def initialize_system_data(coresys):
|
def initialize_system_data(coresys: CoreSys):
|
||||||
"""Set up the default configuration and create folders."""
|
"""Set up the default configuration and create folders."""
|
||||||
config = coresys.config
|
config = coresys.config
|
||||||
|
|
||||||
@ -124,7 +124,7 @@ def initialize_system_data(coresys):
|
|||||||
coresys.config.modify_log_level()
|
coresys.config.modify_log_level()
|
||||||
|
|
||||||
|
|
||||||
def migrate_system_env(coresys):
|
def migrate_system_env(coresys: CoreSys):
|
||||||
"""Cleanup some stuff after update."""
|
"""Cleanup some stuff after update."""
|
||||||
config = coresys.config
|
config = coresys.config
|
||||||
|
|
||||||
@ -207,3 +207,16 @@ def reg_signal(loop):
|
|||||||
loop.add_signal_handler(signal.SIGINT, lambda: loop.call_soon(loop.stop))
|
loop.add_signal_handler(signal.SIGINT, lambda: loop.call_soon(loop.stop))
|
||||||
except (ValueError, RuntimeError):
|
except (ValueError, RuntimeError):
|
||||||
_LOGGER.warning("Could not bind to SIGINT")
|
_LOGGER.warning("Could not bind to SIGINT")
|
||||||
|
|
||||||
|
|
||||||
|
def supervisor_debugger(coresys: CoreSys) -> None:
|
||||||
|
"""Setup debugger if needed."""
|
||||||
|
if not coresys.config.debug or not coresys.dev:
|
||||||
|
return
|
||||||
|
import ptvsd
|
||||||
|
|
||||||
|
_LOGGER.info("Initialize Hass.io debugger")
|
||||||
|
|
||||||
|
ptvsd.enable_attach(address=('0.0.0.0', 33333), redirect_output=True)
|
||||||
|
if coresys.config.debug_block:
|
||||||
|
ptvsd.wait_for_attach()
|
||||||
|
@ -2,19 +2,21 @@
|
|||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
import re
|
|
||||||
from pathlib import Path, PurePath
|
from pathlib import Path, PurePath
|
||||||
|
import re
|
||||||
|
|
||||||
import pytz
|
import pytz
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
|
ATTR_ADDONS_CUSTOM_LIST,
|
||||||
|
ATTR_DEBUG,
|
||||||
|
ATTR_DEBUG_BLOCK,
|
||||||
|
ATTR_LAST_BOOT,
|
||||||
|
ATTR_LOGGING,
|
||||||
|
ATTR_TIMEZONE,
|
||||||
|
ATTR_WAIT_BOOT,
|
||||||
FILE_HASSIO_CONFIG,
|
FILE_HASSIO_CONFIG,
|
||||||
HASSIO_DATA,
|
HASSIO_DATA,
|
||||||
ATTR_TIMEZONE,
|
|
||||||
ATTR_ADDONS_CUSTOM_LIST,
|
|
||||||
ATTR_LAST_BOOT,
|
|
||||||
ATTR_WAIT_BOOT,
|
|
||||||
ATTR_LOGGING,
|
|
||||||
)
|
)
|
||||||
from .utils.dt import parse_datetime
|
from .utils.dt import parse_datetime
|
||||||
from .utils.json import JsonConfig
|
from .utils.json import JsonConfig
|
||||||
@ -82,6 +84,26 @@ class CoreConfig(JsonConfig):
|
|||||||
"""Set wait boot time."""
|
"""Set wait boot time."""
|
||||||
self._data[ATTR_WAIT_BOOT] = value
|
self._data[ATTR_WAIT_BOOT] = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def debug(self) -> bool:
|
||||||
|
"""Return True if ptvsd is enabled."""
|
||||||
|
return self._data[ATTR_DEBUG]
|
||||||
|
|
||||||
|
@debug.setter
|
||||||
|
def debug(self, value: bool):
|
||||||
|
"""Set debug mode."""
|
||||||
|
self._data[ATTR_DEBUG] = value
|
||||||
|
|
||||||
|
@property
|
||||||
|
def debug_block(self) -> bool:
|
||||||
|
"""Return True if ptvsd should waiting."""
|
||||||
|
return self._data[ATTR_DEBUG_BLOCK]
|
||||||
|
|
||||||
|
@debug_block.setter
|
||||||
|
def debug_block(self, value: bool):
|
||||||
|
"""Set debug wait mode."""
|
||||||
|
self._data[ATTR_DEBUG_BLOCK] = value
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def logging(self) -> str:
|
def logging(self) -> str:
|
||||||
"""Return log level of system."""
|
"""Return log level of system."""
|
||||||
|
@ -208,6 +208,8 @@ ATTR_IP_ADDRESS = "ip_address"
|
|||||||
ATTR_SESSION = "session"
|
ATTR_SESSION = "session"
|
||||||
ATTR_ADMIN = "admin"
|
ATTR_ADMIN = "admin"
|
||||||
ATTR_PANELS = "panels"
|
ATTR_PANELS = "panels"
|
||||||
|
ATTR_DEBUG = "debug"
|
||||||
|
ATTR_DEBUG_BLOCK = "debug_block"
|
||||||
|
|
||||||
PROVIDE_SERVICE = "provide"
|
PROVIDE_SERVICE = "provide"
|
||||||
NEED_SERVICE = "need"
|
NEED_SERVICE = "need"
|
||||||
|
@ -78,7 +78,7 @@ class CoreSys:
|
|||||||
return None
|
return None
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def dev(self) -> str:
|
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 == CHANNEL_DEV
|
||||||
|
|
||||||
|
@ -9,6 +9,8 @@ from .const import (
|
|||||||
ATTR_ADDONS_CUSTOM_LIST,
|
ATTR_ADDONS_CUSTOM_LIST,
|
||||||
ATTR_BOOT,
|
ATTR_BOOT,
|
||||||
ATTR_CHANNEL,
|
ATTR_CHANNEL,
|
||||||
|
ATTR_DEBUG,
|
||||||
|
ATTR_DEBUG_BLOCK,
|
||||||
ATTR_HASSIO,
|
ATTR_HASSIO,
|
||||||
ATTR_HASSOS,
|
ATTR_HASSOS,
|
||||||
ATTR_HASSOS_CLI,
|
ATTR_HASSOS_CLI,
|
||||||
@ -120,6 +122,8 @@ SCHEMA_HASSIO_CONFIG = vol.Schema(
|
|||||||
): REPOSITORIES,
|
): REPOSITORIES,
|
||||||
vol.Optional(ATTR_WAIT_BOOT, default=5): WAIT_BOOT,
|
vol.Optional(ATTR_WAIT_BOOT, default=5): WAIT_BOOT,
|
||||||
vol.Optional(ATTR_LOGGING, default="info"): LOG_LEVEL,
|
vol.Optional(ATTR_LOGGING, default="info"): LOG_LEVEL,
|
||||||
|
vol.Optional(ATTR_DEBUG, default=False): vol.Boolean(),
|
||||||
|
vol.Optional(ATTR_DEBUG_BLOCK, default=False): vol.Boolean(),
|
||||||
},
|
},
|
||||||
extra=vol.REMOVE_EXTRA,
|
extra=vol.REMOVE_EXTRA,
|
||||||
)
|
)
|
||||||
|
@ -11,3 +11,4 @@ pytz==2019.1
|
|||||||
pyudev==0.21.0
|
pyudev==0.21.0
|
||||||
uvloop==0.12.2
|
uvloop==0.12.2
|
||||||
voluptuous==0.11.5
|
voluptuous==0.11.5
|
||||||
|
ptvsd==4.2.8
|
||||||
|
Loading…
x
Reference in New Issue
Block a user