mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-22 16:46:29 +00:00
Return a error on update with own version (#124)
Return a error on update with own version
This commit is contained in:
parent
3809f20c6a
commit
8afde1e881
@ -413,14 +413,20 @@ class Addon(object):
|
|||||||
return STATE_STOPPED
|
return STATE_STOPPED
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
async def start(self):
|
def start(self):
|
||||||
"""Set options and start addon."""
|
"""Set options and start addon.
|
||||||
return await self.addon_docker.run()
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
|
return self.addon_docker.run()
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
async def stop(self):
|
def stop(self):
|
||||||
"""Stop addon."""
|
"""Stop addon.
|
||||||
return await self.addon_docker.stop()
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
|
return self.addon_docker.stop()
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
async def update(self, version=None):
|
async def update(self, version=None):
|
||||||
@ -430,7 +436,7 @@ class Addon(object):
|
|||||||
if version == self.version_installed:
|
if version == self.version_installed:
|
||||||
_LOGGER.warning(
|
_LOGGER.warning(
|
||||||
"Addon %s is already installed in %s", self._id, version)
|
"Addon %s is already installed in %s", self._id, version)
|
||||||
return True
|
return False
|
||||||
|
|
||||||
if not await self.addon_docker.update(version):
|
if not await self.addon_docker.update(version):
|
||||||
return False
|
return False
|
||||||
@ -439,14 +445,20 @@ class Addon(object):
|
|||||||
return True
|
return True
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
async def restart(self):
|
def restart(self):
|
||||||
"""Restart addon."""
|
"""Restart addon.
|
||||||
return await self.addon_docker.restart()
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
|
return self.addon_docker.restart()
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
async def logs(self):
|
def logs(self):
|
||||||
"""Return addons log output."""
|
"""Return addons log output.
|
||||||
return await self.addon_docker.logs()
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
|
return self.addon_docker.logs()
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
async def snapshot(self, tar_file):
|
async def snapshot(self, tar_file):
|
||||||
|
@ -152,20 +152,26 @@ class APIAddons(object):
|
|||||||
"""Install addon."""
|
"""Install addon."""
|
||||||
body = await api_validate(SCHEMA_VERSION, request)
|
body = await api_validate(SCHEMA_VERSION, request)
|
||||||
addon = self._extract_addon(request, check_installed=False)
|
addon = self._extract_addon(request, check_installed=False)
|
||||||
version = body.get(ATTR_VERSION)
|
version = body.get(ATTR_VERSION, addon.last_version)
|
||||||
|
|
||||||
return await asyncio.shield(
|
return await asyncio.shield(
|
||||||
addon.install(version=version), loop=self.loop)
|
addon.install(version=version), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def uninstall(self, request):
|
def uninstall(self, request):
|
||||||
"""Uninstall addon."""
|
"""Uninstall addon.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
addon = self._extract_addon(request)
|
addon = self._extract_addon(request)
|
||||||
return await asyncio.shield(addon.uninstall(), loop=self.loop)
|
return asyncio.shield(addon.uninstall(), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def start(self, request):
|
def start(self, request):
|
||||||
"""Start addon."""
|
"""Start addon.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
addon = self._extract_addon(request)
|
addon = self._extract_addon(request)
|
||||||
|
|
||||||
# check options
|
# check options
|
||||||
@ -175,33 +181,45 @@ class APIAddons(object):
|
|||||||
except vol.Invalid as ex:
|
except vol.Invalid as ex:
|
||||||
raise RuntimeError(humanize_error(options, ex)) from None
|
raise RuntimeError(humanize_error(options, ex)) from None
|
||||||
|
|
||||||
return await asyncio.shield(addon.start(), loop=self.loop)
|
return asyncio.shield(addon.start(), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def stop(self, request):
|
def stop(self, request):
|
||||||
"""Stop addon."""
|
"""Stop addon.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
addon = self._extract_addon(request)
|
addon = self._extract_addon(request)
|
||||||
return await asyncio.shield(addon.stop(), loop=self.loop)
|
return asyncio.shield(addon.stop(), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def update(self, request):
|
async def update(self, request):
|
||||||
"""Update addon."""
|
"""Update addon."""
|
||||||
body = await api_validate(SCHEMA_VERSION, request)
|
body = await api_validate(SCHEMA_VERSION, request)
|
||||||
addon = self._extract_addon(request)
|
addon = self._extract_addon(request)
|
||||||
version = body.get(ATTR_VERSION)
|
version = body.get(ATTR_VERSION, addon.last_version)
|
||||||
|
|
||||||
|
if version == addon.version_installed:
|
||||||
|
raise RuntimeError("Version %s is already in use", version)
|
||||||
|
|
||||||
return await asyncio.shield(
|
return await asyncio.shield(
|
||||||
addon.update(version=version), loop=self.loop)
|
addon.update(version=version), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def restart(self, request):
|
def restart(self, request):
|
||||||
"""Restart addon."""
|
"""Restart addon.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
addon = self._extract_addon(request)
|
addon = self._extract_addon(request)
|
||||||
return await asyncio.shield(addon.restart(), loop=self.loop)
|
return asyncio.shield(addon.restart(), loop=self.loop)
|
||||||
|
|
||||||
@api_process_raw(CONTENT_TYPE_BINARY)
|
@api_process_raw(CONTENT_TYPE_BINARY)
|
||||||
def logs(self, request):
|
def logs(self, request):
|
||||||
"""Return logs from addon."""
|
"""Return logs from addon.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
addon = self._extract_addon(request)
|
addon = self._extract_addon(request)
|
||||||
return addon.logs()
|
return addon.logs()
|
||||||
|
|
||||||
|
@ -65,20 +65,19 @@ class APIHomeAssistant(object):
|
|||||||
body = await api_validate(SCHEMA_VERSION, request)
|
body = await api_validate(SCHEMA_VERSION, request)
|
||||||
version = body.get(ATTR_VERSION, self.config.last_homeassistant)
|
version = body.get(ATTR_VERSION, self.config.last_homeassistant)
|
||||||
|
|
||||||
if self.homeassistant.in_progress:
|
if version == self.homeassistant.version:
|
||||||
raise RuntimeError("Other task is in progress")
|
raise RuntimeError("Version {} is already in use".format(version))
|
||||||
|
|
||||||
return await asyncio.shield(
|
return await asyncio.shield(
|
||||||
self.homeassistant.update(version), loop=self.loop)
|
self.homeassistant.update(version), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def restart(self, request):
|
def restart(self, request):
|
||||||
"""Restart homeassistant."""
|
"""Restart homeassistant.
|
||||||
if self.homeassistant.in_progress:
|
|
||||||
raise RuntimeError("Other task is in progress")
|
|
||||||
|
|
||||||
return await asyncio.shield(
|
Return a coroutine.
|
||||||
self.homeassistant.restart(), loop=self.loop)
|
"""
|
||||||
|
return asyncio.shield(self.homeassistant.restart(), loop=self.loop)
|
||||||
|
|
||||||
@api_process_raw(CONTENT_TYPE_BINARY)
|
@api_process_raw(CONTENT_TYPE_BINARY)
|
||||||
def logs(self, request):
|
def logs(self, request):
|
||||||
|
@ -40,12 +40,18 @@ class APIHost(object):
|
|||||||
|
|
||||||
@api_process_hostcontrol
|
@api_process_hostcontrol
|
||||||
def reboot(self, request):
|
def reboot(self, request):
|
||||||
"""Reboot host."""
|
"""Reboot host.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
return self.host_control.reboot()
|
return self.host_control.reboot()
|
||||||
|
|
||||||
@api_process_hostcontrol
|
@api_process_hostcontrol
|
||||||
def shutdown(self, request):
|
def shutdown(self, request):
|
||||||
"""Poweroff host."""
|
"""Poweroff host.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
return self.host_control.shutdown()
|
return self.host_control.shutdown()
|
||||||
|
|
||||||
@api_process_hostcontrol
|
@api_process_hostcontrol
|
||||||
@ -55,7 +61,7 @@ class APIHost(object):
|
|||||||
version = body.get(ATTR_VERSION, self.host_control.last_version)
|
version = body.get(ATTR_VERSION, self.host_control.last_version)
|
||||||
|
|
||||||
if version == self.host_control.version:
|
if version == self.host_control.version:
|
||||||
raise RuntimeError("Version is already in use")
|
raise RuntimeError("Version {} is already in use".format(version))
|
||||||
|
|
||||||
return await asyncio.shield(
|
return await asyncio.shield(
|
||||||
self.host_control.update(version=version), loop=self.loop)
|
self.host_control.update(version=version), loop=self.loop)
|
||||||
|
@ -111,10 +111,13 @@ class APISnapshots(object):
|
|||||||
self.snapshots.do_snapshot_partial(**body), loop=self.loop)
|
self.snapshots.do_snapshot_partial(**body), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def restore_full(self, request):
|
def restore_full(self, request):
|
||||||
"""Full-Restore a snapshot."""
|
"""Full-Restore a snapshot.
|
||||||
|
|
||||||
|
Return a coroutine.
|
||||||
|
"""
|
||||||
snapshot = self._extract_snapshot(request)
|
snapshot = self._extract_snapshot(request)
|
||||||
return await asyncio.shield(
|
return asyncio.shield(
|
||||||
self.snapshots.do_restore_full(snapshot), loop=self.loop)
|
self.snapshots.do_restore_full(snapshot), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
@ -125,7 +128,8 @@ class APISnapshots(object):
|
|||||||
|
|
||||||
return await asyncio.shield(
|
return await asyncio.shield(
|
||||||
self.snapshots.do_restore_partial(snapshot, **body),
|
self.snapshots.do_restore_partial(snapshot, **body),
|
||||||
loop=self.loop)
|
loop=self.loop
|
||||||
|
)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def remove(self, request):
|
async def remove(self, request):
|
||||||
|
@ -96,10 +96,10 @@ class APISupervisor(object):
|
|||||||
version = body.get(ATTR_VERSION, self.config.last_hassio)
|
version = body.get(ATTR_VERSION, self.config.last_hassio)
|
||||||
|
|
||||||
if version == self.supervisor.version:
|
if version == self.supervisor.version:
|
||||||
raise RuntimeError("Version is already in use")
|
raise RuntimeError("Version {} is already in use".format(version))
|
||||||
|
|
||||||
return await asyncio.shield(
|
return await asyncio.shield(
|
||||||
self.supervisor.update(version), loop=self.loop)
|
self.supervisor.update(version=version), loop=self.loop)
|
||||||
|
|
||||||
@api_process
|
@api_process
|
||||||
async def reload(self, request):
|
async def reload(self, request):
|
||||||
|
@ -113,13 +113,15 @@ class HomeAssistant(JsonConfig):
|
|||||||
_LOGGER.info("HomeAssistant docker now installed")
|
_LOGGER.info("HomeAssistant docker now installed")
|
||||||
await self.docker.cleanup()
|
await self.docker.cleanup()
|
||||||
|
|
||||||
def update(self, version=None):
|
async def update(self, version=None):
|
||||||
"""Update HomeAssistant version.
|
"""Update HomeAssistant version."""
|
||||||
|
|
||||||
Return a coroutine.
|
|
||||||
"""
|
|
||||||
version = version or self.last_version
|
version = version or self.last_version
|
||||||
return self.docker.update(version)
|
|
||||||
|
if version == self.docker.version:
|
||||||
|
_LOGGER.warning("Version %s is already installed", version)
|
||||||
|
return False
|
||||||
|
|
||||||
|
return await self.docker.update(version)
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
"""Run HomeAssistant docker.
|
"""Run HomeAssistant docker.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user