#!/bin/bash source ~/.bashrc # Complete Deployment Script - All Services # Orchestrates deployment of all VMs and services set -e # Colors RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' CYAN='\033[0;36m' NC='\033[0m' log_info() { echo -e "${GREEN}[INFO]${NC} $1" } log_warn() { echo -e "${YELLOW}[WARN]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } log_step() { echo -e "${BLUE}[STEP]${NC} $1" } log_header() { echo -e "${CYAN}========================================${NC}" echo -e "${CYAN}$1${NC}" echo -e "${CYAN}========================================${NC}" } # VM configurations declare -A VMS=( ["100"]="cloudflare-tunnel:192.168.1.60:scripts/setup-cloudflare-tunnel.sh" ["101"]="k3s-master:192.168.1.188:scripts/setup-k3s.sh" ["102"]="git-server:192.168.1.121:scripts/setup-git-server.sh" ["103"]="observability:192.168.1.82:scripts/setup-observability.sh" ) # Check VM connectivity and run setup setup_vm() { local vmid=$1 local name=$2 local ip=$3 local script=$4 log_step "Setting up $name ($ip)..." # Check connectivity if ! ping -c 1 -W 2 "$ip" >/dev/null 2>&1; then log_warn "$name ($ip) is not reachable. Skipping..." return 1 fi log_info "Copying setup script to $name..." if scp "$script" "user@$ip:/tmp/setup.sh" 2>/dev/null; then log_info "Running setup script on $name..." ssh "user@$ip" "sudo bash /tmp/setup.sh" || log_warn "Setup script failed on $name" else log_warn "Could not copy script to $name. Manual setup required." log_info "Manual steps:" echo " 1. SSH to $name: ssh user@$ip" echo " 2. Copy $script to VM" echo " 3. Run: sudo bash /path/to/script" fi } main() { log_header "Complete Deployment - All Services" echo "" log_step "Phase 1: Prerequisites" echo "" if ./scripts/utils/test-proxmox-connection.sh > /dev/null 2>&1; then log_info "✓ Proxmox connections verified" else log_error "Proxmox connection failed" exit 1 fi echo "" log_step "Phase 2: VM Creation Status" echo "" log_warn "VMs must be created via Proxmox Web UI first" log_info "Proxmox URL: https://192.168.1.206:8006" log_info "See CREATE_VMS.md for detailed instructions" echo "" log_info "Required VMs:" for vmid in "${!VMS[@]}"; do IFS=':' read -r name ip script <<< "${VMS[$vmid]}" echo " - $name (ID: $vmid, IP: $ip)" done echo "" read -p "Have all VMs been created and OS installed? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then log_warn "Please create VMs first, then run this script again" exit 0 fi log_step "Phase 3: Automated Setup" echo "" log_info "Attempting to set up each VM..." echo "" for vmid in "${!VMS[@]}"; do IFS=':' read -r name ip script <<< "${VMS[$vmid]}" setup_vm "$vmid" "$name" "$ip" "$script" echo "" done log_step "Phase 4: Post-Setup Verification" echo "" log_info "Verifying services..." echo "" # Check services services=( "192.168.1.60:Cloudflare Tunnel" "192.168.1.188:6443:K3s API" "192.168.1.121:3000:Gitea" "192.168.1.82:9090:Prometheus" "192.168.1.82:3000:Grafana" ) for service in "${services[@]}"; do IFS=':' read -r ip port name <<< "$service" if [ -z "$port" ]; then port="22" fi if timeout 2 bash -c "echo >/dev/tcp/$ip/$port" 2>/dev/null; then log_info "✓ $name is accessible" else log_warn "✗ $name is not accessible (may still be starting)" fi done log_header "Deployment Complete" echo "" log_info "Next steps:" echo " 1. Configure Cloudflare Tunnel (see docs/cloudflare-integration.md)" echo " 2. Set up K3s namespaces and deploy services" echo " 3. Configure GitOps repository" echo " 4. Deploy HC Stack services" echo "" log_info "See DEPLOYMENT_CHECKLIST.md to track remaining tasks" } main "$@"