From 539df08706465a63057d541863626d215c409cfc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=B6rg=20Thalheim?= Date: Wed, 20 Mar 2024 07:49:27 +0100 Subject: [PATCH] backups: skip preRestore and postRestore if not specified by a service --- nixosModules/clanCore/state.nix | 12 ++++---- pkgs/clan-cli/clan_cli/backups/restore.py | 34 ++++++++++++----------- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/nixosModules/clanCore/state.nix b/nixosModules/clanCore/state.nix index 50bc80a1..26555c15 100644 --- a/nixosModules/clanCore/state.nix +++ b/nixosModules/clanCore/state.nix @@ -17,18 +17,18 @@ Folder where state resides in ''; }; - preRestoreScript = lib.mkOption { - type = lib.types.str; - default = ":"; + preRestoreCommand = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; description = '' script to run before restoring the state dir from a backup Utilize this to stop services which currently access these folders ''; }; - postRestoreScript = lib.mkOption { - type = lib.types.str; - default = ":"; + postRestoreCommand = lib.mkOption { + type = lib.types.nullOr lib.types.str; + default = null; description = '' script to restore the service after the state dir was restored from a backup diff --git a/pkgs/clan-cli/clan_cli/backups/restore.py b/pkgs/clan-cli/clan_cli/backups/restore.py index e94aaf25..5125a8cf 100644 --- a/pkgs/clan-cli/clan_cli/backups/restore.py +++ b/pkgs/clan-cli/clan_cli/backups/restore.py @@ -14,15 +14,16 @@ def restore_service(machine: Machine, name: str, provider: str, service: str) -> env["NAME"] = name env["FOLDERS"] = ":".join(folders) - proc = machine.target_host.run( - [backup_folders[service]["preRestoreScript"]], - stdout=subprocess.PIPE, - extra_env=env, - ) - if proc.returncode != 0: - raise ClanError( - f"failed to run preRestoreScript: {backup_folders[service]['preRestoreScript']}, error was: {proc.stdout}" + if pre_restore := backup_folders[service]["preRestoreCommand"]: + proc = machine.target_host.run( + [pre_restore], + stdout=subprocess.PIPE, + extra_env=env, ) + if proc.returncode != 0: + raise ClanError( + f"failed to run preRestoreCommand: {pre_restore}, error was: {proc.stdout}" + ) proc = machine.target_host.run( [backup_metadata["providers"][provider]["restore"]], @@ -34,15 +35,16 @@ def restore_service(machine: Machine, name: str, provider: str, service: str) -> f"failed to restore backup: {backup_metadata['providers'][provider]['restore']}" ) - proc = machine.target_host.run( - [backup_folders[service]["postRestoreScript"]], - stdout=subprocess.PIPE, - extra_env=env, - ) - if proc.returncode != 0: - raise ClanError( - f"failed to run postRestoreScript: {backup_folders[service]['postRestoreScript']}, error was: {proc.stdout}" + if post_restore := backup_folders[service]["postRestoreCommand"]: + proc = machine.target_host.run( + [post_restore], + stdout=subprocess.PIPE, + extra_env=env, ) + if proc.returncode != 0: + raise ClanError( + f"failed to run postRestoreCommand: {post_restore}, error was: {proc.stdout}" + ) def restore_backup(