#!/bin/bash source ~/.bashrc # Complete Automation Script # Handles all setup steps with prerequisite checking 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 is ready check_vm_ready() { local ip=$1 local name=$2 # Ping test if ! ping -c 1 -W 2 "$ip" >/dev/null 2>&1; then return 1 fi # SSH test if ! timeout 2 bash -c "echo >/dev/tcp/$ip/22" 2>/dev/null; then return 1 fi return 0 } # Setup VM service setup_vm_service() { local name=$1 local ip=$2 local script=$3 log_step "Setting up $name on $ip..." # Check if VM is ready if ! check_vm_ready "$ip" "$name"; then log_warn "$name ($ip) is not ready yet. Skipping..." return 1 fi log_info "Copying setup script to $name..." # Try to copy script (may need password or SSH key) if scp -o ConnectTimeout=5 -o StrictHostKeyChecking=no "$script" "ubuntu@$ip:/tmp/setup.sh" 2>/dev/null; then log_info "Running setup script on $name..." ssh -o ConnectTimeout=5 -o StrictHostKeyChecking=no "ubuntu@$ip" "sudo bash /tmp/setup.sh" 2>&1 | while read line; do log_info " $line" done if [ ${PIPESTATUS[0]} -eq 0 ]; then log_info "✓ $name setup completed" return 0 else log_error "Setup failed on $name" return 1 fi else log_warn "Could not copy script to $name" log_info "Manual steps for $name:" echo " 1. SSH to $name: ssh ubuntu@$ip" echo " 2. Copy $script to VM" echo " 3. Run: sudo bash /path/to/script" return 1 fi } main() { log_header "Complete Setup Automation" echo "" log_step "Phase 1: Checking Prerequisites" echo "" # Check VM configurations log_info "Verifying VM configurations..." if ! ./scripts/check-vm-status.sh > /dev/null 2>&1; then log_warn "Some VMs may not be fully configured" fi echo "" log_step "Phase 2: Checking VM Readiness" echo "" local all_ready=true for vmid in "${!VMS[@]}"; do IFS=':' read -r name ip script <<< "${VMS[$vmid]}" if check_vm_ready "$ip" "$name"; then log_info "✓ $name is ready" else log_warn "✗ $name is not ready (Ubuntu may not be installed)" all_ready=false fi done echo "" if [ "$all_ready" != true ]; then log_error "Not all VMs are ready. Please:" echo " 1. Complete Ubuntu installation on all VMs" echo " 2. Ensure static IPs are configured" echo " 3. Ensure SSH access works" echo " 4. Run this script again" exit 1 fi log_step "Phase 3: Running Setup Scripts" echo "" local success_count=0 for vmid in "${!VMS[@]}"; do IFS=':' read -r name ip script <<< "${VMS[$vmid]}" if setup_vm_service "$name" "$ip" "$script"; then success_count=$((success_count + 1)) fi echo "" done log_header "Setup Complete" echo "" log_info "Successfully configured: $success_count/4 VMs" echo "" if [ $success_count -eq 4 ]; then log_info "✅ All services are set up!" echo "" log_info "Next steps:" echo " - Configure Cloudflare Tunnel (see docs/cloudflare-integration.md)" echo " - Deploy services to K3s cluster" echo " - Configure GitOps repository" echo " - Set up monitoring dashboards" else log_warn "Some services need manual setup" log_info "See VM_STATUS_REPORT.md for details" fi } main "$@"