Files
Sankofa/scripts/check-proxmox-quota-ssh.sh
defiQUG 9daf1fd378 Apply Composer changes: comprehensive API updates, migrations, middleware, and infrastructure improvements
- Add comprehensive database migrations (001-024) for schema evolution
- Enhance API schema with expanded type definitions and resolvers
- Add new middleware: audit logging, rate limiting, MFA enforcement, security, tenant auth
- Implement new services: AI optimization, billing, blockchain, compliance, marketplace
- Add adapter layer for cloud integrations (Cloudflare, Kubernetes, Proxmox, storage)
- Update Crossplane provider with enhanced VM management capabilities
- Add comprehensive test suite for API endpoints and services
- Update frontend components with improved GraphQL subscriptions and real-time updates
- Enhance security configurations and headers (CSP, CORS, etc.)
- Update documentation and configuration files
- Add new CI/CD workflows and validation scripts
- Implement design system improvements and UI enhancements
2025-12-12 18:01:35 -08:00

177 lines
5.7 KiB
Bash
Executable File
Raw Permalink Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Check Proxmox resources via SSH
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
CYAN='\033[0;36m'
NC='\033[0m'
# Load environment
load_env() {
if [ -f "${PROJECT_ROOT}/.env" ]; then
source "${PROJECT_ROOT}/.env"
fi
PROXMOX_1_HOST="${PROXMOX_1_HOST:-192.168.11.10}"
PROXMOX_2_HOST="${PROXMOX_2_HOST:-192.168.11.11}"
PROXMOX_PASS="${PROXMOX_ROOT_PASS:-L@kers2010}"
}
log() {
echo -e "${BLUE}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $*"
}
log_success() {
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')] ✅${NC} $*"
}
log_warning() {
echo -e "${YELLOW}[$(date +'%Y-%m-%d %H:%M:%S')] ⚠️${NC} $*"
}
log_error() {
echo -e "${RED}[$(date +'%Y-%m-%d %H:%M:%S')] ❌${NC} $*"
}
log_info() {
echo -e "${CYAN}[$(date +'%Y-%m-%d %H:%M:%S')] ${NC} $*"
}
check_node_via_ssh() {
local host=$1
local node_name=$2
local site_name=$3
local password=$4
log "Checking ${site_name} (${host})..."
if ! command -v sshpass &> /dev/null; then
log_error "sshpass is required. Install with: apt-get install sshpass"
return 1
fi
# Get CPU info
local cpu_total cpu_avail
cpu_total=$(sshpass -p "${password}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${host} "nproc" 2>/dev/null || echo "0")
# Get memory info
local mem_total mem_available mem_used
mem_total=$(sshpass -p "${password}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${host} "free -g | awk '/^Mem:/ {print \$2}'" 2>/dev/null || echo "0")
mem_available=$(sshpass -p "${password}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${host} "free -g | awk '/^Mem:/ {print \$7}'" 2>/dev/null || echo "0")
mem_used=$(sshpass -p "${password}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${host} "free -g | awk '/^Mem:/ {print \$3}'" 2>/dev/null || echo "0")
# Get VM resource usage
local vm_cpu_total vm_mem_total
vm_cpu_total=$(sshpass -p "${password}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${host} "qm list 2>/dev/null | tail -n +2 | awk '{sum+=\$3} END {print sum+0}'" 2>/dev/null || echo "0")
vm_mem_total=$(sshpass -p "${password}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${host} "qm list 2>/dev/null | tail -n +2 | awk '{sum+=\$4} END {print sum+0}'" 2>/dev/null || echo "0")
# Calculate available
local cpu_avail mem_avail_gib
cpu_avail=$((cpu_total - vm_cpu_total))
mem_avail_gib=${mem_available}
log_info "=== Node: ${node_name} ==="
echo " CPU: ${cpu_avail} / ${cpu_total} cores available (${vm_cpu_total} used by VMs)"
echo " Memory: ${mem_avail_gib} GiB / ${mem_total} GiB available (${vm_mem_total} GiB used by VMs, ${mem_used} GiB system used)"
# Check storage
log_info "=== Storage Pools ==="
sshpass -p "${password}" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 root@${host} "pvesm status 2>/dev/null" | tail -n +2 | while read -r line; do
if [ -n "$line" ]; then
echo " - $line"
fi
done
echo "${cpu_avail}|${cpu_total}|${mem_avail_gib}|${mem_total}"
}
# Required resources
REQUIRED_CPU=72
REQUIRED_RAM=140
REQUIRED_DISK=278
main() {
log "=========================================="
log "Proxmox Resource Quota Check (SSH Method)"
log "=========================================="
log ""
log_info "Required Resources:"
log " CPU: ${REQUIRED_CPU} cores"
log " RAM: ${REQUIRED_RAM} GiB"
log " Disk: ${REQUIRED_DISK} GiB"
log ""
load_env
# Check Site 1
site1_result=$(check_node_via_ssh "${PROXMOX_1_HOST}" "ml110-01" "Site 1" "${PROXMOX_PASS}" 2>&1)
site1_status=$?
if [ $site1_status -eq 0 ]; then
IFS='|' read -r cpu1_avail cpu1_total mem1_avail mem1_total <<< "$(echo "$site1_result" | tail -1)"
else
log_warning "Could not check Site 1"
cpu1_avail=0
cpu1_total=0
mem1_avail=0
mem1_total=0
fi
echo ""
# Check Site 2
site2_result=$(check_node_via_ssh "${PROXMOX_2_HOST}" "r630-01" "Site 2" "${PROXMOX_PASS}" 2>&1)
site2_status=$?
if [ $site2_status -eq 0 ]; then
IFS='|' read -r cpu2_avail cpu2_total mem2_avail mem2_total <<< "$(echo "$site2_result" | tail -1)"
else
log_warning "Could not check Site 2"
cpu2_avail=0
cpu2_total=0
mem2_avail=0
mem2_total=0
fi
echo ""
log "=========================================="
log_info "=== Summary ==="
total_cpu_avail=$((cpu1_avail + cpu2_avail))
total_cpu=$((cpu1_total + cpu2_total))
total_mem_avail=$((mem1_avail + mem2_avail))
total_mem=$((mem1_total + mem2_total))
echo " Total CPU Available: ${total_cpu_avail} / ${total_cpu} cores"
echo " Total Memory Available: ${total_mem_avail} / ${total_mem} GiB"
echo ""
# Compare with requirements
log_info "=== Resource Comparison ==="
if [ ${total_cpu_avail} -ge ${REQUIRED_CPU} ]; then
log_success "CPU: ${total_cpu_avail} >= ${REQUIRED_CPU}"
else
log_error "CPU: ${total_cpu_avail} < ${REQUIRED_CPU} ❌ (Shortfall: $((REQUIRED_CPU - total_cpu_avail)) cores)"
fi
if [ ${total_mem_avail} -ge ${REQUIRED_RAM} ]; then
log_success "RAM: ${total_mem_avail} GiB >= ${REQUIRED_RAM} GiB ✅"
else
log_error "RAM: ${total_mem_avail} GiB < ${REQUIRED_RAM} GiB ❌ (Shortfall: $((REQUIRED_RAM - total_mem_avail)) GiB)"
fi
echo ""
log "=========================================="
log_success "Quota check completed!"
}
main "$@"