mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-08 01:36:29 +00:00
Enable Armv7 for Add-ons (#936)
* Enable Armv7 for Add-ons * Cleanups * fix tests
This commit is contained in:
parent
9ba4ea7d18
commit
f1fecdde3a
@ -60,11 +60,6 @@ class Addon(CoreSysAttributes):
|
|||||||
return
|
return
|
||||||
await self.instance.attach()
|
await self.instance.attach()
|
||||||
|
|
||||||
# NOTE: Can't be removed after soon
|
|
||||||
if ATTR_IMAGE not in self._data.user[self._id]:
|
|
||||||
self._data.user[self._id][ATTR_IMAGE] = self.image_name
|
|
||||||
self.save_data()
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def slug(self):
|
def slug(self):
|
||||||
"""Return slug/id of add-on."""
|
"""Return slug/id of add-on."""
|
||||||
@ -510,19 +505,20 @@ class Addon(CoreSysAttributes):
|
|||||||
def image(self):
|
def image(self):
|
||||||
"""Return image name of add-on."""
|
"""Return image name of add-on."""
|
||||||
if self.is_installed:
|
if self.is_installed:
|
||||||
# NOTE: cleanup
|
return self._data.user[self._id].get(ATTR_IMAGE)
|
||||||
if ATTR_IMAGE in self._data.user[self._id]:
|
return self.image_next
|
||||||
return self._data.user[self._id][ATTR_IMAGE]
|
|
||||||
return self.image_name
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def image_name(self):
|
def image_next(self):
|
||||||
"""Return image name for install/update."""
|
"""Return image name for install/update."""
|
||||||
if self.is_detached:
|
if self.is_detached:
|
||||||
addon_data = self._data.system.get(self._id)
|
addon_data = self._data.system.get(self._id)
|
||||||
else:
|
else:
|
||||||
addon_data = self._data.cache.get(self._id)
|
addon_data = self._data.cache.get(self._id)
|
||||||
|
return self._get_image(addon_data)
|
||||||
|
|
||||||
|
def _get_image(self, addon_data) -> str:
|
||||||
|
"""Generate image name from data."""
|
||||||
# Repository with Dockerhub images
|
# Repository with Dockerhub images
|
||||||
if ATTR_IMAGE in addon_data:
|
if ATTR_IMAGE in addon_data:
|
||||||
arch = self.sys_arch.match(addon_data[ATTR_ARCH])
|
arch = self.sys_arch.match(addon_data[ATTR_ARCH])
|
||||||
@ -724,10 +720,10 @@ class Addon(CoreSysAttributes):
|
|||||||
await self._install_apparmor()
|
await self._install_apparmor()
|
||||||
|
|
||||||
if not await self.instance.install(
|
if not await self.instance.install(
|
||||||
self.last_version, self.image_name):
|
self.last_version, self.image_next):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
self._set_install(self.image_name, self.last_version)
|
self._set_install(self.image_next, self.last_version)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
@check_installed
|
@check_installed
|
||||||
@ -805,9 +801,9 @@ class Addon(CoreSysAttributes):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
if not await self.instance.update(
|
if not await self.instance.update(
|
||||||
self.last_version, self.image_name):
|
self.last_version, self.image_next):
|
||||||
return False
|
return False
|
||||||
self._set_update(self.image_name, self.last_version)
|
self._set_update(self.image_next, self.last_version)
|
||||||
|
|
||||||
# Setup/Fix AppArmor profile
|
# Setup/Fix AppArmor profile
|
||||||
await self._install_apparmor()
|
await self._install_apparmor()
|
||||||
@ -952,7 +948,8 @@ 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.image_name)
|
restore_image = self._get_image(data[ATTR_SYSTEM])
|
||||||
|
self._restore_data(data[ATTR_USER], data[ATTR_SYSTEM], restore_image)
|
||||||
|
|
||||||
# Check version / restore image
|
# Check version / restore image
|
||||||
version = data[ATTR_VERSION]
|
version = data[ATTR_VERSION]
|
||||||
@ -963,7 +960,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, self.image_name):
|
if await self.instance.install(version, restore_image):
|
||||||
await self.instance.cleanup()
|
await self.instance.cleanup()
|
||||||
else:
|
else:
|
||||||
await self.instance.stop()
|
await self.instance.stop()
|
||||||
|
@ -156,7 +156,7 @@ SCHEMA_BUILD_CONFIG = vol.Schema({
|
|||||||
# pylint: disable=no-value-for-parameter
|
# pylint: disable=no-value-for-parameter
|
||||||
SCHEMA_ADDON_USER = vol.Schema({
|
SCHEMA_ADDON_USER = vol.Schema({
|
||||||
vol.Required(ATTR_VERSION): vol.Coerce(str),
|
vol.Required(ATTR_VERSION): vol.Coerce(str),
|
||||||
vol.Optional(ATTR_IMAGE): vol.Maybe(vol.Coerce(str)),
|
vol.Optional(ATTR_IMAGE): vol.Coerce(str),
|
||||||
vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): UUID_MATCH,
|
vol.Optional(ATTR_UUID, default=lambda: uuid.uuid4().hex): UUID_MATCH,
|
||||||
vol.Optional(ATTR_ACCESS_TOKEN): SHA256,
|
vol.Optional(ATTR_ACCESS_TOKEN): SHA256,
|
||||||
vol.Optional(ATTR_OPTIONS, default=dict): dict,
|
vol.Optional(ATTR_OPTIONS, default=dict): dict,
|
||||||
|
@ -3,22 +3,27 @@
|
|||||||
"armhf"
|
"armhf"
|
||||||
],
|
],
|
||||||
"raspberrypi2": [
|
"raspberrypi2": [
|
||||||
|
"armv7",
|
||||||
"armhf"
|
"armhf"
|
||||||
],
|
],
|
||||||
"raspberrypi3": [
|
"raspberrypi3": [
|
||||||
|
"armv7",
|
||||||
"armhf"
|
"armhf"
|
||||||
],
|
],
|
||||||
"raspberrypi3-64": [
|
"raspberrypi3-64": [
|
||||||
"aarch64",
|
"aarch64",
|
||||||
|
"armv7",
|
||||||
"armhf"
|
"armhf"
|
||||||
],
|
],
|
||||||
"tinker": [
|
"tinker": [
|
||||||
|
"armv7",
|
||||||
"armhf"
|
"armhf"
|
||||||
],
|
],
|
||||||
"odroid-c2": [
|
"odroid-c2": [
|
||||||
"aarch64"
|
"aarch64"
|
||||||
],
|
],
|
||||||
"odroid-xu": [
|
"odroid-xu": [
|
||||||
|
"armv7",
|
||||||
"armhf"
|
"armhf"
|
||||||
],
|
],
|
||||||
"orangepi-prime": [
|
"orangepi-prime": [
|
||||||
|
@ -46,8 +46,8 @@ async def test_raspberrypi2_arch(coresys, sys_machine):
|
|||||||
sys_machine.return_value = "raspberrypi2"
|
sys_machine.return_value = "raspberrypi2"
|
||||||
await coresys.arch.load()
|
await coresys.arch.load()
|
||||||
|
|
||||||
assert coresys.arch.default == "armhf"
|
assert coresys.arch.default == "armv7"
|
||||||
assert coresys.arch.supported == ["armhf"]
|
assert coresys.arch.supported == ["armv7", "armhf"]
|
||||||
|
|
||||||
|
|
||||||
async def test_raspberrypi3_arch(coresys, sys_machine):
|
async def test_raspberrypi3_arch(coresys, sys_machine):
|
||||||
@ -55,8 +55,8 @@ async def test_raspberrypi3_arch(coresys, sys_machine):
|
|||||||
sys_machine.return_value = "raspberrypi3"
|
sys_machine.return_value = "raspberrypi3"
|
||||||
await coresys.arch.load()
|
await coresys.arch.load()
|
||||||
|
|
||||||
assert coresys.arch.default == "armhf"
|
assert coresys.arch.default == "armv7"
|
||||||
assert coresys.arch.supported == ["armhf"]
|
assert coresys.arch.supported == ["armv7", "armhf"]
|
||||||
|
|
||||||
|
|
||||||
async def test_raspberrypi3_64_arch(coresys, sys_machine):
|
async def test_raspberrypi3_64_arch(coresys, sys_machine):
|
||||||
@ -65,7 +65,7 @@ async def test_raspberrypi3_64_arch(coresys, sys_machine):
|
|||||||
await coresys.arch.load()
|
await coresys.arch.load()
|
||||||
|
|
||||||
assert coresys.arch.default == "aarch64"
|
assert coresys.arch.default == "aarch64"
|
||||||
assert coresys.arch.supported == ["aarch64", "armhf"]
|
assert coresys.arch.supported == ["aarch64", "armv7", "armhf"]
|
||||||
|
|
||||||
|
|
||||||
async def test_tinker_arch(coresys, sys_machine):
|
async def test_tinker_arch(coresys, sys_machine):
|
||||||
@ -73,8 +73,8 @@ async def test_tinker_arch(coresys, sys_machine):
|
|||||||
sys_machine.return_value = "tinker"
|
sys_machine.return_value = "tinker"
|
||||||
await coresys.arch.load()
|
await coresys.arch.load()
|
||||||
|
|
||||||
assert coresys.arch.default == "armhf"
|
assert coresys.arch.default == "armv7"
|
||||||
assert coresys.arch.supported == ["armhf"]
|
assert coresys.arch.supported == ["armv7", "armhf"]
|
||||||
|
|
||||||
|
|
||||||
async def test_odroid_c2_arch(coresys, sys_machine):
|
async def test_odroid_c2_arch(coresys, sys_machine):
|
||||||
@ -91,8 +91,8 @@ async def test_odroid_xu_arch(coresys, sys_machine):
|
|||||||
sys_machine.return_value = "odroid-xu"
|
sys_machine.return_value = "odroid-xu"
|
||||||
await coresys.arch.load()
|
await coresys.arch.load()
|
||||||
|
|
||||||
assert coresys.arch.default == "armhf"
|
assert coresys.arch.default == "armv7"
|
||||||
assert coresys.arch.supported == ["armhf"]
|
assert coresys.arch.supported == ["armv7", "armhf"]
|
||||||
|
|
||||||
|
|
||||||
async def test_orangepi_prime_arch(coresys, sys_machine):
|
async def test_orangepi_prime_arch(coresys, sys_machine):
|
||||||
|
Loading…
x
Reference in New Issue
Block a user