restic: add support for pruning

This commit is contained in:
Matt McHenry 2018-07-21 22:24:19 -04:00 committed by Jörg Thalheim
parent 6f7c3fbff7
commit c6994e90dc
No known key found for this signature in database
GPG Key ID: 003F2096411B5F92

View File

@ -103,6 +103,23 @@ in
Create the repository if it doesn't exist.
'';
};
pruneOpts = mkOption {
type = types.listOf types.str;
default = [];
description = ''
A list of options (--keep-* et al.) for 'restic forget
--prune', to automatically prune old snapshots. The
'forget' command is run *after* the 'backup' command, so
keep that in mind when constructing the --keep-* options.
'';
example = [
"--keep-daily 7"
"--keep-weekly 5"
"--keep-monthly 12"
"--keep-yearly 75"
];
};
};
}));
default = {};
@ -134,6 +151,11 @@ in
let
extraOptions = concatMapStrings (arg: " -o ${arg}") backup.extraOptions;
resticCmd = "${pkgs.restic}/bin/restic${extraOptions}";
pruneCmd = if (builtins.length backup.pruneOpts > 0)
then [ ( resticCmd + " forget --prune " +
(concatStringsSep " " backup.pruneOpts) )
( resticCmd + " check" ) ]
else [];
in nameValuePair "restic-backups-${name}" ({
environment = {
RESTIC_PASSWORD_FILE = backup.passwordFile;
@ -145,7 +167,7 @@ in
restartIfChanged = false;
serviceConfig = {
Type = "oneshot";
ExecStart = "${resticCmd} backup ${concatStringsSep " " backup.extraBackupArgs} ${concatStringsSep " " backup.paths}";
ExecStart = [ "${resticCmd} backup ${concatStringsSep " " backup.extraBackupArgs} ${concatStringsSep " " backup.paths}" ] ++ pruneCmd;
User = backup.user;
} // optionalAttrs (backup.s3CredentialsFile != null) {
EnvironmentFile = backup.s3CredentialsFile;