mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-12 19:56:29 +00:00
Add automode
This commit is contained in:
parent
f340a19e40
commit
dbc080c24d
@ -40,6 +40,18 @@ class AddonManager(AddonsData):
|
||||
return
|
||||
self.read_addons_repo()
|
||||
|
||||
async def auto_boot(self, start_type):
|
||||
"""Boot addons with mode auto."""
|
||||
boot_list = self.list_startup(start_type)
|
||||
tasks = []
|
||||
|
||||
for addon in boot_list:
|
||||
tasks.append(self.loop.create_task(self.start_addon(addon)))
|
||||
|
||||
_LOGGER.info("Startup %s run %d addons.", start_type, len(tasks))
|
||||
if tasks:
|
||||
await asyncio.wait(tasks, loop=self.loop)
|
||||
|
||||
async def install_addon(self, addon, version=None):
|
||||
"""Install a addon."""
|
||||
if not self.exists_addon(addon):
|
||||
@ -108,10 +120,7 @@ class AddonManager(AddonsData):
|
||||
_LOGGER.error("Can't write options for addon %s.", addon)
|
||||
return False
|
||||
|
||||
if not await self.dockers[addon].run():
|
||||
return False
|
||||
|
||||
return True
|
||||
return await self.dockers[addon].run():
|
||||
|
||||
async def stop_addon(self, addon):
|
||||
"""Stop addon."""
|
||||
@ -119,10 +128,7 @@ class AddonManager(AddonsData):
|
||||
_LOGGER.error("No docker found for addon %s.", addon)
|
||||
return False
|
||||
|
||||
if not await self.dockers[addon].stop():
|
||||
return False
|
||||
|
||||
return True
|
||||
return await self.dockers[addon].stop():
|
||||
|
||||
async def update_addon(self, addon, version=None):
|
||||
"""Update addon."""
|
||||
@ -135,7 +141,4 @@ class AddonManager(AddonsData):
|
||||
return False
|
||||
|
||||
version = version or self.get_version(addon)
|
||||
if not await self.dockers[addon].update(version):
|
||||
return False
|
||||
|
||||
return True
|
||||
return await self.dockers[addon].update(version):
|
||||
|
@ -73,12 +73,12 @@ class AddonsData(Config):
|
||||
@property
|
||||
def list_installed(self):
|
||||
"""Return a list of installed addons."""
|
||||
return self._data.keys()
|
||||
return set(self._data.keys())
|
||||
|
||||
@property
|
||||
def list_all(self):
|
||||
"""Return a list of available addons."""
|
||||
return self._addons_data.keys()
|
||||
return set(self._addons_data.keys())
|
||||
|
||||
@property
|
||||
def list(self):
|
||||
@ -95,6 +95,21 @@ class AddonsData(Config):
|
||||
|
||||
return data
|
||||
|
||||
def list_startup(self, start_type):
|
||||
"""Get list of installed addon with need start by type."""
|
||||
addon_list = set()
|
||||
for addon, value in self._data.items():
|
||||
if self.get_boot(addon) != BOOT_AUTO:
|
||||
continue
|
||||
|
||||
try:
|
||||
if self._addons_data[addon][ATTR_STARTUP] == start_type:
|
||||
addon_list.add(addon)
|
||||
except KeyError:
|
||||
continue
|
||||
|
||||
return addon_list
|
||||
|
||||
def exists_addon(self, addon):
|
||||
"""Return True if a addon exists."""
|
||||
return addon in self._addons_data
|
||||
|
@ -10,7 +10,8 @@ from .addons import AddonManager
|
||||
from .api import RestAPI
|
||||
from .host_controll import HostControll
|
||||
from .const import (
|
||||
SOCKET_DOCKER, RUN_UPDATE_INFO_TASKS, RUN_RELOAD_ADDONS_TASKS)
|
||||
SOCKET_DOCKER, RUN_UPDATE_INFO_TASKS, RUN_RELOAD_ADDONS_TASKS,
|
||||
STARTUP_AFTER, STARTUP_BEFORE)
|
||||
from .scheduler import Scheduler
|
||||
from .dock.homeassistant import DockerHomeAssistant
|
||||
from .dock.supervisor import DockerSupervisor
|
||||
@ -87,9 +88,15 @@ class HassIO(object):
|
||||
# start api
|
||||
await self.api.start()
|
||||
|
||||
# start addon mark as before
|
||||
await self.addons.auto_boot(STARTUP_BEFORE)
|
||||
|
||||
# run HomeAssistant
|
||||
await self.homeassistant.run()
|
||||
|
||||
# start addon mark as after
|
||||
await self.addons.auto_boot(STARTUP_AFTER)
|
||||
|
||||
async def stop(self):
|
||||
"""Stop a running orchestration."""
|
||||
tasks = [self.websession.close(), self.api.stop()]
|
||||
|
Loading…
x
Reference in New Issue
Block a user