mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-16 13:46:31 +00:00
Fix image arch version on restore/update (#928)
This commit is contained in:
parent
813fcc41f0
commit
6983dcc267
@ -8,6 +8,7 @@ import re
|
|||||||
import shutil
|
import shutil
|
||||||
import tarfile
|
import tarfile
|
||||||
from tempfile import TemporaryDirectory
|
from tempfile import TemporaryDirectory
|
||||||
|
from typing import Dict, Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
from voluptuous.humanize import humanize_error
|
from voluptuous.humanize import humanize_error
|
||||||
@ -108,32 +109,34 @@ class Addon(CoreSysAttributes):
|
|||||||
"""Return installed version."""
|
"""Return installed version."""
|
||||||
return self._data.user.get(self._id, {}).get(ATTR_VERSION)
|
return self._data.user.get(self._id, {}).get(ATTR_VERSION)
|
||||||
|
|
||||||
def _set_install(self, version):
|
def _set_install(self, image: str, version: str) -> None:
|
||||||
"""Set addon as installed."""
|
"""Set addon as installed."""
|
||||||
self._data.system[self._id] = deepcopy(self._data.cache[self._id])
|
self._data.system[self._id] = deepcopy(self._data.cache[self._id])
|
||||||
self._data.user[self._id] = {
|
self._data.user[self._id] = {
|
||||||
ATTR_OPTIONS: {},
|
ATTR_OPTIONS: {},
|
||||||
ATTR_VERSION: version,
|
ATTR_VERSION: version,
|
||||||
ATTR_IMAGE: self.image_name,
|
ATTR_IMAGE: image,
|
||||||
}
|
}
|
||||||
self.save_data()
|
self.save_data()
|
||||||
|
|
||||||
def _set_uninstall(self):
|
def _set_uninstall(self) -> None:
|
||||||
"""Set add-on as uninstalled."""
|
"""Set add-on as uninstalled."""
|
||||||
self._data.system.pop(self._id, None)
|
self._data.system.pop(self._id, None)
|
||||||
self._data.user.pop(self._id, None)
|
self._data.user.pop(self._id, None)
|
||||||
self.save_data()
|
self.save_data()
|
||||||
|
|
||||||
def _set_update(self, version):
|
def _set_update(self, image: str, version: str) -> None:
|
||||||
"""Update version of add-on."""
|
"""Update version of add-on."""
|
||||||
self._data.system[self._id] = deepcopy(self._data.cache[self._id])
|
self._data.system[self._id] = deepcopy(self._data.cache[self._id])
|
||||||
self._data.user[self._id][ATTR_VERSION] = version
|
self._data.user[self._id][ATTR_VERSION] = version
|
||||||
self.save_data()
|
self.save_data()
|
||||||
|
|
||||||
def _restore_data(self, user, system):
|
def _restore_data(self, user: Dict[str, Any], system: Dict[str, Any], image: str) -> None:
|
||||||
"""Restore data to add-on."""
|
"""Restore data to add-on."""
|
||||||
self._data.user[self._id] = deepcopy(user)
|
self._data.user[self._id] = deepcopy(user)
|
||||||
self._data.system[self._id] = deepcopy(system)
|
self._data.system[self._id] = deepcopy(system)
|
||||||
|
|
||||||
|
self._data.user[self._id][ATTR_IMAGE] = image
|
||||||
self.save_data()
|
self.save_data()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
@ -725,7 +728,7 @@ class Addon(CoreSysAttributes):
|
|||||||
self.last_version, self.image_name):
|
self.last_version, self.image_name):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self._set_install(self.last_version)
|
self._set_install(self.image_name, self.last_version)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
@ -805,7 +808,7 @@ class Addon(CoreSysAttributes):
|
|||||||
if not await self.instance.update(
|
if not await self.instance.update(
|
||||||
self.last_version, self.image_name):
|
self.last_version, self.image_name):
|
||||||
return False
|
return False
|
||||||
self._set_update(self.last_version)
|
self._set_update(self.image_name, self.last_version)
|
||||||
|
|
||||||
# Setup/Fix AppArmor profile
|
# Setup/Fix AppArmor profile
|
||||||
await self._install_apparmor()
|
await self._install_apparmor()
|
||||||
@ -950,7 +953,7 @@ class Addon(CoreSysAttributes):
|
|||||||
|
|
||||||
# Restore data or reload add-on
|
# Restore data or reload add-on
|
||||||
_LOGGER.info("Restore config for addon %s", self._id)
|
_LOGGER.info("Restore config for addon %s", self._id)
|
||||||
self._restore_data(data[ATTR_USER], data[ATTR_SYSTEM])
|
self._restore_data(data[ATTR_USER], data[ATTR_SYSTEM], self.image_name)
|
||||||
|
|
||||||
# Check version / restore image
|
# Check version / restore image
|
||||||
version = data[ATTR_VERSION]
|
version = data[ATTR_VERSION]
|
||||||
@ -961,7 +964,7 @@ class Addon(CoreSysAttributes):
|
|||||||
if image_file.is_file():
|
if image_file.is_file():
|
||||||
await self.instance.import_image(image_file, version)
|
await self.instance.import_image(image_file, version)
|
||||||
else:
|
else:
|
||||||
if await self.instance.install(version):
|
if await self.instance.install(version, self.image_name):
|
||||||
await self.instance.cleanup()
|
await self.instance.cleanup()
|
||||||
else:
|
else:
|
||||||
await self.instance.stop()
|
await self.instance.stop()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user