[backup] fix errors
All checks were successful
Check flake syntax / flake-check (push) Successful in 5m44s

This commit is contained in:
2025-03-16 10:09:03 +01:00
parent 286e03c853
commit d5e94b50cb

View File

@@ -2,8 +2,18 @@
with lib;
let
cfg = config.malobeo.backup;
newfunc = (hostname: datasetNames: (map (dataset: { name = "${hostname}_${dataset.sourceDataset}"; value = { inherit hostname; inherit dataset; }; } ) datasetNames));
hostToCommand = (hostname: datasetNames:
(map (dataset: {
name = "${hostname}_${dataset.sourceDataset}";
value = {
inherit hostname;
inherit (dataset) sourceDataset targetDataset;
};
} ) datasetNames));
peers = import ./peers.nix;
enableSnapshots = cfg.snapshots != null;
enableBackups = cfg.hosts != null;
in
{
options.malobeo.backup = {
@@ -14,15 +24,14 @@ in
};
snapshots = mkOption {
type = types.listOf types.str;
default = [];
type = types.nullOr (types.listOf types.str);
default = null;
description = "Automatic snapshots will be created for the given datasets";
};
#TODO: instead listof str we need dataset here to declare the dataset name on the source host
# and also the dataset name on target host (which stores the backups)
hosts = mkOption {
type = types.attrsOf (types.listOf (types.submodule {
default = null;
type = types.nullOr (types.attrsOf (types.listOf (types.submodule {
options = {
sourceDataset = mkOption {
type = types.str;
@@ -31,13 +40,19 @@ in
type = types.str;
};
};
}));
})));
description = "Hostname with list of datasets to backup.";
};
sshKey = mkOption {
default = null;
type = types.nullOr types.str;
description = "Set path to ssh key used for pull backups. Otherwise default key is used";
};
};
config = mkIf (cfg.enable) {
services.sanoid = {
services.sanoid = mkIf (enableSnapshots) {
enable = true;
templates."default" = {
@@ -56,10 +71,9 @@ in
}; }) cfg.snapshots);
};
services.syncoid = with config; {
services.syncoid = mkIf (enableBackups) {
enable = true;
sshKey = sops.secrets.backup_key.path;
sshKey = cfg.sshKey;
commonArgs = [
"--no-sync-snap"
@@ -68,17 +82,12 @@ in
interval = "*-*-* 04:15:00";
commands = builtins.mapAttrs (name: value: {
source = "backup@${peers.${value.hostname}.address}:${value.dataset.sourceDataset}";
target = "${value.dataset.targetDataset}";
source = "backup@${peers.${value.hostname}.address}:${value.sourceDataset}";
target = "${value.targetDataset}";
sendOptions = "w";
recvOptions = "\"\"";
recursive = true;
})(builtins.listToAttrs (builtins.concatLists (builtins.attrValues (builtins.mapAttrs newfunc cfg.hosts))));
};
sops.secrets.backup_key = {
owner = config.services.syncoid.user;
key = "backup_key";
})(builtins.listToAttrs (builtins.concatLists (builtins.attrValues (builtins.mapAttrs hostToCommand cfg.hosts))));
};
};
}