This commit is contained in:
@ -1,11 +1,17 @@
|
||||
#!/bin/bash
|
||||
|
||||
# This script contains the common code for the autocommands.
|
||||
_check_required_env_vars "BACKUP_FILE" "TEMP_DIR"
|
||||
|
||||
MYID=$(id -u)
|
||||
MYGRP=$(id -g)
|
||||
|
||||
BACKUP_TEMP_PATH="$TEMP_DIR/backup"
|
||||
|
||||
_autocommandrun_volume() {
|
||||
command="$1"
|
||||
volume_name="$2"
|
||||
local command="$1"
|
||||
local volume_name="$2"
|
||||
local backup_folder="$3"
|
||||
|
||||
case "$command" in
|
||||
create)
|
||||
@ -17,12 +23,10 @@ _autocommandrun_volume() {
|
||||
docker volume rm ${volume_name}
|
||||
;;
|
||||
backup)
|
||||
local backup_folder="$3"
|
||||
echo "Backing up volume ${volume_name}"
|
||||
docker run --rm -v ${volume_name}:/volume -v ${backup_folder}:/backup debian bash -c "tar -czvf /backup/backup.tgz -C /volume . && chown -R $MYID:$MYGRP /backup"
|
||||
;;
|
||||
restore)
|
||||
local backup_folder="$3"
|
||||
echo "Restoring volume ${volume_name}"
|
||||
docker volume rm ${volume_name}
|
||||
docker volume create ${volume_name}
|
||||
@ -32,8 +36,9 @@ _autocommandrun_volume() {
|
||||
}
|
||||
|
||||
_autocommandrun_path() {
|
||||
command="$1"
|
||||
path="$2"
|
||||
local command="$1"
|
||||
local path="$2"
|
||||
local backup_folder="$3"
|
||||
|
||||
case "$command" in
|
||||
create)
|
||||
@ -51,7 +56,6 @@ _autocommandrun_path() {
|
||||
fi
|
||||
;;
|
||||
backup)
|
||||
local backup_folder="$3"
|
||||
echo "Backing up path ${path}"
|
||||
if [ -d "${path}" ]; then
|
||||
docker run --rm -v ${path}:/path -v ${backup_folder}:/backup debian bash -c "tar -czvf /backup/backup.tgz -C /path . && chown -R $MYID:$MYGRP /backup"
|
||||
@ -60,7 +64,6 @@ _autocommandrun_path() {
|
||||
fi
|
||||
;;
|
||||
restore)
|
||||
local backup_folder="$3"
|
||||
echo "Restoring path ${path}"
|
||||
tar -xzvf ${backup_folder}/backup.tgz -C ${path} --strip-components=1
|
||||
;;
|
||||
@ -68,32 +71,30 @@ _autocommandrun_path() {
|
||||
}
|
||||
|
||||
_autocommandrun_file() {
|
||||
command="$1"
|
||||
value="$2"
|
||||
local command="$1"
|
||||
local filepath="$2"
|
||||
local backup_folder="$3"
|
||||
|
||||
case "$command" in
|
||||
create)
|
||||
;;
|
||||
nuke)
|
||||
rm -f ${value}
|
||||
rm -f ${filepath}
|
||||
;;
|
||||
backup)
|
||||
local backup_folder="$3"
|
||||
echo "Backing up file ${value}"
|
||||
|
||||
FILEPARENT=$(dirname ${value})
|
||||
FILENAME=$(basename ${value})
|
||||
echo "Backing up file ${filepath}"
|
||||
FILEPARENT=$(dirname ${filepath})
|
||||
FILENAME=$(basename ${filepath})
|
||||
if [ -f "${FILEPARENT}/${FILENAME}" ]; then
|
||||
docker run --rm-v ${FILEPARENT}:/volume -v ${backup_folder}:/backup debian bash -c "cp /volume/${FILENAME} /backup/${FILENAME} && chown -R $MYID:$MYGRP /backup"
|
||||
else
|
||||
echo "File ${value} does not exist - nothing to backup"
|
||||
echo "File ${filepath} does not exist - nothing to backup"
|
||||
fi
|
||||
;;
|
||||
restore)
|
||||
local backup_folder="$3"
|
||||
echo "Restoring file ${value}"
|
||||
local filename=$(basename ${value})
|
||||
cp ${backup_folder}/${filename} ${value}
|
||||
echo "Restoring file ${filepath}"
|
||||
local FILENAME=$(basename ${filepath})
|
||||
cp ${backup_folder}/${FILENAME} ${filepath}
|
||||
;;
|
||||
esac
|
||||
}
|
||||
@ -111,11 +112,7 @@ _autocommandparse() {
|
||||
|
||||
local command="$1"
|
||||
shift
|
||||
|
||||
local temp_path="$1"
|
||||
shift
|
||||
|
||||
echo "autocommandparse: command=$command temp_path=$temp_path"
|
||||
echo "autocommandparse: command=$command"
|
||||
|
||||
# Extract the backup file and temp path (last two arguments)
|
||||
local args=("$@")
|
||||
@ -134,15 +131,9 @@ _autocommandparse() {
|
||||
local value="${pair#*=}"
|
||||
|
||||
# create backup folder unique to key/value.
|
||||
local bfolder="${key}_${value}"
|
||||
|
||||
# remove any non-alphanumeric characters, that aren't dash or underscore from the bfile
|
||||
targetpath=""
|
||||
if [ ! "$temp_path" == "-" ]; then
|
||||
bfolder=$(echo "$bfolder" | tr -cd '[:alnum:]_-')
|
||||
mkdir -p ${temp_path}/${bfolder}
|
||||
targetpath="${temp_path}/${bfolder}"
|
||||
fi
|
||||
local bfolder=$(echo "${key}_${value}" | tr -cd '[:alnum:]_-')
|
||||
local targetpath="${BACKUP_TEMP_PATH}/${bfolder}"
|
||||
mkdir -p ${targetpath}
|
||||
|
||||
# Key must be one of volume, path or file
|
||||
case "$key" in
|
||||
@ -164,49 +155,31 @@ _autocommandparse() {
|
||||
|
||||
|
||||
autocreate() {
|
||||
_autocommandparse create "-" "$@"
|
||||
_autocommandparse create "$@"
|
||||
}
|
||||
|
||||
|
||||
autonuke() {
|
||||
_autocommandparse nuke "-" "$@"
|
||||
_autocommandparse nuke "$@"
|
||||
}
|
||||
|
||||
|
||||
autobackup() {
|
||||
local backup_file="$1"
|
||||
shift
|
||||
local temp_path="$1"
|
||||
shift
|
||||
mkdir -p "$BACKUP_TEMP_PATH"
|
||||
echo "_autocommandparse [backup] [$@]"
|
||||
_autocommandparse backup "$@"
|
||||
|
||||
[ -f "$backup_file" ] && _die "Backup file $backup_file already exists"
|
||||
[ -d "$temp_path" ] || _die "Temp path $temp_path does not exist"
|
||||
|
||||
local backup_temp_path="$temp_path/backup"
|
||||
|
||||
mkdir -p "$backup_temp_path"
|
||||
echo "_autocommandparse [backup] [$backup_temp_path] [$@]"
|
||||
_autocommandparse backup "$backup_temp_path" "$@"
|
||||
|
||||
tar zcvf "$backup_file" -C "$backup_temp_path" .
|
||||
tar zcvf "$BACKUP_FILE" -C "$BACKUP_TEMP_PATH" .
|
||||
}
|
||||
|
||||
|
||||
autorestore() {
|
||||
local backup_file="$1"
|
||||
shift
|
||||
local temp_path="$1"
|
||||
shift
|
||||
echo "_autocommandparse [restore] [$@]"
|
||||
|
||||
[ -f "$backup_file" ] || _die "Backup file $backup_file does not exist"
|
||||
[ -d "$temp_path" ] || _die "Temp path $temp_path does not exist"
|
||||
mkdir -p "$BACKUP_TEMP_PATH"
|
||||
tar zxvf "$BACKUP_FILE" -C "$BACKUP_TEMP_PATH" --strip-components=1
|
||||
|
||||
local restore_temp_path="$temp_path/restore"
|
||||
|
||||
mkdir -p "$restore_temp_path"
|
||||
tar zxvf "$backup_file" -C "$restore_temp_path" --strip-components=1
|
||||
|
||||
_autocommandparse restore "$restore_temp_path" "$@"
|
||||
_autocommandparse restore "$@"
|
||||
}
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user