diff --git a/modules/podman-mariadb.nix b/modules/podman-mariadb.nix index 7530387..4455468 100644 --- a/modules/podman-mariadb.nix +++ b/modules/podman-mariadb.nix @@ -61,6 +61,13 @@ in example = "daily"; }; + backupRetention = mkOption { + description = "The amount of backups to keep."; + type = types.int; + default = 28; + example = "2"; + }; + }; })); }; @@ -99,22 +106,26 @@ in }) cfgs); - #systemd = mkMerge (mapAttrsToList (_: cfg: { - # services."podman-mariadb-${cfg.database}-backup" = { - # description = "Backup of ${cfg.database} database"; - # requisite = [ "podman-mariadb-${cfg.database}.service" ]; - # serviceConfig = { - # ExecStart = "${pkgs.bash}/bin/bash -c '${pkgs.podman}/bin/podman exec postgresql-${cfg.database} pg_dumpall -c -U ${cfg.user} | ${pkgs.zstd}/bin/zstd -o ${cfg.backupPath}/${cfg.database}/\$(${pkgs.coreutils}/bin/date +%%F_%%R).sql.zst'" ; - # Type = "oneshot"; - # }; - # }; - # timers."podman-mariadb-${cfg.database}-backup" = { - # timerConfig = { - # OnCalendar = cfg.backupInterval; - # }; - # wantedBy = [ "podman-mariadb-${cfg.database}.service" ]; - # }; - #}) cfgs); + systemd = mkMerge (mapAttrsToList (_: cfg: { + services."podman-mariadb-${cfg.database}-backup" = { + description = "Backup of ${cfg.database} database"; + requisite = [ "podman-mariadb-${cfg.database}.service" ]; + serviceConfig = { + ExecStart = + let + retention = (toString cfg.backupRetention); + in + ''${pkgs.bash}/bin/bash -c "${pkgs.podman}/bin/podman exec mariadb-${cfg.database} /bin/bash -c 'MYSQL_PWD=$(cat $MARIADB_PASSWORD_FILE) mariadb-dump --all-databases -u${cfg.database}' | ${pkgs.zstd}/bin/zstd -o ${cfg.backupPath}/${cfg.database}/$(${pkgs.coreutils}/bin/date +%%F_%%R).sql.zst && find ${cfg.backupPath}/${cfg.database} -type f | sort | head -n -${retention} | xargs rm -v" '' ; + Type = "oneshot"; + }; + }; + timers."podman-mariadb-${cfg.database}-backup" = { + timerConfig = { + OnCalendar = cfg.backupInterval; + }; + wantedBy = [ "podman-mariadb-${cfg.database}.service" ]; + }; + }) cfgs); };