Add helper function and apply reconfigure fix to key services
1. **Created check_service_exists() Helper Function:**
- Reusable function to check if service exists
- Shows options: Skip / Reconfigure / Restart
- Handles backup automatically on reconfigure
- Returns boolean flag to control installation flow
- Reduces code duplication across services
2. **Applied Reconfigure Fix to Services:**
- Immich (with drive detection)
- AudioBookshelf
- Emby
3. **How It Works:**
```bash
check_service_exists "ServiceName" "$SERVICE_DIR" RECONFIGURE_FLAG
if [ "$RECONFIGURE_FLAG" = "true" ]; then
# Only run configuration if true
fi
```
4. **Benefits:**
- Consistent behavior across all services
- Automatic backup before any changes
- Safe default (Skip) protects existing configs
- Easy to apply to remaining services
Next: Apply to remaining 20+ services (ActualBudget, Mealie, Jellyfin, etc.)
This commit is contained in:
+71
-43
@@ -1473,6 +1473,59 @@ CADDY_BLOCK
|
|||||||
echo ""
|
echo ""
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# ============================================================================
|
||||||
|
# CHECK IF SERVICE EXISTS AND ASK USER ACTION
|
||||||
|
# ============================================================================
|
||||||
|
check_service_exists() {
|
||||||
|
local SERVICE_NAME="$1"
|
||||||
|
local SERVICE_DIR="$2"
|
||||||
|
local RETURN_VAR="$3" # Variable name to set (true/false)
|
||||||
|
|
||||||
|
if [ -f "$SERVICE_DIR/docker-compose.yml" ]; then
|
||||||
|
echo ""
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo " $SERVICE_NAME is already installed at $SERVICE_DIR"
|
||||||
|
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
||||||
|
echo ""
|
||||||
|
echo "Options:"
|
||||||
|
echo " 1. Skip (keep existing configuration)"
|
||||||
|
echo " 2. Reconfigure (will backup existing config)"
|
||||||
|
echo " 3. Restart containers only"
|
||||||
|
echo ""
|
||||||
|
local ACTION=""
|
||||||
|
prompt_text "Choose option [1/2/3]:" "1" ACTION
|
||||||
|
|
||||||
|
case "$ACTION" in
|
||||||
|
2)
|
||||||
|
echo " Backing up existing configuration..."
|
||||||
|
local BACKUP_NAME=$(echo "$SERVICE_NAME" | tr '[:upper:] ' '[:lower:]-')
|
||||||
|
BACKUP_DIR="$DOCKER_DIR/backups/$(date +%Y%m%d-%H%M%S)-$BACKUP_NAME"
|
||||||
|
mkdir -p "$BACKUP_DIR"
|
||||||
|
cp -r "$SERVICE_DIR" "$BACKUP_DIR/"
|
||||||
|
echo " ✓ Backup saved to: $BACKUP_DIR"
|
||||||
|
eval "$RETURN_VAR=true"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
3)
|
||||||
|
echo " Restarting $SERVICE_NAME containers..."
|
||||||
|
cd "$SERVICE_DIR"
|
||||||
|
docker compose restart 2>/dev/null && echo " ✓ $SERVICE_NAME restarted" || echo " ⚠ Failed to restart"
|
||||||
|
eval "$RETURN_VAR=false"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
echo " Skipping $SERVICE_NAME (already configured)"
|
||||||
|
eval "$RETURN_VAR=false"
|
||||||
|
return 0
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
else
|
||||||
|
# Service doesn't exist, proceed with installation
|
||||||
|
eval "$RETURN_VAR=true"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
# SHOW CURRENT INSTALLATION STATUS
|
# SHOW CURRENT INSTALLATION STATUS
|
||||||
# ============================================================================
|
# ============================================================================
|
||||||
@@ -2633,45 +2686,8 @@ else
|
|||||||
if [ "$INSTALL_IMMICH" = "y" ] || [ "$INSTALL_IMMICH" = "Y" ]; then
|
if [ "$INSTALL_IMMICH" = "y" ] || [ "$INSTALL_IMMICH" = "Y" ]; then
|
||||||
IMMICH_DIR="$DOCKER_DIR/immich"
|
IMMICH_DIR="$DOCKER_DIR/immich"
|
||||||
|
|
||||||
# Check if already installed
|
# Check if already installed and ask what to do
|
||||||
if [ -f "$IMMICH_DIR/docker-compose.yml" ]; then
|
check_service_exists "Immich" "$IMMICH_DIR" IMMICH_RECONFIGURE
|
||||||
echo ""
|
|
||||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
||||||
echo " Immich is already installed at $IMMICH_DIR"
|
|
||||||
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
||||||
echo ""
|
|
||||||
echo "Options:"
|
|
||||||
echo " 1. Skip (keep existing configuration)"
|
|
||||||
echo " 2. Reconfigure (will backup existing config)"
|
|
||||||
echo " 3. Restart containers only"
|
|
||||||
echo ""
|
|
||||||
IMMICH_ACTION=""
|
|
||||||
prompt_text "Choose option [1/2/3]:" "1" IMMICH_ACTION
|
|
||||||
|
|
||||||
case "$IMMICH_ACTION" in
|
|
||||||
2)
|
|
||||||
echo " Backing up existing configuration..."
|
|
||||||
BACKUP_DIR="$DOCKER_DIR/backups/$(date +%Y%m%d-%H%M%S)-immich"
|
|
||||||
mkdir -p "$BACKUP_DIR"
|
|
||||||
cp -r "$IMMICH_DIR" "$BACKUP_DIR/"
|
|
||||||
echo " ✓ Backup saved to: $BACKUP_DIR"
|
|
||||||
IMMICH_RECONFIGURE=true
|
|
||||||
;;
|
|
||||||
3)
|
|
||||||
echo " Restarting Immich containers..."
|
|
||||||
cd "$IMMICH_DIR"
|
|
||||||
docker compose restart 2>/dev/null && echo " ✓ Immich restarted" || echo " ⚠ Failed to restart"
|
|
||||||
IMMICH_RECONFIGURE=false
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
echo " Skipping Immich (already configured)"
|
|
||||||
IMMICH_RECONFIGURE=false
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
else
|
|
||||||
# New installation
|
|
||||||
IMMICH_RECONFIGURE=true
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ "$IMMICH_RECONFIGURE" = "true" ]; then
|
if [ "$IMMICH_RECONFIGURE" = "true" ]; then
|
||||||
echo "Installing Immich..."
|
echo "Installing Immich..."
|
||||||
@@ -2911,9 +2927,14 @@ IMMICH_ENV
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$INSTALL_AUDIOBOOKSHELF" = "y" ] || [ "$INSTALL_AUDIOBOOKSHELF" = "Y" ]; then
|
if [ "$INSTALL_AUDIOBOOKSHELF" = "y" ] || [ "$INSTALL_AUDIOBOOKSHELF" = "Y" ]; then
|
||||||
echo "Installing Audiobookshelf..."
|
|
||||||
ABS_DIR="$DOCKER_DIR/audiobookshelf"
|
ABS_DIR="$DOCKER_DIR/audiobookshelf"
|
||||||
|
|
||||||
|
# Check if already installed and ask what to do
|
||||||
|
check_service_exists "AudioBookshelf" "$ABS_DIR" ABS_RECONFIGURE
|
||||||
|
|
||||||
|
if [ "$ABS_RECONFIGURE" = "true" ]; then
|
||||||
|
echo "Installing Audiobookshelf..."
|
||||||
|
|
||||||
if [ "$DRY_RUN" = true ]; then
|
if [ "$DRY_RUN" = true ]; then
|
||||||
echo "[DRY-RUN] Would create $ABS_DIR"
|
echo "[DRY-RUN] Would create $ABS_DIR"
|
||||||
else
|
else
|
||||||
@@ -2964,7 +2985,8 @@ ABS_ENV
|
|||||||
echo " Access at: http://localhost:13378"
|
echo " Access at: http://localhost:13378"
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
fi
|
fi # End ABS_RECONFIGURE check
|
||||||
|
fi # End INSTALL_AUDIOBOOKSHELF check
|
||||||
|
|
||||||
# ---- EMBY ----
|
# ---- EMBY ----
|
||||||
if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_EMBY" ]; then
|
if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_EMBY" ]; then
|
||||||
@@ -2978,9 +3000,14 @@ ABS_ENV
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
if [ "$INSTALL_EMBY" = "y" ] || [ "$INSTALL_EMBY" = "Y" ]; then
|
if [ "$INSTALL_EMBY" = "y" ] || [ "$INSTALL_EMBY" = "Y" ]; then
|
||||||
echo "Installing Emby..."
|
|
||||||
EMBY_DIR="$DOCKER_DIR/emby"
|
EMBY_DIR="$DOCKER_DIR/emby"
|
||||||
|
|
||||||
|
# Check if already installed and ask what to do
|
||||||
|
check_service_exists "Emby" "$EMBY_DIR" EMBY_RECONFIGURE
|
||||||
|
|
||||||
|
if [ "$EMBY_RECONFIGURE" = "true" ]; then
|
||||||
|
echo "Installing Emby..."
|
||||||
|
|
||||||
if [ "$DRY_RUN" = true ]; then
|
if [ "$DRY_RUN" = true ]; then
|
||||||
echo "[DRY-RUN] Would create $EMBY_DIR"
|
echo "[DRY-RUN] Would create $EMBY_DIR"
|
||||||
else
|
else
|
||||||
@@ -3034,7 +3061,8 @@ EMBY_ENV
|
|||||||
echo " Access at: http://localhost:8096"
|
echo " Access at: http://localhost:8096"
|
||||||
echo ""
|
echo ""
|
||||||
fi
|
fi
|
||||||
fi
|
fi # End EMBY_RECONFIGURE check
|
||||||
|
fi # End INSTALL_EMBY check
|
||||||
|
|
||||||
# ---- A.R.M. (Automatic Ripping Machine) ----
|
# ---- A.R.M. (Automatic Ripping Machine) ----
|
||||||
if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_ARM" ]; then
|
if [ "$WHIPTAIL_USED" != true ] && [ -z "$INSTALL_ARM" ]; then
|
||||||
|
|||||||
Reference in New Issue
Block a user