Attempt to support backing up commands
This commit is contained in:
parent
162c35769c
commit
5b9b65bc1f
33
backup.nix
33
backup.nix
@ -11,30 +11,7 @@ let
|
|||||||
runtimeInputs = [
|
runtimeInputs = [
|
||||||
pkgs.restic
|
pkgs.restic
|
||||||
];
|
];
|
||||||
text = ''
|
text = (builtins.readFile ./backup.sh);
|
||||||
if [ -z "$BACKUP_HELPER_DIRS" ]; then
|
|
||||||
echo "BACKUP_HELPER_DIRS is not set"
|
|
||||||
exit 1;
|
|
||||||
fi
|
|
||||||
exit_code=0;
|
|
||||||
for i in ''${BACKUP_HELPER_DIRS//,/ }; do
|
|
||||||
echo "Starting backup of $i";
|
|
||||||
if ! output=$(restic backup "$i"); then
|
|
||||||
exit_code=1;
|
|
||||||
echo "Backup of $i failed with exit code $?:"
|
|
||||||
echo "$output"
|
|
||||||
else
|
|
||||||
echo "Backup of $i successful:"
|
|
||||||
echo "$output"
|
|
||||||
fi
|
|
||||||
done
|
|
||||||
if [ "$BACKUP_FORGET" -eq 1 ]; then
|
|
||||||
echo "Removing old backups"
|
|
||||||
output=$(restic forget -d 7 -w 4 -m 6 --keep-within 1d --prune)
|
|
||||||
echo "$output"
|
|
||||||
fi
|
|
||||||
exit "$exit_code";
|
|
||||||
'';
|
|
||||||
};
|
};
|
||||||
in
|
in
|
||||||
{
|
{
|
||||||
@ -50,6 +27,11 @@ in
|
|||||||
default = [ ];
|
default = [ ];
|
||||||
description = "Directories to be backed up.";
|
description = "Directories to be backed up.";
|
||||||
};
|
};
|
||||||
|
backup-commands = lib.mkOption {
|
||||||
|
type = lib.types.listOf lib.types.str;
|
||||||
|
default = [ ];
|
||||||
|
description = "Backup the stdout of commands. Format strings like key:command";
|
||||||
|
};
|
||||||
schedule = lib.mkOption {
|
schedule = lib.mkOption {
|
||||||
type = lib.types.str;
|
type = lib.types.str;
|
||||||
default = "*-*-* 00:00:00";
|
default = "*-*-* 00:00:00";
|
||||||
@ -83,6 +65,9 @@ in
|
|||||||
}
|
}
|
||||||
// lib.attrsets.optionalAttrs (builtins.hasAttr "password-file" cfg) {
|
// lib.attrsets.optionalAttrs (builtins.hasAttr "password-file" cfg) {
|
||||||
RESTIC_PASSWORD_FILE = cfg.password-file;
|
RESTIC_PASSWORD_FILE = cfg.password-file;
|
||||||
|
}
|
||||||
|
// lib.attrsets.optionalAttrs (cfg.backup-commands != [ ]) {
|
||||||
|
BACKUP_HELPER_COMMANDS = lib.strings.concatStringsSep ";" cfg.backup-commands;
|
||||||
};
|
};
|
||||||
serviceConfig = {
|
serviceConfig = {
|
||||||
Type = "oneshot";
|
Type = "oneshot";
|
||||||
|
49
backup.sh
Normal file
49
backup.sh
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#!/usr/bin/env bash
|
||||||
|
|
||||||
|
# If neither of BACKUP_HELPER_DIRS and BACKUP_HELPER_COMMANDS not set. Exit
|
||||||
|
if [ -z "$BACKUP_HELPER_DIRS" ] && [ -z "$BACKUP_HELPER_COMMANDS" ]; then
|
||||||
|
echo "BACKUP_HELPER_DIRS is not set"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
exit_code=0;
|
||||||
|
|
||||||
|
# Backup directories
|
||||||
|
if [ -n "$BACKUP_HELPER_DIRS" ]; then
|
||||||
|
for i in ${BACKUP_HELPER_DIRS//,/ }; do
|
||||||
|
echo "Starting backup of $i";
|
||||||
|
if ! output=$(restic backup "$i"); then
|
||||||
|
exit_code=1;
|
||||||
|
echo "Backup of $i failed with exit code $?:"
|
||||||
|
echo "$output"
|
||||||
|
else
|
||||||
|
echo "Backup of $i successful:"
|
||||||
|
echo "$output"
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Backup command outputs
|
||||||
|
if [ -n "$BACKUP_HELPER_COMMANDS" ]; then
|
||||||
|
IFS=";" read -r -a pairs <<< "$BACKUP_HELPER_COMMANDS"
|
||||||
|
|
||||||
|
for pair in "${pairs[@]}"; do
|
||||||
|
IFS=":" read -r key value <<< "$pair"
|
||||||
|
|
||||||
|
if ! output=$(restic backup --stdin-filename "$key" --stdin-from-command -- "$value"); then
|
||||||
|
exit_code=1;
|
||||||
|
echo "Backup of $i failed with exit code $?:"
|
||||||
|
echo "$output"
|
||||||
|
else
|
||||||
|
echo "Backup of $i successful:"
|
||||||
|
echo "$output"
|
||||||
|
fi
|
||||||
|
|
||||||
|
done
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ "$BACKUP_FORGET" -eq 1 ]; then
|
||||||
|
echo "Removing old backups"
|
||||||
|
output=$(restic forget -d 7 -w 4 -m 6 --keep-within 1d --prune)
|
||||||
|
echo "$output"
|
||||||
|
fi
|
||||||
|
exit "$exit_code"
|
Loading…
Reference in New Issue
Block a user