mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-09 10:16:29 +00:00
Allow rebuild for local build addons (#158)
* Allow rebuild for local build addons * fix lint
This commit is contained in:
parent
6a7617faad
commit
f9b12a2eb2
4
API.md
4
API.md
@ -435,6 +435,10 @@ Output is the raw Docker log.
|
|||||||
|
|
||||||
- POST `/addons/{addon}/restart`
|
- POST `/addons/{addon}/restart`
|
||||||
|
|
||||||
|
- POST `/addons/{addon}/rebuild`
|
||||||
|
|
||||||
|
Only supported for local build addons
|
||||||
|
|
||||||
## Host Control
|
## Host Control
|
||||||
|
|
||||||
Communicate over UNIX socket with a host daemon.
|
Communicate over UNIX socket with a host daemon.
|
||||||
|
@ -518,6 +518,27 @@ class Addon(object):
|
|||||||
"""
|
"""
|
||||||
return self.docker.logs()
|
return self.docker.logs()
|
||||||
|
|
||||||
|
@check_installed
|
||||||
|
async def rebuild(self):
|
||||||
|
"""Performe a rebuild of local build addon."""
|
||||||
|
last_state = await self.state()
|
||||||
|
|
||||||
|
if not self.need_build:
|
||||||
|
_LOGGER.error("Can't rebuild a none local build addon!")
|
||||||
|
return False
|
||||||
|
|
||||||
|
# remove docker container but not addon config
|
||||||
|
if not await self.docker.remove():
|
||||||
|
return False
|
||||||
|
|
||||||
|
if not await self.docker.install(self.version_installed):
|
||||||
|
return False
|
||||||
|
|
||||||
|
# restore state
|
||||||
|
if last_state == STATE_STARTED:
|
||||||
|
await self.docker.run()
|
||||||
|
return True
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
async def snapshot(self, tar_file):
|
async def snapshot(self, tar_file):
|
||||||
"""Snapshot a state of a addon."""
|
"""Snapshot a state of a addon."""
|
||||||
|
@ -94,6 +94,8 @@ class RestAPI(object):
|
|||||||
'/addons/{addon}/update', api_addons.update)
|
'/addons/{addon}/update', api_addons.update)
|
||||||
self.webapp.router.add_post(
|
self.webapp.router.add_post(
|
||||||
'/addons/{addon}/options', api_addons.options)
|
'/addons/{addon}/options', api_addons.options)
|
||||||
|
self.webapp.router.add_post(
|
||||||
|
'/addons/{addon}/rebuild', api_addons.rebuild)
|
||||||
self.webapp.router.add_get('/addons/{addon}/logs', api_addons.logs)
|
self.webapp.router.add_get('/addons/{addon}/logs', api_addons.logs)
|
||||||
self.webapp.router.add_get('/addons/{addon}/logo', api_addons.logo)
|
self.webapp.router.add_get('/addons/{addon}/logo', api_addons.logo)
|
||||||
|
|
||||||
|
@ -213,6 +213,12 @@ class APIAddons(object):
|
|||||||
addon = self._extract_addon(request)
|
addon = self._extract_addon(request)
|
||||||
return asyncio.shield(addon.restart(), loop=self.loop)
|
return asyncio.shield(addon.restart(), loop=self.loop)
|
||||||
|
|
||||||
|
@api_process
|
||||||
|
def rebuild(self, request):
|
||||||
|
"""Rebuild local build addon."""
|
||||||
|
addon = self._extract_addon(request)
|
||||||
|
return asyncio.shield(addon.rebuild(), 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."""
|
||||||
|
Loading…
x
Reference in New Issue
Block a user