104 lines
3.3 KiB
Bash
Executable File
104 lines
3.3 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
export RED='\x1b[0;31m'
|
|
export NO_COLOR='\x1b[0m'
|
|
|
|
usage () {
|
|
echo "USAGE: $0 --aws-access-key <your_aws_access_key> \ "
|
|
echo " --aws-secret-access-key <your_aws_secret_access_key> \ "
|
|
echo " --backup-url s3://backupbucket@ap-northeast-1/backupstore?backup=<backup_name>&volume=<volume_name> \ "
|
|
echo " --output-file volume.raw \ "
|
|
echo " --output-format raw \ "
|
|
echo " --version <longhorn_version>"
|
|
echo " --backing-file <backing_file_path>"
|
|
echo "Restore a Longhorn backup to a raw image or a qcow2 image."
|
|
echo ""
|
|
echo " -u, --backup-url (Required) Backups S3/NFS URL. e.g., s3://backupbucket@us-east-1/backupstore?backup=backup-bd326da2c4414b02&volume=volumeexamplename"
|
|
echo " -o, --output-file (Required) Output file, e.g., /tmp/restore/volume.raw"
|
|
echo " -f, --output-format (Required) Output file format, e.g., raw or qcow2"
|
|
echo " -v, --version (Required) Longhorn version, e.g., v1.3.2"
|
|
echo " --aws-access-key (Optional) AWS credentials access key"
|
|
echo " --aws-secret-access-key (Optional) AWS credentials access secret key"
|
|
echo " -b, --backing-file (Optional) backing image. e.g., /tmp/backingfile.qcow2"
|
|
echo " -h, --help Usage message"
|
|
}
|
|
|
|
error_invalid_params() {
|
|
echo -e "${RED}[ERROR]Invalid params. Check the required params.${NO_COLOR}"
|
|
usage
|
|
exit 1
|
|
}
|
|
|
|
while [[ "$#" -gt 0 ]]; do
|
|
key="$1"
|
|
case $key in
|
|
--aws-access-key)
|
|
aws_access_key="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
--aws-secret-access-key)
|
|
aws_secret_access_key="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-u|--backup-url)
|
|
backup_url="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-o|--output-file)
|
|
output_file="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-f|--output-format)
|
|
output_format="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-b|--backing-file)
|
|
backing_file="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-v|--version)
|
|
version="$2"
|
|
shift # past argument
|
|
shift # past value
|
|
;;
|
|
-h|--help)
|
|
usage
|
|
exit 0
|
|
shift
|
|
;;
|
|
*)
|
|
error_invalid_params
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Check the required parameters exits
|
|
if [ -z "${backup_url}" ] || [ -z "${output_file}" ] || [ -z "${output_format}" ] || [ -z "${version}" ]; then
|
|
error_invalid_params
|
|
fi
|
|
if [[ "${backup_url}" =~ ^[Ss]3 ]]; then
|
|
if [ -z "${aws_access_key}" ] || [ -z "${aws_secret_access_key}" ]; then
|
|
error_invalid_params
|
|
fi
|
|
fi
|
|
|
|
# Compose the docker arguments
|
|
if [[ "${backup_url}" =~ ^[Ss]3 ]]; then
|
|
CUSTOMIZED_ARGS="-e AWS_ACCESS_KEY_ID="${aws_access_key}" -e AWS_SECRET_ACCESS_KEY="${aws_secret_access_key}" "
|
|
else
|
|
CUSTOMIZED_ARGS="--cap-add SYS_ADMIN --security-opt apparmor:unconfined"
|
|
fi
|
|
|
|
# Start restoring a backup to an image file.
|
|
docker run ${CUSTOMIZED_ARGS} -v /tmp/restore:/tmp/restore \
|
|
longhornio/longhorn-engine:"${version}" longhorn backup \
|
|
restore-to-file ""${backup_url}"" \
|
|
--output-file "/tmp/restore/${output_file}" \
|
|
--output-format "${output_format}" \
|
|
--backing-file "${backing_file}" |