Fix partial backup with Core (#3476)

* Fix partial backup with Core

* reformat

* same style
This commit is contained in:
Pascal Vizeli 2022-03-02 15:54:34 +01:00 committed by GitHub
parent 7ae8dfe587
commit 8984d4afd6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 28 additions and 23 deletions

View File

@ -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(),
}
)

View File

@ -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

View File

@ -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,