Allow rebuild for local build addons (#158)

* Allow rebuild for local build addons

* fix lint
This commit is contained in:
Pascal Vizeli 2017-08-19 22:44:39 +02:00 committed by GitHub
parent 6a7617faad
commit f9b12a2eb2
4 changed files with 33 additions and 0 deletions

4
API.md
View File

@ -435,6 +435,10 @@ Output is the raw Docker log.
- POST `/addons/{addon}/restart`
- POST `/addons/{addon}/rebuild`
Only supported for local build addons
## Host Control
Communicate over UNIX socket with a host daemon.

View File

@ -518,6 +518,27 @@ class Addon(object):
"""
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
async def snapshot(self, tar_file):
"""Snapshot a state of a addon."""

View File

@ -94,6 +94,8 @@ class RestAPI(object):
'/addons/{addon}/update', api_addons.update)
self.webapp.router.add_post(
'/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}/logo', api_addons.logo)

View File

@ -213,6 +213,12 @@ class APIAddons(object):
addon = self._extract_addon(request)
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)
def logs(self, request):
"""Return logs from addon."""