diff --git a/install/assets/functions/10-db-backup b/install/assets/functions/10-db-backup index 748b610..fe49376 100644 --- a/install/assets/functions/10-db-backup +++ b/install/assets/functions/10-db-backup @@ -51,7 +51,7 @@ bootstrap_variables() { DEFAULT_ENCRYPT_PUBKEY \ DEFAULT_MONGO_CUSTOM_URI \ DEFAULT_MYSQL_TLS_CA_FILE \ - DEFAULT_MYSQL_TLS_backup_job_filenameCERT_FILE \ + DEFAULT_MYSQL_TLS_CERT_FILE \ DEFAULT_MYSQL_TLS_KEY_FILE \ DEFAULT_S3_BUCKET \ DEFAULT_S3_KEY_ID \ @@ -240,18 +240,73 @@ bootstrap_variables() { rm -rf "${backup_instance_vars}" } - upgrade_lonely_variables() { - upgrade_lonely_variables_tmp=$(mktemp) - set -o posix; set | grep "^$1" | grep -v "^$1[0-9]._" > "${upgrade_lonely_variables_tmp}" - while read -r exist_var ; do - if [ ! -v "${1}"01_"$(echo "${exist_var}" | cut -d = -f1 | cut -d _ -f2)" ] ; then - export "${1}"01_"$(echo "${exist_var}" | cut -d = -f1 | cut -d _ -f2-9)"="$(echo "${exist_var}" | cut -d = -f2)" - else - print_error "Variable ${1}01_$(echo "${exist_var}" | cut -d = -f1 | cut -d _ -f2) already exists, fix your variables and start again.." - exit 1 - fi - done < "${upgrade_lonely_variables_tmp}" - rm -rf "${upgrade_lonely_variables_tmp}" + restore_init() { + restore_vars=$(mktemp) + set -o posix ; set | grep -oE "^restore_job_.*=" | grep -oE ".*=" | sed "/--/d" > "${restore_vars}" + while read -r restore_var ; do + unset "$(echo "${restore_var}" | cut -d = -f 1)" + done < "${restore_vars}" + + if [ -n "${DB_NAME}" ] && [ -z "${DB01_NAME}" ] ; then export DB01_NAME="${DB_NAME}" ; unset DB_NAME ; fi + if [ -n "${DB_USER}" ] && [ -z "${DB01_USER}" ] ; then export DB01_USER="${DB_USER}" ; unset DB_USER ; fi + if [ -n "${DB_PASS}" ] && [ -z "${DB01_PASS}" ] ; then export DB01_PASS="${DB_PASS}" ; unset DB_PASS ; fi + if [ -n "${DB_TYPE}" ] && [ -z "${DB01_TYPE}" ] ; then export DB01_TYPE="${DB_TYPE}" ; unset DB_TYPE ; fi + if [ -n "${DB_PORT}" ] && [ -z "${DB01_PORT}" ] ; then export DB01_PORT="${DB_PORT}" ; unset DB_PORT ; fi + if [ -n "${DB_HOST}" ] && [ -z "${DB01_HOST}" ] ; then export DB01_HOST="${DB_HOST}" ; unset DB_HOST ; fi + if [ -n "${DB_AUTH}" ] && [ -z "${DB01_AUTH}" ] ; then export DB01_AUTH="${DB_AUTH}" ; unset DB_AUTH ; fi + if [ -n "${MONGO_CUSTOM_URI}" ] && [ -z "${DB01_MONGO_CUSTOM_URI}" ] ; then export DB01_MONGO_CUSTOM_URI="${DB_MONGO_CUSTOM_URI}" ; unset MONGO_CUSTOM_URI ; fi + if [ -n "${MYSQL_TLS_CA_FILE}" ] && [ -z "${DB01_MYSQL_TLS_CA_FILE}" ] ; then export DB01_MYSQL_TLS_CA_FILE="${MYSQL_TLS_CA_FILE}" ; unset MYSQL_TLS_CA_FILE ; fi + if [ -n "${MYSQL_TLS_CERT_FILE}" ] && [ -z "${DB01_MYSQL_TLS_CERT_FILE}" ] ; then export DB01_MYSQL_TLS_CERT_FILE="${MYSQL_TLS_CERT_FILE}" ; unset MYSQL_TLS_CERT_FILE ; fi + if [ -n "${MYSQL_TLS_KEY_FILE}" ] && [ -z "${DB01_MYSQL_TLS_KEY_FILE}" ] ; then export DB01_MYSQL_TLS_KEY_FILE="${MYSQL_TLS_KEY_FILE}" ; unset MYSQL_TLS_KEY_FILE ; fi + + transform_file_var \ + DEFAULT_AUTH \ + DEFAULT_HOST \ + DEFAULT_NAME \ + DEFAULT_PASS \ + DEFAULT_PORT \ + DEFAULT_TYPE \ + DEFAULT_USER \ + DEFAULT_MONGO_CUSTOM_URI \ + DEFAULT_MYSQL_TLS_CA_FILE \ + DEFAULT_MYSQL_TLS_CERT_FILE \ + DEFAULT_MYSQL_TLS_KEY_FILE + + set -o posix ; set | grep -E "^DEFAULT_" > "${restore_vars}" + + restore_instances=$(printenv | sort | grep -c '^DB.*_HOST') + + for (( restore_instance_number = 01; restore_instance_number <= restore_instances; restore_instance_number++ )) ; do + restore_instance_number=$(printf "%02d" $restore_instance_number) + transform_file_var \ + DB"${restore_instance_number}"_AUTH \ + DB"${restore_instance_number}"_HOST \ + DB"${restore_instance_number}"_NAME \ + DB"${restore_instance_number}"_PASS \ + DB"${restore_instance_number}"_PORT \ + DB"${restore_instance_number}"_TYPE \ + DB"${restore_instance_number}"_USER \ + DB"${restore_instance_number}"_MONGO_CUSTOM_URI \ + DB"${restore_instance_number}"_MYSQL_TLS_CA_FILE \ + DB"${restore_instance_number}"_MYSQL_TLS_CERT_FILE \ + DB"${restore_instance_number}"_MYSQL_TLS_KEY_FILE + + set -o posix ; set | grep -E "^DB${restore_instance_number}_" >> "${restore_vars}" + done + + if [ -n "${DB_DUMP_TARGET}" ]; then + print_warn "Deprecated and unsupported variable 'DB_DUMP_TARGET' detected - Please upgrade your variables as they will be removed in version 4.3.0" + sed -i "/DEFAULT_FILESYSTEM_PATH=/d" "${restore_vars}" + echo "DEFAULT_FILESYSTEM_PATH=${DB_DUMP_TARGET}" >> "${restore_vars}" + fi + + if [ -n "${DB_DUMP_TARGET_ARCHIVE}" ]; then + print_warn "Deprecated and unsupported variable 'DB_DUMP_TARGET_ACRHIVE' detected - Please upgrade your variables as they will be removed in version 4.3.0" + sed -i "/DEFAULT_FILESYSTEM_ARCHIVE_PATH=/d" "${restore_vars}" + echo "DEFAULT_FILESYSTEM_ARCHIVE_PATH=${DB_DUMP_TARGET_ARCHIVE}" >> "${restore_vars}" + fi + + echo "RESTORE_VARS is ${restore_vars}" } parse_variables() { @@ -368,9 +423,24 @@ bootstrap_variables() { if var_true "${backup_job_resource_optimized}" ; then play_fair="nice -19 ionice -c2" ; fi } + upgrade_lonely_variables() { + upgrade_lonely_variables_tmp=$(mktemp) + set -o posix; set | grep "^$1" | grep -v "^$1[0-9]._" > "${upgrade_lonely_variables_tmp}" + while read -r exist_var ; do + if [ ! -v "${1}"01_"$(echo "${exist_var}" | cut -d = -f1 | cut -d _ -f2)" ] ; then + export "${1}"01_"$(echo "${exist_var}" | cut -d = -f1 | cut -d _ -f2-9)"="$(echo "${exist_var}" | cut -d = -f2)" + else + print_error "Variable ${1}01_$(echo "${exist_var}" | cut -d = -f1 | cut -d _ -f2) already exists, fix your variables and start again.." + exit 1 + fi + done < "${upgrade_lonely_variables_tmp}" + rm -rf "${upgrade_lonely_variables_tmp}" + } + case "${1}" in backup_init ) backup_init "$2" ;; parse_variables) parse_variables "$2" ;; + restore_init) restore_init ;; upgrade ) upgrade_lonely_variables "$2" ;; esac diff --git a/install/usr/local/bin/restore b/install/usr/local/bin/restore index c839a53..d863443 100755 --- a/install/usr/local/bin/restore +++ b/install/usr/local/bin/restore @@ -74,6 +74,13 @@ EOF esac fi + +control_c() { + if [ -f "${restore_vars}" ] ; then rm -rf "${restore_vars}" ; fi + print_warn "User aborted" + exit +} + get_filename() { COLUMNS=12 prompt="Please select a file to restore:" @@ -103,13 +110,17 @@ get_filename() { get_dbhost() { p_dbhost=$(basename -- "${r_filename}" | cut -d _ -f 3) - if [ -n "${p_dbhost}" ]; then parsed_host=true print_debug "Parsed DBHost: ${p_dbhost}" + + if grep -q "${p_dbhost}" "${restore_vars}" ; then + detected_host_num=$(grep "${p_dbhost}" "${restore_vars}" | head -n1 | cut -c 3,4) + detected_host_value=$(grep "${p_dbhost}" "${restore_vars}" | head -n1 | cut -d '=' -f 2) + fi fi - if [ -z "${DB_HOST}" ] && [ -z "${parsed_host}" ]; then + if [ -z "${detected_host_value}" ] && [ -z "${parsed_host}" ]; then print_debug "Parsed DBHost Variant: 1 - No Env, No Parsed Filename" q_dbhost_variant=1 q_dbhost_menu=$(cat < 0 && REPLY <= ${#options[@]} )) ; then + break + else + echo "Invalid option. Try another one." + fi + done + COLUMNS=$oldcolumns + r_filename=${opt} } #### SCRIPT START +trap control_c INT +bootstrap_variables restore_init + cat << EOF ## ${IMAGE_NAME} Restore Script