Files
Sankofa/scripts/verify-proxmox-resources.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

236 lines
6.2 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
# Verify Proxmox Resources Script
# This script connects to Proxmox and verifies actual resource names
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
PROJECT_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
OUTPUT_DIR="${PROJECT_ROOT}/docs/proxmox-review"
# Colors
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
RED='\033[0;31m'
BLUE='\033[0;34m'
NC='\033[0m'
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} $*"
}
# Load environment
load_env() {
if [ -f "${PROJECT_ROOT}/.env" ]; then
source "${PROJECT_ROOT}/.env"
fi
PROXMOX_1_API_URL="${PROXMOX_1_API_URL:-https://192.168.11.10:8006}"
PROXMOX_1_USER="${PROXMOX_1_USER:-root}"
PROXMOX_1_PASS="${PROXMOX_1_PASS:-}"
PROXMOX_1_API_TOKEN="${PROXMOX_1_API_TOKEN:-}"
PROXMOX_1_INSECURE="${PROXMOX_1_INSECURE_SKIP_TLS_VERIFY:-false}"
PROXMOX_2_API_URL="${PROXMOX_2_API_URL:-https://192.168.11.11:8006}"
PROXMOX_2_USER="${PROXMOX_2_USER:-root}"
PROXMOX_2_PASS="${PROXMOX_2_PASS:-}"
PROXMOX_2_API_TOKEN="${PROXMOX_2_API_TOKEN:-}"
PROXMOX_2_INSECURE="${PROXMOX_2_INSECURE_SKIP_TLS_VERIFY:-false}"
}
# Authenticate and get ticket
get_ticket() {
local api_url=$1
local username=$2
local password=$3
local insecure=$4
local curl_opts=()
if [ "${insecure}" = "true" ]; then
curl_opts+=("-k")
fi
local response
response=$(curl -s "${curl_opts[@]}" -X POST \
-d "username=${username}&password=${password}" \
"${api_url}/api2/json/access/ticket" 2>/dev/null || echo "")
if [ -z "${response}" ]; then
echo ""
return 1
fi
if command -v jq &> /dev/null; then
echo "${response}" | jq -r '.data.ticket // empty'
else
echo "${response}" | grep -o '"ticket":"[^"]*' | cut -d'"' -f4
fi
}
# Get CSRF token
get_csrf() {
local api_url=$1
local username=$2
local password=$3
local insecure=$4
local curl_opts=()
if [ "${insecure}" = "true" ]; then
curl_opts+=("-k")
fi
local response
response=$(curl -s "${curl_opts[@]}" -X POST \
-d "username=${username}&password=${password}" \
"${api_url}/api2/json/access/ticket" 2>/dev/null || echo "")
if [ -z "${response}" ]; then
echo ""
return 1
fi
if command -v jq &> /dev/null; then
echo "${response}" | jq -r '.data.CSRFPreventionToken // empty'
else
echo "${response}" | grep -o '"CSRFPreventionToken":"[^"]*' | cut -d'"' -f4
fi
}
# API call
api_call() {
local api_url=$1
local endpoint=$2
local ticket=$3
local csrf=$4
local insecure=$5
local curl_opts=(-s -f)
if [ "${insecure}" = "true" ]; then
curl_opts+=("-k")
fi
local headers=()
if [ -n "${csrf}" ]; then
headers+=(-H "CSRFPreventionToken: ${csrf}")
fi
curl "${curl_opts[@]}" "${headers[@]}" \
-b "PVEAuthCookie=${ticket}" \
"${api_url}/api2/json${endpoint}" 2>/dev/null || echo ""
}
# Verify resources for an instance
verify_instance() {
local instance_num=$1
local api_url=$2
local username=$3
local password=$4
local insecure=$5
log "Verifying Instance ${instance_num} (${api_url})..."
if [ -z "${password}" ]; then
log_warning "Password not set, skipping verification"
return 1
fi
local ticket
ticket=$(get_ticket "${api_url}" "${username}" "${password}" "${insecure}")
if [ -z "${ticket}" ]; then
log_error "Failed to authenticate to Instance ${instance_num}"
return 1
fi
local csrf
csrf=$(get_csrf "${api_url}" "${username}" "${password}" "${insecure}")
log_success "Authenticated to Instance ${instance_num}"
# Get nodes
log " Fetching nodes..."
local nodes
nodes=$(api_call "${api_url}" "/nodes" "${ticket}" "${csrf}" "${insecure}")
# Get storage
log " Fetching storage pools..."
local storage
storage=$(api_call "${api_url}" "/storage" "${ticket}" "${csrf}" "${insecure}")
# Get version
log " Fetching version..."
local version
version=$(api_call "${api_url}" "/version" "${ticket}" "${csrf}" "${insecure}")
# Save results
local output_file="${OUTPUT_DIR}/proxmox-${instance_num}-resources-$(date +%Y%m%d_%H%M%S).json"
{
echo "{"
echo " \"instance\": ${instance_num},"
echo " \"api_url\": \"${api_url}\","
echo " \"timestamp\": \"$(date -Iseconds)\","
echo " \"nodes\": ${nodes:-null},"
echo " \"storage\": ${storage:-null},"
echo " \"version\": ${version:-null}"
echo "}"
} > "${output_file}"
log_success "Resources saved to ${output_file}"
# Display summary
if command -v jq &> /dev/null && [ -n "${nodes}" ]; then
log " Nodes:"
echo "${nodes}" | jq -r '.data[]? | " - \(.node) (status: \(.status // "unknown"))"' || true
log " Storage Pools:"
echo "${storage}" | jq -r '.data[]? | " - \(.storage) (type: \(.type), enabled: \(.enabled))"' || true
fi
return 0
}
main() {
log "Starting Proxmox Resource Verification..."
log "=========================================="
load_env
mkdir -p "${OUTPUT_DIR}"
# Verify Instance 1
verify_instance 1 \
"${PROXMOX_1_API_URL}" \
"${PROXMOX_1_USER}" \
"${PROXMOX_1_PASS}" \
"${PROXMOX_1_INSECURE}" || log_warning "Instance 1 verification failed"
log ""
# Verify Instance 2
verify_instance 2 \
"${PROXMOX_2_API_URL}" \
"${PROXMOX_2_USER}" \
"${PROXMOX_2_PASS}" \
"${PROXMOX_2_INSECURE}" || log_warning "Instance 2 verification failed"
log ""
log "=========================================="
log_success "Verification completed!"
log ""
log "Review resource files in: ${OUTPUT_DIR}"
}
main "$@"