Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
277 lines
7.1 KiB
Bash
Executable File
277 lines
7.1 KiB
Bash
Executable File
#!/bin/bash
|
|
source ~/.bashrc
|
|
# Test All Access Paths
|
|
# Comprehensive test of all access methods to infrastructure
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# Load environment variables
|
|
if [ -f "$PROJECT_ROOT/.env" ]; then
|
|
set -a
|
|
source <(grep -v '^#' "$PROJECT_ROOT/.env" | grep -v '^$' | sed 's/#.*$//' | grep '=')
|
|
set +a
|
|
fi
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
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_test() {
|
|
echo -e "${BLUE}[TEST]${NC} $1"
|
|
}
|
|
|
|
ML110_IP="192.168.1.206"
|
|
R630_IP="192.168.1.49"
|
|
SSH_KEY="$HOME/.ssh/id_ed25519_proxmox"
|
|
VM_IPS=("192.168.1.60" "192.168.1.188" "192.168.1.121" "192.168.1.82")
|
|
VM_NAMES=("cloudflare-tunnel" "k3s-master" "git-server" "observability")
|
|
|
|
test_proxmox_web_ui() {
|
|
local host=$1
|
|
local name=$2
|
|
|
|
log_test "Testing $name Web UI (https://$host:8006)..."
|
|
local status=$(curl -k -s -o /dev/null -w "%{http_code}" --connect-timeout 5 "https://$host:8006" 2>/dev/null)
|
|
|
|
if [ "$status" = "200" ] || [ "$status" = "401" ] || [ "$status" = "403" ]; then
|
|
echo -e " ${GREEN}✓${NC} Web UI accessible (HTTP $status)"
|
|
return 0
|
|
else
|
|
echo -e " ${RED}✗${NC} Web UI not accessible (HTTP $status)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
test_proxmox_ssh() {
|
|
local host=$1
|
|
local name=$2
|
|
|
|
log_test "Testing $name SSH access..."
|
|
|
|
if [ ! -f "$SSH_KEY" ]; then
|
|
echo -e " ${YELLOW}⚠${NC} SSH key not found: $SSH_KEY"
|
|
return 1
|
|
fi
|
|
|
|
if ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no -o ConnectTimeout=5 "root@$host" "echo 'SSH OK'" &>/dev/null; then
|
|
echo -e " ${GREEN}✓${NC} SSH access working"
|
|
return 0
|
|
else
|
|
echo -e " ${RED}✗${NC} SSH access failed"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
test_proxmox_api() {
|
|
local host=$1
|
|
local name=$2
|
|
|
|
log_test "Testing $name API access..."
|
|
|
|
if [ -z "${PVE_ROOT_PASS:-}" ]; then
|
|
echo -e " ${YELLOW}⚠${NC} PVE_ROOT_PASS not set"
|
|
return 1
|
|
fi
|
|
|
|
local response=$(curl -s -k --connect-timeout 5 --max-time 10 \
|
|
-d "username=root@pam&password=$PVE_ROOT_PASS" \
|
|
"https://$host:8006/api2/json/access/ticket" 2>&1)
|
|
|
|
if echo "$response" | grep -q '"data"'; then
|
|
echo -e " ${GREEN}✓${NC} API access working"
|
|
return 0
|
|
else
|
|
echo -e " ${RED}✗${NC} API access failed"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
test_vm_network() {
|
|
local ip=$1
|
|
local name=$2
|
|
|
|
log_test "Testing $name network access ($ip)..."
|
|
|
|
if ping -c 1 -W 2 "$ip" &>/dev/null; then
|
|
echo -e " ${GREEN}✓${NC} Ping successful"
|
|
else
|
|
echo -e " ${RED}✗${NC} Ping failed"
|
|
return 1
|
|
fi
|
|
|
|
if timeout 2 bash -c "cat < /dev/null > /dev/tcp/$ip/22" 2>/dev/null; then
|
|
echo -e " ${GREEN}✓${NC} SSH port 22 open"
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} SSH port 22 closed or filtered"
|
|
fi
|
|
|
|
return 0
|
|
}
|
|
|
|
test_vm_ssh() {
|
|
local ip=$1
|
|
local name=$2
|
|
|
|
log_test "Testing $name SSH access..."
|
|
|
|
if [ ! -f "$SSH_KEY" ]; then
|
|
echo -e " ${YELLOW}⚠${NC} SSH key not found"
|
|
return 1
|
|
fi
|
|
|
|
if ssh -i "$SSH_KEY" -o StrictHostKeyChecking=no -o ConnectTimeout=5 "ubuntu@$ip" "hostname" &>/dev/null; then
|
|
echo -e " ${GREEN}✓${NC} SSH access working"
|
|
return 0
|
|
else
|
|
echo -e " ${RED}✗${NC} SSH access failed (authentication)"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
test_qemu_guest_agent() {
|
|
local vmid=$1
|
|
local name=$2
|
|
|
|
log_test "Testing $name QEMU Guest Agent (VM $vmid)..."
|
|
|
|
if [ ! -f "$SSH_KEY" ]; then
|
|
echo -e " ${YELLOW}⚠${NC} Cannot test (SSH key needed)"
|
|
return 1
|
|
fi
|
|
|
|
local result=$(ssh -i "$SSH_KEY" -o ConnectTimeout=5 "root@$ML110_IP" \
|
|
"qm guest exec $vmid -- echo 'test' 2>&1" 2>/dev/null)
|
|
|
|
if echo "$result" | grep -q "test"; then
|
|
echo -e " ${GREEN}✓${NC} Guest Agent working"
|
|
return 0
|
|
elif echo "$result" | grep -q "not running"; then
|
|
echo -e " ${YELLOW}⚠${NC} Guest Agent not running (needs installation)"
|
|
return 1
|
|
else
|
|
echo -e " ${RED}✗${NC} Guest Agent not accessible"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
test_service_ports() {
|
|
local ip=$1
|
|
local name=$2
|
|
local ports=()
|
|
|
|
case "$name" in
|
|
cloudflare-tunnel)
|
|
ports=(22)
|
|
;;
|
|
k3s-master)
|
|
ports=(22 6443 10250)
|
|
;;
|
|
git-server)
|
|
ports=(22 3000 2222)
|
|
;;
|
|
observability)
|
|
ports=(22 3000 9090)
|
|
;;
|
|
esac
|
|
|
|
log_test "Testing $name service ports..."
|
|
for port in "${ports[@]}"; do
|
|
if timeout 2 bash -c "cat < /dev/null > /dev/tcp/$ip/$port" 2>/dev/null; then
|
|
echo -e " ${GREEN}✓${NC} Port $port open"
|
|
else
|
|
echo -e " ${YELLOW}⚠${NC} Port $port closed (service may not be running)"
|
|
fi
|
|
done
|
|
}
|
|
|
|
main() {
|
|
echo "========================================="
|
|
echo "Access Paths Test - Complete Map"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
# Test Proxmox Hosts
|
|
log_info "Testing Proxmox Hosts"
|
|
echo ""
|
|
|
|
echo "ML110 (192.168.1.206):"
|
|
test_proxmox_web_ui "$ML110_IP" "ML110"
|
|
test_proxmox_ssh "$ML110_IP" "ML110"
|
|
test_proxmox_api "$ML110_IP" "ML110"
|
|
|
|
echo ""
|
|
echo "R630 (192.168.1.49):"
|
|
test_proxmox_web_ui "$R630_IP" "R630"
|
|
test_proxmox_ssh "$R630_IP" "R630"
|
|
test_proxmox_api "$R630_IP" "R630"
|
|
|
|
echo ""
|
|
echo "----------------------------------------"
|
|
echo ""
|
|
|
|
# Test VMs
|
|
log_info "Testing Virtual Machines"
|
|
echo ""
|
|
|
|
for i in "${!VM_IPS[@]}"; do
|
|
local ip="${VM_IPS[$i]}"
|
|
local name="${VM_NAMES[$i]}"
|
|
local vmid=$((100 + i))
|
|
|
|
echo "$name ($ip):"
|
|
test_vm_network "$ip" "$name"
|
|
test_vm_ssh "$ip" "$name"
|
|
test_qemu_guest_agent "$vmid" "$name"
|
|
test_service_ports "$ip" "$name"
|
|
echo ""
|
|
done
|
|
|
|
echo "========================================="
|
|
echo "Access Paths Summary"
|
|
echo "========================================="
|
|
echo ""
|
|
|
|
log_info "Working Access Methods:"
|
|
echo " ✅ Proxmox ML110: Web UI, SSH, API"
|
|
echo " ✅ Proxmox R630: Web UI, API (SSH pending)"
|
|
echo " ✅ All VMs: Network reachable, Port 22 open"
|
|
echo " ✅ All VMs: Console access via Proxmox Web UI"
|
|
echo ""
|
|
|
|
log_warn "Not Working:"
|
|
echo " ❌ SSH to VMs (authentication failing)"
|
|
echo " ❌ QEMU Guest Agent (not installed in VMs)"
|
|
echo " ❌ SSH to R630 (authentication failing)"
|
|
echo ""
|
|
|
|
log_info "Alternative Access Methods:"
|
|
echo " 🔧 Use Proxmox Console for VM access"
|
|
echo " 🔧 Use Proxmox API for automation"
|
|
echo " 🔧 Install QEMU Guest Agent in VMs"
|
|
echo " 🔧 Fix SSH keys via console"
|
|
echo ""
|
|
|
|
log_info "See: docs/troubleshooting/ACCESS_PATHS_MAP.md"
|
|
}
|
|
|
|
main "$@"
|
|
|