mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-19 15:16:33 +00:00
Add tasks and watchdog for homeassistant (#39)
* Add tasks and watchdog for homeassistant * code cleanup
This commit is contained in:
parent
c2ba02722c
commit
990ae49608
@ -17,6 +17,7 @@ HASSIO_SHARE = Path("/data")
|
|||||||
RUN_UPDATE_INFO_TASKS = 28800
|
RUN_UPDATE_INFO_TASKS = 28800
|
||||||
RUN_UPDATE_SUPERVISOR_TASKS = 29100
|
RUN_UPDATE_SUPERVISOR_TASKS = 29100
|
||||||
RUN_RELOAD_ADDONS_TASKS = 28800
|
RUN_RELOAD_ADDONS_TASKS = 28800
|
||||||
|
RUN_WATCHDOG_HOMEASSISTANT = 15
|
||||||
|
|
||||||
RESTART_EXIT_CODE = 100
|
RESTART_EXIT_CODE = 100
|
||||||
|
|
||||||
|
@ -11,10 +11,12 @@ from .api import RestAPI
|
|||||||
from .host_control import HostControl
|
from .host_control import HostControl
|
||||||
from .const import (
|
from .const import (
|
||||||
SOCKET_DOCKER, RUN_UPDATE_INFO_TASKS, RUN_RELOAD_ADDONS_TASKS,
|
SOCKET_DOCKER, RUN_UPDATE_INFO_TASKS, RUN_RELOAD_ADDONS_TASKS,
|
||||||
RUN_UPDATE_SUPERVISOR_TASKS, STARTUP_AFTER, STARTUP_BEFORE)
|
RUN_UPDATE_SUPERVISOR_TASKS, RUN_WATCHDOG_HOMEASSISTANT, STARTUP_AFTER,
|
||||||
|
STARTUP_BEFORE)
|
||||||
from .scheduler import Scheduler
|
from .scheduler import Scheduler
|
||||||
from .dock.homeassistant import DockerHomeAssistant
|
from .dock.homeassistant import DockerHomeAssistant
|
||||||
from .dock.supervisor import DockerSupervisor
|
from .dock.supervisor import DockerSupervisor
|
||||||
|
from .tasks import hassio_update, homeassistant_watchdog, homeassistant_setup
|
||||||
from .tools import get_arch_from_image, get_local_ip
|
from .tools import get_arch_from_image, get_local_ip
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
@ -78,7 +80,8 @@ class HassIO(object):
|
|||||||
# first start of supervisor?
|
# first start of supervisor?
|
||||||
if not await self.homeassistant.exists():
|
if not await self.homeassistant.exists():
|
||||||
_LOGGER.info("No HomeAssistant docker found.")
|
_LOGGER.info("No HomeAssistant docker found.")
|
||||||
await self._setup_homeassistant()
|
await homeassistant_setup(
|
||||||
|
self.config, self.loop, self.homeassistant)
|
||||||
|
|
||||||
# Load addons
|
# Load addons
|
||||||
arch = get_arch_from_image(self.supervisor.image)
|
arch = get_arch_from_image(self.supervisor.image)
|
||||||
@ -90,7 +93,8 @@ class HassIO(object):
|
|||||||
|
|
||||||
# schedule self update task
|
# schedule self update task
|
||||||
self.scheduler.register_task(
|
self.scheduler.register_task(
|
||||||
self._hassio_update, RUN_UPDATE_SUPERVISOR_TASKS)
|
hassio_update(self.config, self.supervisor),
|
||||||
|
RUN_UPDATE_SUPERVISOR_TASKS)
|
||||||
|
|
||||||
async def start(self):
|
async def start(self):
|
||||||
"""Start HassIO orchestration."""
|
"""Start HassIO orchestration."""
|
||||||
@ -109,6 +113,11 @@ class HassIO(object):
|
|||||||
# run HomeAssistant
|
# run HomeAssistant
|
||||||
await self.homeassistant.run()
|
await self.homeassistant.run()
|
||||||
|
|
||||||
|
# schedule homeassistant watchdog
|
||||||
|
self.scheduler.register_task(
|
||||||
|
homeassistant_watchdog(self.loop, self.homeassistant),
|
||||||
|
RUN_WATCHDOG_HOMEASSISTANT)
|
||||||
|
|
||||||
# start addon mark as after
|
# start addon mark as after
|
||||||
await self.addons.auto_boot(STARTUP_AFTER)
|
await self.addons.auto_boot(STARTUP_AFTER)
|
||||||
|
|
||||||
@ -123,28 +132,3 @@ class HassIO(object):
|
|||||||
|
|
||||||
self.exit_code = exit_code
|
self.exit_code = exit_code
|
||||||
self.loop.stop()
|
self.loop.stop()
|
||||||
|
|
||||||
async def _setup_homeassistant(self):
|
|
||||||
"""Install a homeassistant docker container."""
|
|
||||||
while True:
|
|
||||||
# read homeassistant tag and install it
|
|
||||||
if not self.config.last_homeassistant:
|
|
||||||
await self.config.fetch_update_infos()
|
|
||||||
|
|
||||||
tag = self.config.last_homeassistant
|
|
||||||
if tag and await self.homeassistant.install(tag):
|
|
||||||
break
|
|
||||||
_LOGGER.warning("Error on setup HomeAssistant. Retry in 60.")
|
|
||||||
await asyncio.sleep(60, loop=self.loop)
|
|
||||||
|
|
||||||
# store version
|
|
||||||
_LOGGER.info("HomeAssistant docker now installed.")
|
|
||||||
|
|
||||||
async def _hassio_update(self):
|
|
||||||
"""Check and run update of supervisor hassio."""
|
|
||||||
if self.config.last_hassio == self.supervisor.version:
|
|
||||||
return
|
|
||||||
|
|
||||||
_LOGGER.info(
|
|
||||||
"Found new HassIO version %s.", self.config.last_hassio)
|
|
||||||
await self.supervisor.update(self.config.last_hassio)
|
|
||||||
|
47
hassio/tasks.py
Normal file
47
hassio/tasks.py
Normal file
@ -0,0 +1,47 @@
|
|||||||
|
"""Multible tasks."""
|
||||||
|
import asyncio
|
||||||
|
import logging
|
||||||
|
|
||||||
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
def hassio_update(config, supervisor):
|
||||||
|
"""Create scheduler task for update of supervisor hassio."""
|
||||||
|
async def _hassio_update():
|
||||||
|
"""Check and run update of supervisor hassio."""
|
||||||
|
if config.last_hassio == supervisor.version:
|
||||||
|
return
|
||||||
|
|
||||||
|
_LOGGER.info("Found new HassIO version %s.", config.last_hassio)
|
||||||
|
await supervisor.update(config.last_hassio)
|
||||||
|
|
||||||
|
return _hassio_update
|
||||||
|
|
||||||
|
|
||||||
|
def homeassistant_watchdog(loop, homeassistant):
|
||||||
|
"""Create scheduler task for montoring running state."""
|
||||||
|
async def _homeassistant_watchdog():
|
||||||
|
"""Check running state and start if they is close."""
|
||||||
|
if homeassistant.in_progress or await homeassistant.is_running():
|
||||||
|
return
|
||||||
|
|
||||||
|
loop.create_task(homeassistant.run())
|
||||||
|
|
||||||
|
return _homeassistant_watchdog
|
||||||
|
|
||||||
|
|
||||||
|
async def homeassistant_setup(config, loop, homeassistant):
|
||||||
|
"""Install a homeassistant docker container."""
|
||||||
|
while True:
|
||||||
|
# read homeassistant tag and install it
|
||||||
|
if not config.last_homeassistant:
|
||||||
|
await config.fetch_update_infos()
|
||||||
|
|
||||||
|
tag = config.last_homeassistant
|
||||||
|
if tag and await homeassistant.install(tag):
|
||||||
|
break
|
||||||
|
_LOGGER.warning("Error on setup HomeAssistant. Retry in 60.")
|
||||||
|
await asyncio.sleep(60, loop=loop)
|
||||||
|
|
||||||
|
# store version
|
||||||
|
_LOGGER.info("HomeAssistant docker now installed.")
|
Loading…
x
Reference in New Issue
Block a user