mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-13 20:26:29 +00:00
Add automode
This commit is contained in:
parent
f340a19e40
commit
dbc080c24d
@ -40,6 +40,18 @@ class AddonManager(AddonsData):
|
|||||||
return
|
return
|
||||||
self.read_addons_repo()
|
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):
|
async def install_addon(self, addon, version=None):
|
||||||
"""Install a addon."""
|
"""Install a addon."""
|
||||||
if not self.exists_addon(addon):
|
if not self.exists_addon(addon):
|
||||||
@ -108,10 +120,7 @@ class AddonManager(AddonsData):
|
|||||||
_LOGGER.error("Can't write options for addon %s.", addon)
|
_LOGGER.error("Can't write options for addon %s.", addon)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not await self.dockers[addon].run():
|
return await self.dockers[addon].run():
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
async def stop_addon(self, addon):
|
async def stop_addon(self, addon):
|
||||||
"""Stop addon."""
|
"""Stop addon."""
|
||||||
@ -119,10 +128,7 @@ class AddonManager(AddonsData):
|
|||||||
_LOGGER.error("No docker found for addon %s.", addon)
|
_LOGGER.error("No docker found for addon %s.", addon)
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if not await self.dockers[addon].stop():
|
return await self.dockers[addon].stop():
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
async def update_addon(self, addon, version=None):
|
async def update_addon(self, addon, version=None):
|
||||||
"""Update addon."""
|
"""Update addon."""
|
||||||
@ -135,7 +141,4 @@ class AddonManager(AddonsData):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
version = version or self.get_version(addon)
|
version = version or self.get_version(addon)
|
||||||
if not await self.dockers[addon].update(version):
|
return await self.dockers[addon].update(version):
|
||||||
return False
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
@ -73,12 +73,12 @@ class AddonsData(Config):
|
|||||||
@property
|
@property
|
||||||
def list_installed(self):
|
def list_installed(self):
|
||||||
"""Return a list of installed addons."""
|
"""Return a list of installed addons."""
|
||||||
return self._data.keys()
|
return set(self._data.keys())
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def list_all(self):
|
def list_all(self):
|
||||||
"""Return a list of available addons."""
|
"""Return a list of available addons."""
|
||||||
return self._addons_data.keys()
|
return set(self._addons_data.keys())
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def list(self):
|
def list(self):
|
||||||
@ -95,6 +95,21 @@ class AddonsData(Config):
|
|||||||
|
|
||||||
return data
|
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):
|
def exists_addon(self, addon):
|
||||||
"""Return True if a addon exists."""
|
"""Return True if a addon exists."""
|
||||||
return addon in self._addons_data
|
return addon in self._addons_data
|
||||||
|
@ -10,7 +10,8 @@ from .addons import AddonManager
|
|||||||
from .api import RestAPI
|
from .api import RestAPI
|
||||||
from .host_controll import HostControll
|
from .host_controll import HostControll
|
||||||
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,
|
||||||
|
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
|
||||||
@ -87,9 +88,15 @@ class HassIO(object):
|
|||||||
# start api
|
# start api
|
||||||
await self.api.start()
|
await self.api.start()
|
||||||
|
|
||||||
|
# start addon mark as before
|
||||||
|
await self.addons.auto_boot(STARTUP_BEFORE)
|
||||||
|
|
||||||
# run HomeAssistant
|
# run HomeAssistant
|
||||||
await self.homeassistant.run()
|
await self.homeassistant.run()
|
||||||
|
|
||||||
|
# start addon mark as after
|
||||||
|
await self.addons.auto_boot(STARTUP_AFTER)
|
||||||
|
|
||||||
async def stop(self):
|
async def stop(self):
|
||||||
"""Stop a running orchestration."""
|
"""Stop a running orchestration."""
|
||||||
tasks = [self.websession.close(), self.api.stop()]
|
tasks = [self.websession.close(), self.api.stop()]
|
||||||
|
Loading…
x
Reference in New Issue
Block a user