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
This commit is contained in:
172
scripts/deploy-test-vms.sh
Executable file
172
scripts/deploy-test-vms.sh
Executable file
@@ -0,0 +1,172 @@
|
||||
#!/bin/bash
|
||||
# deploy-test-vms.sh
|
||||
# Deploys test VMs to both Proxmox instances via Crossplane
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m'
|
||||
|
||||
# Configuration
|
||||
PROVIDER_DIR="${PROVIDER_DIR:-./crossplane-provider-proxmox}"
|
||||
INSTANCE1_MANIFEST="${PROVIDER_DIR}/examples/test-vm-instance-1.yaml"
|
||||
INSTANCE2_MANIFEST="${PROVIDER_DIR}/examples/test-vm-instance-2.yaml"
|
||||
WAIT_TIMEOUT="${WAIT_TIMEOUT:-300}"
|
||||
|
||||
log() {
|
||||
echo -e "${GREEN}[$(date +'%Y-%m-%d %H:%M:%S')]${NC} $1"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}[ERROR]${NC} $1" >&2
|
||||
exit 1
|
||||
}
|
||||
|
||||
warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
check_prerequisites() {
|
||||
log "Checking prerequisites..."
|
||||
|
||||
if ! command -v kubectl &> /dev/null; then
|
||||
error "kubectl is required but not installed"
|
||||
fi
|
||||
|
||||
if ! kubectl cluster-info &> /dev/null; then
|
||||
error "Cannot connect to Kubernetes cluster"
|
||||
fi
|
||||
|
||||
# Check if provider is deployed
|
||||
if ! kubectl get deployment crossplane-provider-proxmox -n crossplane-system &> /dev/null; then
|
||||
error "Crossplane provider is not deployed. Run ./scripts/deploy-crossplane-provider.sh first"
|
||||
fi
|
||||
|
||||
# Check if ProviderConfig exists
|
||||
if ! kubectl get providerconfig proxmox-provider-config &> /dev/null; then
|
||||
error "ProviderConfig not found. Create it first: kubectl apply -f ${PROVIDER_DIR}/examples/provider-config.yaml"
|
||||
fi
|
||||
|
||||
log "✓ Prerequisites check passed"
|
||||
}
|
||||
|
||||
deploy_vm() {
|
||||
local manifest=$1
|
||||
local vm_name=$2
|
||||
|
||||
if [ ! -f "$manifest" ]; then
|
||||
error "VM manifest not found: ${manifest}"
|
||||
fi
|
||||
|
||||
log "Deploying VM: ${vm_name}..."
|
||||
|
||||
# Apply manifest
|
||||
if kubectl apply -f "$manifest"; then
|
||||
log "✓ VM manifest applied: ${vm_name}"
|
||||
else
|
||||
error "Failed to apply VM manifest: ${vm_name}"
|
||||
fi
|
||||
|
||||
# Wait for VM to be created
|
||||
log "Waiting for VM to be ready (timeout: ${WAIT_TIMEOUT}s)..."
|
||||
|
||||
local start_time=$(date +%s)
|
||||
while true; do
|
||||
local current_time=$(date +%s)
|
||||
local elapsed=$((current_time - start_time))
|
||||
|
||||
if [ $elapsed -gt $WAIT_TIMEOUT ]; then
|
||||
warn "Timeout waiting for VM: ${vm_name}"
|
||||
return 1
|
||||
fi
|
||||
|
||||
local state=$(kubectl get proxmoxvm "$vm_name" -o jsonpath='{.status.state}' 2>/dev/null || echo "Unknown")
|
||||
local vm_id=$(kubectl get proxmoxvm "$vm_name" -o jsonpath='{.status.vmId}' 2>/dev/null || echo "")
|
||||
|
||||
if [ "$state" = "running" ] && [ -n "$vm_id" ]; then
|
||||
log "✓ VM is running: ${vm_name} (ID: ${vm_id})"
|
||||
return 0
|
||||
elif [ "$state" = "failed" ] || [ "$state" = "error" ]; then
|
||||
error "VM deployment failed: ${vm_name} (state: ${state})"
|
||||
fi
|
||||
|
||||
sleep 5
|
||||
done
|
||||
}
|
||||
|
||||
get_vm_status() {
|
||||
local vm_name=$1
|
||||
|
||||
info "VM Status: ${vm_name}"
|
||||
info "=================================="
|
||||
|
||||
kubectl get proxmoxvm "$vm_name" -o jsonpath='{
|
||||
"Name": "{.metadata.name}",
|
||||
"State": "{.status.state}",
|
||||
"VM ID": "{.status.vmId}",
|
||||
"IP Address": "{.status.ipAddress}",
|
||||
"Site": "{.spec.forProvider.site}",
|
||||
"Node": "{.spec.forProvider.node}"
|
||||
}' 2>/dev/null | jq '.' || warn "Could not get VM status"
|
||||
|
||||
echo ""
|
||||
}
|
||||
|
||||
test_vm_lifecycle() {
|
||||
local vm_name=$1
|
||||
|
||||
log "Testing VM lifecycle operations for: ${vm_name}"
|
||||
|
||||
# Test stop (if supported)
|
||||
info "Note: VM lifecycle operations (start/stop) would be tested here"
|
||||
info "This requires VM controller implementation"
|
||||
}
|
||||
|
||||
main() {
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ Test VM Deployment via Crossplane ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
check_prerequisites
|
||||
echo ""
|
||||
|
||||
# Deploy Instance 1 VM
|
||||
if [ -f "$INSTANCE1_MANIFEST" ]; then
|
||||
local vm1_name=$(grep -A1 "^metadata:" "$INSTANCE1_MANIFEST" | grep "name:" | awk '{print $2}')
|
||||
deploy_vm "$INSTANCE1_MANIFEST" "$vm1_name"
|
||||
get_vm_status "$vm1_name"
|
||||
else
|
||||
warn "Instance 1 manifest not found: ${INSTANCE1_MANIFEST}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
|
||||
# Deploy Instance 2 VM
|
||||
if [ -f "$INSTANCE2_MANIFEST" ]; then
|
||||
local vm2_name=$(grep -A1 "^metadata:" "$INSTANCE2_MANIFEST" | grep "name:" | awk '{print $2}')
|
||||
deploy_vm "$INSTANCE2_MANIFEST" "$vm2_name"
|
||||
get_vm_status "$vm2_name"
|
||||
else
|
||||
warn "Instance 2 manifest not found: ${INSTANCE2_MANIFEST}"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
log "Test VM deployment complete!"
|
||||
echo ""
|
||||
info "View all VMs: kubectl get proxmoxvm"
|
||||
info "View VM details: kubectl describe proxmoxvm <vm-name>"
|
||||
info "Delete VM: kubectl delete proxmoxvm <vm-name>"
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user