62 lines
1.6 KiB
Bash
62 lines
1.6 KiB
Bash
#!/usr/bin/env bash
|
|
# vim: set tabstop=2 softtabstop=2 shiftwidth=2 expandtab:
|
|
#
|
|
# Script Name: backup_incus_instances.sh
|
|
# Description: This script backs up all Incus instances
|
|
# to a specified backup directory. It is designed
|
|
# to be invoked by Borgmatic hooks.
|
|
#
|
|
# Author: Benoit <forgejo@benoit.jp.net>
|
|
# Website: benoit.jp.net
|
|
# License: MIT
|
|
#
|
|
# Dependencies: incus
|
|
# Written with the help of ChatGPT
|
|
#
|
|
|
|
# Strict mode
|
|
set -euo pipefail
|
|
|
|
# Set the backup directory
|
|
BACKUP_DIR="/var/backups/incus"
|
|
|
|
# Create the backup directory if it doesn't exist
|
|
mkdir -p "$BACKUP_DIR"
|
|
|
|
# Get the list of instances and check for errors
|
|
instances=$(incus ls -f csv -c n 2>/dev/null)
|
|
if [ $? -ne 0 ]; then
|
|
echo "Error: Failed to list storage instances." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# Check if there are any instances to back up
|
|
if [ -z "$instances" ]; then
|
|
echo "No instances found to back up."
|
|
exit 0
|
|
fi
|
|
|
|
# Initialize a success flag
|
|
all_backups_successful=true
|
|
|
|
# Loop through each instance and back it up
|
|
while IFS=, read -r name; do
|
|
echo "Backing up instance: $name"
|
|
|
|
if incus export "$name" \
|
|
--compression=none --instance-only \
|
|
"$BACKUP_DIR/${name}.tar" &> /dev/null; then
|
|
|
|
echo "Successfully backed up: $name"
|
|
else
|
|
echo "Error backing up instance: $name" >&2
|
|
all_backups_successful=false
|
|
fi
|
|
done <<< "$instances"
|
|
|
|
# Final message based on backup success
|
|
if $all_backups_successful; then
|
|
echo "Backup completed successfully. All instances have been backed up to $BACKUP_DIR."
|
|
else
|
|
echo "Backup completed with errors. Some instances may not have been backed up."
|
|
fi
|