Files
thrillwiki_django_no_react/shared/scripts/unraid/template-utils.sh
pacnpal d504d41de2 feat: complete monorepo structure with frontend and shared resources
- Add complete backend/ directory with full Django application
- Add frontend/ directory with Vite + TypeScript setup ready for Next.js
- Add comprehensive shared/ directory with:
  - Complete documentation and memory-bank archives
  - Media files and avatars (letters, park/ride images)
  - Deployment scripts and automation tools
  - Shared types and utilities
- Add architecture/ directory with migration guides
- Configure pnpm workspace for monorepo development
- Update .gitignore to exclude .django_tailwind_cli/ build artifacts
- Preserve all historical documentation in shared/docs/memory-bank/
- Set up proper structure for full-stack development with shared resources
2025-08-23 18:40:07 -04:00

250 lines
7.6 KiB
Bash
Executable File

#!/bin/bash
#
# ThrillWiki Template VM Management Utilities
# Quick helpers for managing template VMs on Unraid
#
# Set strict mode
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color
log() {
echo -e "${BLUE}[TEMPLATE]${NC} $1"
}
log_success() {
echo -e "${GREEN}[SUCCESS]${NC} $1"
}
log_warning() {
echo -e "${YELLOW}[WARNING]${NC} $1"
}
log_error() {
echo -e "${RED}[ERROR]${NC} $1"
}
# Configuration
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_DIR="$(cd "$SCRIPT_DIR/../.." && pwd)"
# Load environment variables if available
if [[ -f "$PROJECT_DIR/***REMOVED***.unraid" ]]; then
source "$PROJECT_DIR/***REMOVED***.unraid"
else
log_error "No ***REMOVED***.unraid file found. Please run setup-complete-automation.sh first."
exit 1
fi
# Function to show help
show_help() {
echo "ThrillWiki Template VM Management Utilities"
echo ""
echo "Usage:"
echo " $0 check Check if template exists and is ready"
echo " $0 info Show template information"
echo " $0 list List all template-based VM instances"
echo " $0 copy VM_NAME Copy template to new VM"
echo " $0 deploy VM_NAME Deploy complete VM from template"
echo " $0 status Show template VM status"
echo " $0 update Update template VM (instructions)"
echo " $0 autopull Manage auto-pull functionality"
echo ""
echo "Auto-pull Commands:"
echo " $0 autopull status Show auto-pull status on VMs"
echo " $0 autopull enable VM Enable auto-pull on specific VM"
echo " $0 autopull disable VM Disable auto-pull on specific VM"
echo " $0 autopull logs VM Show auto-pull logs from VM"
echo " $0 autopull test VM Test auto-pull on specific VM"
echo ""
echo "Examples:"
echo " $0 check # Verify template is ready"
echo " $0 copy thrillwiki-prod # Copy template to new VM"
echo " $0 deploy thrillwiki-test # Complete deployment from template"
echo " $0 autopull status # Check auto-pull status on all VMs"
echo " $0 autopull logs $VM_NAME # View auto-pull logs"
exit 0
}
# Check if required environment variables are set
check_environment() {
if [[ -z "$UNRAID_HOST" ]]; then
log_error "UNRAID_HOST not set. Please configure your environment."
exit 1
fi
if [[ -z "$UNRAID_USER" ]]; then
UNRAID_USER="root"
log "Using default UNRAID_USER: $UNRAID_USER"
fi
log_success "Environment configured: $UNRAID_USER@$UNRAID_HOST"
}
# Function to run python template manager commands
run_template_manager() {
cd "$SCRIPT_DIR"
export UNRAID_HOST="$UNRAID_HOST"
export UNRAID_USER="$UNRAID_USER"
python3 template_manager.py "$@"
}
# Function to run template-based main script
run_main_template() {
cd "$SCRIPT_DIR"
# Export all environment variables
export UNRAID_HOST="$UNRAID_HOST"
export UNRAID_USER="$UNRAID_USER"
export VM_NAME="$1"
export VM_MEMORY="${VM_MEMORY:-4096}"
export VM_VCPUS="${VM_VCPUS:-2}"
export VM_DISK_SIZE="${VM_DISK_SIZE:-50}"
export VM_IP="${VM_IP:-dhcp}"
export REPO_URL="${REPO_URL:-}"
export GITHUB_TOKEN="${GITHUB_TOKEN:-}"
shift # Remove VM_NAME from arguments
python3 main_template.py "$@"
}
# Parse command line arguments
case "${1:-}" in
check)
log "🔍 Checking template VM availability..."
check_environment
run_template_manager check
;;
info)
log "📋 Getting template VM information..."
check_environment
run_template_manager info
;;
list)
log "📋 Listing template-based VM instances..."
check_environment
run_template_manager list
;;
copy)
if [[ -z "${2:-}" ]]; then
log_error "VM name is required for copy operation"
echo "Usage: $0 copy VM_NAME"
exit 1
fi
log "💾 Copying template to VM: $2"
check_environment
run_template_manager copy "$2"
;;
deploy)
if [[ -z "${2:-}" ]]; then
log_error "VM name is required for deploy operation"
echo "Usage: $0 deploy VM_NAME"
exit 1
fi
log "🚀 Deploying complete VM from template: $2"
check_environment
run_main_template "$2" deploy
;;
status)
log "📊 Checking template VM status..."
check_environment
# Check template VM status directly
ssh "$UNRAID_USER@$UNRAID_HOST" "virsh domstate thrillwiki-template-ubuntu" 2>/dev/null || {
log_error "Could not check template VM status"
exit 1
}
;;
update)
log "🔄 Template VM update instructions:"
echo ""
echo "To update your template VM:"
echo "1. Start the template VM on Unraid"
echo "2. SSH into the template VM"
echo "3. Update packages: sudo apt update && sudo apt upgrade -y"
echo "4. Update ThrillWiki dependencies if needed"
echo "5. Clean up temporary files: sudo apt autoremove && sudo apt autoclean"
echo "6. Clear bash history: history -c && history -w"
echo "7. Shutdown the template VM: sudo shutdown now"
echo "8. The updated disk is now ready as a template"
echo ""
log_warning "IMPORTANT: Template VM must be stopped before creating new instances"
check_environment
run_template_manager update
;;
autopull)
shift # Remove 'autopull' from arguments
autopull_command="${1:-status}"
vm_name="${2:-$VM_NAME}"
log "🔄 Managing auto-pull functionality..."
check_environment
# Get list of all template VMs
if [[ "$autopull_command" == "status" ]] && [[ "$vm_name" == "$VM_NAME" ]]; then
all_vms=$(run_template_manager list | grep -E "(running|shut off)" | awk '{print $2}' || echo "")
else
all_vms=$vm_name
fi
if [[ -z "$all_vms" ]]; then
log_warning "No running template VMs found to manage auto-pull on."
exit 0
fi
for vm in $all_vms; do
log "====== Auto-pull for VM: $vm ======"
case "$autopull_command" in
status)
ssh "$vm" "[AWS-SECRET-REMOVED]uto-pull.sh --status"
;;
enable)
ssh "$vm" "(crontab -l 2>/dev/null || echo \"\") | { cat; echo \"*/10 * * * * [AWS-SECRET-REMOVED]uto-pull.sh >> /home/thrillwiki/logs/cron.log 2>&1\"; } | crontab - && echo '✅ Auto-pull enabled' || echo '❌ Failed to enable'"
;;
disable)
ssh "$vm" "crontab -l 2>/dev/null | grep -v 'auto-pull.sh' | crontab - && echo '✅ Auto-pull disabled' || echo '❌ Failed to disable'"
;;
logs)
ssh "$vm" "[AWS-SECRET-REMOVED]uto-pull.sh --logs"
;;
test)
ssh "$vm" "[AWS-SECRET-REMOVED]uto-pull.sh --force"
;;
*)
log_error "Invalid auto-pull command: $autopull_command"
show_help
exit 1
;;
esac
echo
done
;;
--help|-h|help|"")
show_help
;;
*)
log_error "Unknown command: ${1:-}"
echo ""
show_help
;;
esac