mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2025-12-20 14:11:09 -05:00
- 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
250 lines
7.6 KiB
Bash
Executable File
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
|