mirror of
https://github.com/home-assistant/supervisor.git
synced 2025-07-23 17:16:33 +00:00
Fix partial backup with Core (#3476)
* Fix partial backup with Core * reformat * same style
This commit is contained in:
parent
7ae8dfe587
commit
8984d4afd6
@ -9,7 +9,7 @@ from aiohttp import web
|
||||
from aiohttp.hdrs import CONTENT_DISPOSITION
|
||||
import voluptuous as vol
|
||||
|
||||
from ..backups.validate import ALL_FOLDERS
|
||||
from ..backups.validate import ALL_FOLDERS, FOLDER_HOMEASSISTANT
|
||||
from ..const import (
|
||||
ATTR_ADDONS,
|
||||
ATTR_BACKUPS,
|
||||
@ -36,13 +36,16 @@ _LOGGER: logging.Logger = logging.getLogger(__name__)
|
||||
|
||||
RE_SLUGIFY_NAME = re.compile(r"[^A-Za-z0-9]+")
|
||||
|
||||
# Backwards compatible / Remove 2022.08
|
||||
_ALL_FOLDERS = ALL_FOLDERS + [FOLDER_HOMEASSISTANT]
|
||||
|
||||
# pylint: disable=no-value-for-parameter
|
||||
SCHEMA_RESTORE_PARTIAL = vol.Schema(
|
||||
{
|
||||
vol.Optional(ATTR_PASSWORD): vol.Maybe(str),
|
||||
vol.Optional(ATTR_HOMEASSISTANT): vol.Boolean(),
|
||||
vol.Optional(ATTR_ADDONS): vol.All([str], vol.Unique()),
|
||||
vol.Optional(ATTR_FOLDERS): vol.All([vol.In(ALL_FOLDERS)], vol.Unique()),
|
||||
vol.Optional(ATTR_FOLDERS): vol.All([vol.In(_ALL_FOLDERS)], vol.Unique()),
|
||||
}
|
||||
)
|
||||
|
||||
@ -59,7 +62,7 @@ SCHEMA_BACKUP_FULL = vol.Schema(
|
||||
SCHEMA_BACKUP_PARTIAL = SCHEMA_BACKUP_FULL.extend(
|
||||
{
|
||||
vol.Optional(ATTR_ADDONS): vol.All([str], vol.Unique()),
|
||||
vol.Optional(ATTR_FOLDERS): vol.All([vol.In(ALL_FOLDERS)], vol.Unique()),
|
||||
vol.Optional(ATTR_FOLDERS): vol.All([vol.In(_ALL_FOLDERS)], vol.Unique()),
|
||||
vol.Optional(ATTR_HOMEASSISTANT): vol.Boolean(),
|
||||
}
|
||||
)
|
||||
|
@ -144,13 +144,11 @@ class BackupManager(CoreSysAttributes):
|
||||
_LOGGER.info("Backing up %s store Add-ons", backup.slug)
|
||||
await backup.store_addons(addon_list)
|
||||
|
||||
# Backup folders
|
||||
# HomeAssistant Folder is for v1
|
||||
if homeassistant or FOLDER_HOMEASSISTANT in folder_list:
|
||||
if homeassistant:
|
||||
await backup.store_homeassistant()
|
||||
folder_list = list(folder_list)
|
||||
folder_list.remove(FOLDER_HOMEASSISTANT)
|
||||
|
||||
# Backup folders
|
||||
if folder_list:
|
||||
_LOGGER.info("Backing up %s store folders", backup.slug)
|
||||
await backup.store_folders(folder_list)
|
||||
@ -186,12 +184,12 @@ class BackupManager(CoreSysAttributes):
|
||||
@Job(conditions=[JobCondition.FREE_SPACE, JobCondition.RUNNING])
|
||||
async def do_backup_partial(
|
||||
self,
|
||||
name="",
|
||||
addons=None,
|
||||
folders=None,
|
||||
password=None,
|
||||
homeassistant=True,
|
||||
compressed=True,
|
||||
name: str = "",
|
||||
addons: list[str] | None = None,
|
||||
folders: list[str] | None = None,
|
||||
password: str | None = None,
|
||||
homeassistant: bool = False,
|
||||
compressed: bool = True,
|
||||
):
|
||||
"""Create a partial backup."""
|
||||
if self.lock.locked():
|
||||
@ -201,6 +199,11 @@ class BackupManager(CoreSysAttributes):
|
||||
addons = addons or []
|
||||
folders = folders or []
|
||||
|
||||
# HomeAssistant Folder is for v1
|
||||
if FOLDER_HOMEASSISTANT in folders:
|
||||
folders.remove(FOLDER_HOMEASSISTANT)
|
||||
homeassistant = True
|
||||
|
||||
if len(addons) == 0 and len(folders) == 0 and not homeassistant:
|
||||
_LOGGER.error("Nothing to create backup for")
|
||||
|
||||
@ -227,15 +230,10 @@ class BackupManager(CoreSysAttributes):
|
||||
self,
|
||||
backup: Backup,
|
||||
addon_list: list[str],
|
||||
folder_list: list[Path],
|
||||
folder_list: list[str],
|
||||
homeassistant: bool,
|
||||
replace: bool,
|
||||
):
|
||||
# Version 1
|
||||
if FOLDER_HOMEASSISTANT in folder_list:
|
||||
folder_list.remove(FOLDER_HOMEASSISTANT)
|
||||
homeassistant = backup.homeassistant_version is not None
|
||||
|
||||
try:
|
||||
task_hass: asyncio.Task | None = None
|
||||
async with backup:
|
||||
@ -356,6 +354,14 @@ class BackupManager(CoreSysAttributes):
|
||||
_LOGGER.error("A backup/restore process is already running")
|
||||
return False
|
||||
|
||||
addon_list = addons or []
|
||||
folder_list = folders or []
|
||||
|
||||
# Version 1
|
||||
if FOLDER_HOMEASSISTANT in folder_list:
|
||||
folder_list.remove(FOLDER_HOMEASSISTANT)
|
||||
homeassistant = True
|
||||
|
||||
if backup.protected and not backup.set_password(password):
|
||||
_LOGGER.error("Invalid password for backup %s", backup.slug)
|
||||
return False
|
||||
@ -364,9 +370,6 @@ class BackupManager(CoreSysAttributes):
|
||||
_LOGGER.error("No Home Assistant Core data inside the backup")
|
||||
return False
|
||||
|
||||
addon_list = addons or []
|
||||
folder_list = folders or []
|
||||
|
||||
_LOGGER.info("Partial-Restore %s start", backup.slug)
|
||||
async with self.lock:
|
||||
self.sys_core.state = CoreState.FREEZE
|
||||
|
@ -31,7 +31,6 @@ from ..const import (
|
||||
from ..validate import SCHEMA_DOCKER_CONFIG, repositories, version_tag
|
||||
|
||||
ALL_FOLDERS = [
|
||||
FOLDER_HOMEASSISTANT,
|
||||
FOLDER_SHARE,
|
||||
FOLDER_ADDONS,
|
||||
FOLDER_SSL,
|
||||
|
Loading…
x
Reference in New Issue
Block a user