112 lines
3.0 KiB
Bash
Executable File
112 lines
3.0 KiB
Bash
Executable File
#!/bin/bash
|
|
set -e
|
|
|
|
# Default values
|
|
APP_NAME=""
|
|
DRY_RUN=false
|
|
|
|
# Source environment variables from load-env.sh
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
REPO_DIR="$(dirname "$SCRIPT_DIR")"
|
|
if [ -f "$REPO_DIR/load-env.sh" ]; then
|
|
source "$REPO_DIR/load-env.sh"
|
|
fi
|
|
|
|
function show_help {
|
|
echo "Usage: $0 APP_NAME [options]"
|
|
echo ""
|
|
echo "Arguments:"
|
|
echo " APP_NAME Name of the app to deploy (directory name in apps/)"
|
|
echo ""
|
|
echo "Optional arguments:"
|
|
echo " --dry-run Preview the processed configuration without applying"
|
|
echo " --help Show this help message"
|
|
echo ""
|
|
echo "Examples:"
|
|
echo " $0 immich"
|
|
echo " $0 nextcloud --dry-run"
|
|
exit 1
|
|
}
|
|
|
|
# Parse command-line arguments
|
|
while [[ $# -gt 0 ]]; do
|
|
key="$1"
|
|
case $key in
|
|
--dry-run)
|
|
DRY_RUN=true
|
|
shift
|
|
;;
|
|
--help)
|
|
show_help
|
|
;;
|
|
-*)
|
|
echo "Unknown option: $1"
|
|
show_help
|
|
;;
|
|
*)
|
|
# First non-option argument is the app name
|
|
APP_NAME="$1"
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Validate app name
|
|
if [[ -z "$APP_NAME" ]]; then
|
|
echo "Error: APP_NAME must be provided"
|
|
show_help
|
|
fi
|
|
|
|
# Check if app directory exists
|
|
APP_DIR="$REPO_DIR/apps/$APP_NAME"
|
|
if [[ ! -d "$APP_DIR" ]]; then
|
|
echo "Error: App directory not found: $APP_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
# Check if kustomization.yaml exists
|
|
if [[ ! -f "$APP_DIR/kustomization.yaml" ]]; then
|
|
echo "Error: kustomization.yaml not found in $APP_DIR"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Deploying app: $APP_NAME"
|
|
|
|
# Step 1: Generate config files
|
|
if [[ -f "$APP_DIR/config/.env" ]]; then
|
|
echo "Step 1: Generating config files..."
|
|
"$SCRIPT_DIR/generate-config" "$APP_NAME"
|
|
else
|
|
echo "Step 1: No .env file found, skipping config generation"
|
|
fi
|
|
|
|
# Handle dry run mode
|
|
if [[ "$DRY_RUN" == "true" ]]; then
|
|
echo "Step 2: Dry-run mode - showing kustomize output:"
|
|
kubectl kustomize "$APP_DIR"
|
|
exit 0
|
|
fi
|
|
|
|
# Step 2: Extract namespace from kustomization
|
|
echo "Step 2: Extracting namespace from kustomization..."
|
|
NAMESPACE=$(kubectl kustomize "$APP_DIR" | grep -o "namespace: [a-zA-Z0-9_-]\+" | head -1 | cut -d' ' -f2)
|
|
if [[ -n "$NAMESPACE" ]]; then
|
|
echo "Found namespace: $NAMESPACE"
|
|
|
|
# Create the namespace if it doesn't exist
|
|
echo "Creating namespace $NAMESPACE if it doesn't exist..."
|
|
kubectl create namespace "$NAMESPACE" --dry-run=client -o yaml | kubectl apply -f -
|
|
|
|
# Step 3: Copy TLS certificates to the namespace
|
|
echo "Step 3: Copying TLS certificates to namespace $NAMESPACE..."
|
|
"$SCRIPT_DIR/copy-secret" cert-manager:wildcard-internal-wild-cloud-tls "$NAMESPACE" || echo "Warning: Failed to copy internal wildcard certificate"
|
|
"$SCRIPT_DIR/copy-secret" cert-manager:wildcard-wild-cloud-tls "$NAMESPACE" || echo "Warning: Failed to copy external wildcard certificate"
|
|
else
|
|
echo "Warning: No namespace found in kustomization, using default namespace"
|
|
fi
|
|
|
|
# Step 4: Apply the app configuration
|
|
echo "Step 4: Applying app configuration..."
|
|
kubectl apply -k "$APP_DIR"
|
|
|
|
echo "✅ App '$APP_NAME' deployed successfully!" |