U
This commit is contained in:
+6
-9
@@ -6,25 +6,21 @@ source "$SCRIPT_DIR/../common.sh"
|
|||||||
|
|
||||||
# Load config
|
# Load config
|
||||||
load_master_conf
|
load_master_conf
|
||||||
|
detect_hosts
|
||||||
|
parse_args "$@"
|
||||||
|
|
||||||
# Input directory
|
|
||||||
DIRECTORY="$1"
|
DIRECTORY="$1"
|
||||||
if [[ -z "$DIRECTORY" ]]; then
|
if [[ -z "$DIRECTORY" ]]; then
|
||||||
echo "Usage: $0 <directory-to-sync> [--dry-run|-n] [VAR=value ...]"
|
echo "Usage: $0 <directory-to-sync> [--dry-run|-n] [VAR=value ...]"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
shift
|
shift
|
||||||
parse_args "$@"
|
|
||||||
|
|
||||||
# Detect hosts & SSH key
|
# Determine profile from folder basename
|
||||||
detect_hosts
|
PROFILE_NAME=$(basename "$DIRECTORY" | tr '[:upper:]' '[:lower:]')
|
||||||
|
|
||||||
# Determine profile
|
|
||||||
DIR_CLEAN="${DIRECTORY%/}"
|
|
||||||
PROFILE_NAME=$(basename "$DIR_CLEAN" | tr '[:upper:]' '[:lower:]')
|
|
||||||
echo "Detected profile: $PROFILE_NAME"
|
echo "Detected profile: $PROFILE_NAME"
|
||||||
|
|
||||||
# Apply profile defaults
|
# Apply profile settings
|
||||||
MAX_RSYNC_PROCS=${PROFILE_MAX_PROCS[$PROFILE_NAME]:-$MAX_RSYNC_PROCS}
|
MAX_RSYNC_PROCS=${PROFILE_MAX_PROCS[$PROFILE_NAME]:-$MAX_RSYNC_PROCS}
|
||||||
BW_LIMIT=${PROFILE_BW_LIMIT[$PROFILE_NAME]:-$BW_LIMIT}
|
BW_LIMIT=${PROFILE_BW_LIMIT[$PROFILE_NAME]:-$BW_LIMIT}
|
||||||
CRITICAL_CONTAINER_NAMES=(${PROFILE_CRITICAL_CONTAINER_NAMES[$PROFILE_NAME]})
|
CRITICAL_CONTAINER_NAMES=(${PROFILE_CRITICAL_CONTAINER_NAMES[$PROFILE_NAME]})
|
||||||
@@ -34,6 +30,7 @@ RETRY_COUNT=${PROFILE_RETRY_COUNT[$PROFILE_NAME]:-$RETRY_COUNT}
|
|||||||
SLEEP=${PROFILE_SLEEP[$PROFILE_NAME]:-$SLEEP}
|
SLEEP=${PROFILE_SLEEP[$PROFILE_NAME]:-$SLEEP}
|
||||||
EXCLUDE_DIRS=(${PROFILE_EXCLUDE_DIRS[$PROFILE_NAME]:-${EXCLUDE_DIRS[@]}})
|
EXCLUDE_DIRS=(${PROFILE_EXCLUDE_DIRS[$PROFILE_NAME]:-${EXCLUDE_DIRS[@]}})
|
||||||
|
|
||||||
|
|
||||||
# Validate
|
# Validate
|
||||||
validate_int MAX_RSYNC_PROCS "$MAX_RSYNC_PROCS"
|
validate_int MAX_RSYNC_PROCS "$MAX_RSYNC_PROCS"
|
||||||
validate_int BW_LIMIT "$BW_LIMIT"
|
validate_int BW_LIMIT "$BW_LIMIT"
|
||||||
|
|||||||
@@ -1,22 +1,11 @@
|
|||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------
|
||||||
# --------------------- Common Shared Functions for Unraid Scripts -----------------------------
|
# --------------------- Common Shared Functions for Unraid Scripts -----------------------------
|
||||||
#-----------------------------------------------------------------------------------------------
|
#-----------------------------------------------------------------------------------------------
|
||||||
# This file contains ONLY reusable logic.
|
|
||||||
# No code should execute on load — only functions.
|
|
||||||
# All user configuration lives in Master.conf
|
|
||||||
#-----------------------------------------------------------------------------------------------
|
|
||||||
|
|
||||||
#-----------------------------------------------------------------------------------------------
|
|
||||||
# Load Master.conf
|
|
||||||
#-----------------------------------------------------------------------------------------------
|
|
||||||
#-----------------------------------------------------------------------------------------------
|
|
||||||
# Load Master.conf reliably
|
|
||||||
#-----------------------------------------------------------------------------------------------
|
|
||||||
# Load Master.conf
|
# Load Master.conf
|
||||||
load_master_conf() {
|
load_master_conf() {
|
||||||
# Hardcode the full path to your Master.conf
|
# Use absolute path to avoid "not found" errors
|
||||||
local master_conf="/mnt/user/appdata/unraid_scripts/Master.conf"
|
local master_conf="/mnt/user/appdata/unraid_scripts/Master.conf"
|
||||||
|
|
||||||
if [ -f "$master_conf" ]; then
|
if [ -f "$master_conf" ]; then
|
||||||
@@ -28,7 +17,7 @@ load_master_conf() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Parse CLI arguments (flags + VAR=value overrides)
|
# Parse CLI args (flags + VAR=value overrides)
|
||||||
parse_args() {
|
parse_args() {
|
||||||
DRY_RUN=${DRY_RUN:-false}
|
DRY_RUN=${DRY_RUN:-false}
|
||||||
for ARG in "$@"; do
|
for ARG in "$@"; do
|
||||||
@@ -63,7 +52,7 @@ validate_int() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Require variable to be set
|
# Require variable
|
||||||
require_var() {
|
require_var() {
|
||||||
local var="$1"
|
local var="$1"
|
||||||
if [[ -z "${!var:-}" ]]; then
|
if [[ -z "${!var:-}" ]]; then
|
||||||
@@ -72,9 +61,10 @@ require_var() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
# Detect local/remote host and SSH key
|
# Detect local hostname
|
||||||
detect_hosts() {
|
detect_hosts() {
|
||||||
LOCAL_HOSTNAME="$(hostname)"
|
LOCAL_HOSTNAME="$(hostname)"
|
||||||
|
|
||||||
if [[ "$LOCAL_HOSTNAME" == "$HOST1" ]]; then
|
if [[ "$LOCAL_HOSTNAME" == "$HOST1" ]]; then
|
||||||
LOCAL_SERVER_NAME="$HOST1"
|
LOCAL_SERVER_NAME="$HOST1"
|
||||||
REMOTE_SERVER_NAME="$HOST2"
|
REMOTE_SERVER_NAME="$HOST2"
|
||||||
@@ -96,7 +86,13 @@ detect_hosts() {
|
|||||||
fi
|
fi
|
||||||
echo "Resolved $REMOTE_SERVER_NAME → $REMOTE_SERVER"
|
echo "Resolved $REMOTE_SERVER_NAME → $REMOTE_SERVER"
|
||||||
|
|
||||||
# SSH key lookup
|
# SSH key mapping
|
||||||
|
if ! declare -A SSH_KEYS &>/dev/null; then
|
||||||
|
declare -A SSH_KEYS
|
||||||
|
SSH_KEYS["$HOST1|$HOST2"]="/root/.ssh/Gmer4Lfe-rsync-key"
|
||||||
|
SSH_KEYS["$HOST2|$HOST1"]="/root/.ssh/Jayred365-rsync-key"
|
||||||
|
fi
|
||||||
|
|
||||||
KEY_ID="$LOCAL_SERVER_NAME|$REMOTE_SERVER_NAME"
|
KEY_ID="$LOCAL_SERVER_NAME|$REMOTE_SERVER_NAME"
|
||||||
if [[ -n "${SSH_KEYS[$KEY_ID]}" ]]; then
|
if [[ -n "${SSH_KEYS[$KEY_ID]}" ]]; then
|
||||||
SSH_KEY="${SSH_KEYS[$KEY_ID]}"
|
SSH_KEY="${SSH_KEYS[$KEY_ID]}"
|
||||||
|
|||||||
Reference in New Issue
Block a user