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:
131
scripts/list-proxmox-images.sh
Executable file
131
scripts/list-proxmox-images.sh
Executable file
@@ -0,0 +1,131 @@
|
||||
#!/bin/bash
|
||||
# list-proxmox-images.sh
|
||||
# Lists all ISO and disk images available on Proxmox instances
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
# Load environment variables
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
if [ -f "${SCRIPT_DIR}/../.env" ]; then
|
||||
set -a
|
||||
source <(grep -v '^#' "${SCRIPT_DIR}/../.env" | grep -v '^$' | sed 's/^/export /')
|
||||
set +a
|
||||
fi
|
||||
|
||||
# Colors
|
||||
GREEN='\033[0;32m'
|
||||
RED='\033[0;31m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
CYAN='\033[0;36m'
|
||||
NC='\033[0m'
|
||||
|
||||
NODE1_IP="192.168.11.10"
|
||||
NODE1_NAME="ML110-01"
|
||||
NODE1_TOKEN="${PROXMOX_TOKEN_ML110_01:-}"
|
||||
NODE2_IP="192.168.11.11"
|
||||
NODE2_NAME="R630-01"
|
||||
NODE2_TOKEN="${PROXMOX_TOKEN_R630_01:-}"
|
||||
|
||||
log() {
|
||||
echo -e "${GREEN}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
info() {
|
||||
echo -e "${BLUE}[INFO]${NC} $1"
|
||||
}
|
||||
|
||||
warn() {
|
||||
echo -e "${YELLOW}[WARN]${NC} $1"
|
||||
}
|
||||
|
||||
list_images() {
|
||||
local endpoint=$1
|
||||
local token=$2
|
||||
local node_name=$3
|
||||
|
||||
echo ""
|
||||
info "=== ${node_name} Available Images ==="
|
||||
echo ""
|
||||
|
||||
# Get all storage pools
|
||||
local storages=$(curl -k -s -H "Authorization: PVEAPIToken ${token}" \
|
||||
"${endpoint}/api2/json/storage" 2>/dev/null | \
|
||||
jq -r '.data[]? | select(.content | contains("iso") or contains("vztmpl")) | .storage')
|
||||
|
||||
if [ -z "$storages" ]; then
|
||||
warn "No storage pools found with ISO or template content"
|
||||
return
|
||||
fi
|
||||
|
||||
local has_images=false
|
||||
|
||||
for storage in $storages; do
|
||||
local content=$(curl -k -s -H "Authorization: PVEAPIToken ${token}" \
|
||||
"${endpoint}/api2/json/storage/${storage}/content" 2>/dev/null)
|
||||
|
||||
# Check for ISO files
|
||||
local isos=$(echo "$content" | jq -r '.data[]? | select(.content == "iso") | "\(.volid) | \(.size | tonumber / 1024 / 1024 / 1024 | floor)GB"')
|
||||
|
||||
if [ -n "$isos" ]; then
|
||||
has_images=true
|
||||
echo "📀 ISO Images in ${storage}:"
|
||||
echo "$isos" | while IFS='|' read -r volid size; do
|
||||
echo " • ${volid} (${size})"
|
||||
done
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Check for container templates
|
||||
local templates=$(echo "$content" | jq -r '.data[]? | select(.content == "vztmpl") | "\(.volid) | \(.size | tonumber / 1024 / 1024 / 1024 | floor)GB"')
|
||||
|
||||
if [ -n "$templates" ]; then
|
||||
has_images=true
|
||||
echo "📦 Container Templates in ${storage}:"
|
||||
echo "$templates" | while IFS='|' read -r volid size; do
|
||||
echo " • ${volid} (${size})"
|
||||
done
|
||||
echo ""
|
||||
fi
|
||||
|
||||
# Check for disk images (raw, qcow2, etc.)
|
||||
local disk_images=$(echo "$content" | jq -r '.data[]? | select(.volid | contains(".img") or contains(".raw") or contains(".qcow2")) | "\(.volid) | \(.size | tonumber / 1024 / 1024 / 1024 | floor)GB"')
|
||||
|
||||
if [ -n "$disk_images" ]; then
|
||||
has_images=true
|
||||
echo "💾 Disk Images in ${storage}:"
|
||||
echo "$disk_images" | while IFS='|' read -r volid size; do
|
||||
echo " • ${volid} (${size})"
|
||||
done
|
||||
echo ""
|
||||
fi
|
||||
done
|
||||
|
||||
if [ "$has_images" = false ]; then
|
||||
warn "No ISO files, templates, or disk images found"
|
||||
fi
|
||||
}
|
||||
|
||||
main() {
|
||||
echo ""
|
||||
echo "╔══════════════════════════════════════════════════════════════╗"
|
||||
echo "║ Proxmox Image Inventory ║"
|
||||
echo "╚══════════════════════════════════════════════════════════════╝"
|
||||
echo ""
|
||||
|
||||
if [ -z "$NODE1_TOKEN" ] || [ -z "$NODE2_TOKEN" ]; then
|
||||
warn "Proxmox API tokens not found in .env file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
list_images "https://${NODE1_IP}:8006" "${NODE1_TOKEN}" "${NODE1_NAME}"
|
||||
list_images "https://${NODE2_IP}:8006" "${NODE2_TOKEN}" "${NODE2_NAME}"
|
||||
|
||||
echo ""
|
||||
info "Note: This script lists images available via API."
|
||||
info "Some images may require additional permissions to list."
|
||||
echo ""
|
||||
}
|
||||
|
||||
main "$@"
|
||||
|
||||
Reference in New Issue
Block a user