Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
175 lines
4.4 KiB
Bash
Executable File
175 lines
4.4 KiB
Bash
Executable File
#!/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 "$@"
|
|
|