Add cleanup

This commit is contained in:
pvizeli 2017-04-18 16:20:19 +02:00
parent 454d82d985
commit c9876988da
4 changed files with 45 additions and 14 deletions

View File

@ -14,6 +14,7 @@ HOMEASSISTANT_CURRENT = 'homeassistant_current'
HASSIO_SSL = "{}/ssl"
HASSIO_CURRENT = 'hassio_current'
HASSIO_CLEANUP = 'hassio_cleanup'
ADDONS_REPO = "{}/addons"
ADDONS_DATA = "{}/addons_data"
@ -87,6 +88,20 @@ class CoreConfig(Config):
"""Set beta upstream mode."""
self._data[UPSTREAM_BETA] = bool(value)
@property
def cleanup_hassio(self):
"""Return Version they need to cleanup."""
return self._data.get(HASSIO_CLEANUP)
@cleanup_hassio.setter
def cleanup_hassio(self, version):
"""Set or remove cleanup flag."""
if version is None:
self._data.pop(HASSIO_CLEANUP, None)
else:
self._data[HASSIO_CLEANUP] = version
self.save()
@property
def homeassistant_image(self):
"""Return docker homeassistant repository."""

View File

@ -50,6 +50,7 @@ class HassIO(object):
"""Setup HassIO orchestration."""
# supervisor
await self.supervisor.attach()
await self.supervisor.cleanup()
# hostcontroll
host_info = await self.host_controll.info()

View File

@ -209,10 +209,7 @@ class DockerBase(object):
return True
async def update(self, tag):
"""Update a docker image.
Return a Future.
"""
"""Update a docker image."""
if self._lock.locked():
_LOGGER.error("Can't excute update while a task is in progress")
return False

View File

@ -1,6 +1,8 @@
"""Init file for HassIO docker object."""
import os
import docker
from . import DockerBase
@ -19,27 +21,43 @@ class DockerSupervisor(DockerBase):
return os.environ['SUPERVISOR_NAME']
async def update(self, tag):
"""Update a supervisor docker image.
Return a Future.
"""
"""Update a supervisor docker image."""
if self._lock.locked():
_LOGGER.error("Can't excute update while a task is in progress")
return False
_LOGGER.info("Update supervisor docker to %s:%s", self.image, tag)
old_version = self.version
async with self._lock:
if await self.loop.run_in_executor(None, self._update, tag):
if await self.loop.run_in_executor(None, self._install, tag):
self.config.hassio_cleanup = old_version
self.loop.create_task(self.hassio.stop(RESTART_EXIT_CODE))
def _update(self, tag):
"""Update a docker image.
async def cleanup(self):
"""Check if old supervisor version exists and cleanup."""
if not self.config.hassio_cleanup:
return
async with self._lock:
if await self.loop.run_in_executor(None, self._cleanup):
self.config.hassio_cleanup = None
def _cleanup(self):
"""Remove old image.
Need run inside executor.
"""
_LOGGER.info("Update supervisor docker to %s:%s", self.image, tag)
old_image = "{}:{}".format(self.image, self.config.hassio_cleanup)
# update docker image
return self._install(tag)
_LOGGER.info("Old supervisor docker found %s", old_image)
try:
self.dock.images.remove(image=old_image, force=True)
except docker.errors.DockerException as err:
_LOGGER.warning("Can't remove old image %s -> %s", old_image, err)
return False
return True
async def run(self):
"""Run docker image."""