feat: support multiple remotes

This commit is contained in:
ttionya committed 2022-07-30 17:57:54 +08:00
1 parent 01686cd094
commit ae021c9013
2 files changed
+77 -13

No files matched your search

+19 -6
View File
@@ -124,8 +124,6 @@ function backup_package() {
} }
function upload() { function upload() {
color blue "upload backup file to storage system"
# upload file not exist # upload file not exist
if [[ ! -e "${UPLOAD_FILE}" ]]; then if [[ ! -e "${UPLOAD_FILE}" ]]; then
color red "upload file not found" color red "upload file not found"
@@ -135,10 +133,22 @@ function upload() {
exit 1 exit 1
fi fi
rclone ${RCLONE_GLOBAL_FLAG} copy "${UPLOAD_FILE}" "${RCLONE_REMOTE}" # upload
local HAS_ERROR="FALSE"
for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
do
color blue "upload backup file to storage system $(color yellow "[${RCLONE_REMOTE_X}]")"
rclone ${RCLONE_GLOBAL_FLAG} copy "${UPLOAD_FILE}" "${RCLONE_REMOTE_X}"
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
color red "upload failed" color red "upload failed"
HAS_ERROR="TRUE"
fi
done
if [[ "${HAS_ERROR}" == "TRUE" ]]; then
send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z")." send_mail_content "FALSE" "File upload failed at $(date +"%Y-%m-%d %H:%M:%S %Z")."
exit 1 exit 1
@@ -147,19 +157,22 @@ function upload() {
function clear_history() { function clear_history() {
if [[ "${BACKUP_KEEP_DAYS}" -gt 0 ]]; then if [[ "${BACKUP_KEEP_DAYS}" -gt 0 ]]; then
color blue "delete ${BACKUP_KEEP_DAYS} days ago backup files" for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
do
color blue "delete ${BACKUP_KEEP_DAYS} days ago backup files $(color yellow "[${RCLONE_REMOTE_X}]")"
mapfile -t RCLONE_DELETE_LIST < <(rclone ${RCLONE_GLOBAL_FLAG} lsf "${RCLONE_REMOTE}" --min-age "${BACKUP_KEEP_DAYS}d") mapfile -t RCLONE_DELETE_LIST < <(rclone ${RCLONE_GLOBAL_FLAG} lsf "${RCLONE_REMOTE_X}" --min-age "${BACKUP_KEEP_DAYS}d")
for RCLONE_DELETE_FILE in "${RCLONE_DELETE_LIST[@]}" for RCLONE_DELETE_FILE in "${RCLONE_DELETE_LIST[@]}"
do do
color yellow "deleting \"${RCLONE_DELETE_FILE}\"" color yellow "deleting \"${RCLONE_DELETE_FILE}\""
rclone ${RCLONE_GLOBAL_FLAG} delete "${RCLONE_REMOTE}/${RCLONE_DELETE_FILE}" rclone ${RCLONE_GLOBAL_FLAG} delete "${RCLONE_REMOTE_X}/${RCLONE_DELETE_FILE}"
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
color red "delete \"${RCLONE_DELETE_FILE}\" failed" color red "delete \"${RCLONE_DELETE_FILE}\" failed"
fi fi
done done
done
fi fi
} }
+58 -7
View File
@@ -31,6 +31,7 @@ function color() {
# None # None
######################################## ########################################
function check_rclone_connection() { function check_rclone_connection() {
# check configuration exist
rclone ${RCLONE_GLOBAL_FLAG} config show "${RCLONE_REMOTE_NAME}" > /dev/null 2>&1 rclone ${RCLONE_GLOBAL_FLAG} config show "${RCLONE_REMOTE_NAME}" > /dev/null 2>&1
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
color red "rclone configuration information not found" color red "rclone configuration information not found"
@@ -38,9 +39,20 @@ function check_rclone_connection() {
exit 1 exit 1
fi fi
rclone ${RCLONE_GLOBAL_FLAG} mkdir "${RCLONE_REMOTE}" # check connection
local HAS_ERROR="FALSE"
for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
do
rclone ${RCLONE_GLOBAL_FLAG} mkdir "${RCLONE_REMOTE_X}"
if [[ $? != 0 ]]; then if [[ $? != 0 ]]; then
color red "storage system connection failure" color red "storage system connection failure $(color yellow "[${RCLONE_REMOTE_X}]")"
HAS_ERROR="TRUE"
fi
done
if [[ "${HAS_ERROR}" == "TRUE" ]]; then
exit 1 exit 1
fi fi
} }
@@ -179,6 +191,40 @@ function get_env() {
export "${VAR}=${VALUE}" export "${VAR}=${VALUE}"
} }
########################################
# Get RCLONE_REMOTE_LIST variables.
# Arguments:
# None
# Outputs:
# variable value
########################################
function get_rclone_remote_list() {
# RCLONE_REMOTE_LIST
RCLONE_REMOTE_LIST=()
local i=0
local RCLONE_REMOTE_NAME_X_REFER
local RCLONE_REMOTE_DIR_X_REFER
local RCLONE_REMOTE_X
# for multiple
while true; do
RCLONE_REMOTE_NAME_X_REFER="RCLONE_REMOTE_NAME_${i}"
RCLONE_REMOTE_DIR_X_REFER="RCLONE_REMOTE_DIR_${i}"
get_env "${RCLONE_REMOTE_NAME_X_REFER}"
get_env "${RCLONE_REMOTE_DIR_X_REFER}"
if [[ -z "${!RCLONE_REMOTE_NAME_X_REFER}" || -z "${!RCLONE_REMOTE_DIR_X_REFER}" ]]; then
break
fi
RCLONE_REMOTE_X=$(echo "${!RCLONE_REMOTE_NAME_X_REFER}:${!RCLONE_REMOTE_DIR_X_REFER}" | sed 's@\(/*\)$@@')
RCLONE_REMOTE_LIST=(${RCLONE_REMOTE_LIST[@]} "${RCLONE_REMOTE_X}")
((i++))
done
}
######################################## ########################################
# Initialization environment variables. # Initialization environment variables.
# Arguments: # Arguments:
@@ -200,13 +246,15 @@ function init_env() {
# RCLONE_REMOTE_NAME # RCLONE_REMOTE_NAME
get_env RCLONE_REMOTE_NAME get_env RCLONE_REMOTE_NAME
RCLONE_REMOTE_NAME="${RCLONE_REMOTE_NAME:-"BitwardenBackup"}" RCLONE_REMOTE_NAME="${RCLONE_REMOTE_NAME:-"BitwardenBackup"}"
RCLONE_REMOTE_NAME_0="${RCLONE_REMOTE_NAME}"
# RCLONE_REMOTE_DIR # RCLONE_REMOTE_DIR
get_env RCLONE_REMOTE_DIR get_env RCLONE_REMOTE_DIR
RCLONE_REMOTE_DIR="${RCLONE_REMOTE_DIR:-"/BitwardenBackup/"}" RCLONE_REMOTE_DIR="${RCLONE_REMOTE_DIR:-"/BitwardenBackup/"}"
RCLONE_REMOTE_DIR_0="${RCLONE_REMOTE_DIR}"
# RCLONE_REMOTE # get RCLONE_REMOTE_LIST
RCLONE_REMOTE=$(echo "${RCLONE_REMOTE_NAME}:${RCLONE_REMOTE_DIR}" | sed 's@\(/*\)$@@') get_rclone_remote_list
# RCLONE_GLOBAL_FLAG # RCLONE_GLOBAL_FLAG
get_env RCLONE_GLOBAL_FLAG get_env RCLONE_GLOBAL_FLAG
@@ -262,9 +310,12 @@ function init_env() {
color yellow "DATA_SENDS: ${DATA_SENDS}" color yellow "DATA_SENDS: ${DATA_SENDS}"
color yellow "========================================" color yellow "========================================"
color yellow "CRON: ${CRON}" color yellow "CRON: ${CRON}"
color yellow "RCLONE_REMOTE_NAME: ${RCLONE_REMOTE_NAME}"
color yellow "RCLONE_REMOTE_DIR: ${RCLONE_REMOTE_DIR}" for RCLONE_REMOTE_X in "${RCLONE_REMOTE_LIST[@]}"
color yellow "RCLONE_REMOTE: ${RCLONE_REMOTE}" do
color yellow "RCLONE_REMOTE: ${RCLONE_REMOTE_X}"
done
color yellow "RCLONE_GLOBAL_FLAG: ${RCLONE_GLOBAL_FLAG}" color yellow "RCLONE_GLOBAL_FLAG: ${RCLONE_GLOBAL_FLAG}"
color yellow "ZIP_ENABLE: ${ZIP_ENABLE}" color yellow "ZIP_ENABLE: ${ZIP_ENABLE}"
color yellow "ZIP_PASSWORD: ${#ZIP_PASSWORD} Chars" color yellow "ZIP_PASSWORD: ${#ZIP_PASSWORD} Chars"