Files
Sankofa/scripts/start-smom-vms.sh

169 lines
4.6 KiB
Bash
Raw Permalink Normal View History

#!/bin/bash
# start-smom-vms.sh
# Start all SMOM-DBIS-138 VMs via Proxmox API
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'
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} $*"
}
# Get VM details
get_vm_details() {
local vm_name=$1
local vm_id
local node
local state
vm_id=$(kubectl get proxmoxvm "${vm_name}" -n default -o jsonpath='{.status.vmId}' 2>/dev/null || echo "")
node=$(kubectl get proxmoxvm "${vm_name}" -n default -o jsonpath='{.spec.forProvider.node}' 2>/dev/null || echo "")
state=$(kubectl get proxmoxvm "${vm_name}" -n default -o jsonpath='{.status.state}' 2>/dev/null || echo "")
if [ -z "${vm_id}" ] || [ "${vm_id}" = "0" ]; then
echo ""
return 1
fi
echo "${vm_id}|${node}|${state}"
}
# Start VM via Proxmox API (requires direct Proxmox access)
start_vm_direct() {
local vm_id=$1
local node=$2
local proxmox_host=$3
log "Starting VM ${vm_id} on ${node} via ${proxmox_host}..."
# This would require Proxmox API credentials
# For now, we'll provide instructions
log_warning "Direct Proxmox API access required"
log "To start VM manually:"
log " ssh root@${proxmox_host} 'qm start ${vm_id}'"
log " Or use Proxmox web UI: https://${proxmox_host}:8006"
log ""
}
main() {
log "=========================================="
log "SMOM-DBIS-138 VM Startup Guide"
log "=========================================="
log ""
log "VMs are created but in 'stopped' state."
log "They need to be started to receive IP addresses."
log ""
# Check VM status
local vms=(
"nginx-proxy-vm"
"cloudflare-tunnel-vm"
"smom-validator-01"
"smom-validator-02"
"smom-validator-03"
"smom-validator-04"
"smom-sentry-01"
"smom-sentry-02"
"smom-sentry-03"
"smom-sentry-04"
"smom-rpc-node-01"
"smom-rpc-node-02"
"smom-rpc-node-03"
"smom-rpc-node-04"
"smom-services"
"smom-blockscout"
"smom-monitoring"
"smom-management"
)
log "VM Status:"
log "----------"
local site1_vms=()
local site2_vms=()
for vm in "${vms[@]}"; do
local details
details=$(get_vm_details "${vm}" 2>/dev/null || echo "")
if [ -n "${details}" ]; then
IFS='|' read -r vm_id node state <<< "${details}"
if [ "${node}" = "ml110-01" ]; then
site1_vms+=("${vm_id}")
log " ${vm}: VMID=${vm_id}, Node=${node}, State=${state}"
elif [ "${node}" = "r630-01" ]; then
site2_vms+=("${vm_id}")
log " ${vm}: VMID=${vm_id}, Node=${node}, State=${state}"
fi
else
log_warning " ${vm}: Not found or no VMID"
fi
done
log ""
log "=========================================="
log "Start VMs via Proxmox"
log "=========================================="
log ""
log "Option 1: Via Proxmox Web UI"
log " 1. Open: https://192.168.11.10:8006 (Site 1)"
log " 2. Navigate to each VM"
log " 3. Click 'Start'"
log ""
log "Option 2: Via SSH/Command Line"
log ""
log "Site 1 (ml110-01) - 192.168.11.10:"
for vm_id in "${site1_vms[@]}"; do
log " ssh root@192.168.11.10 'qm start ${vm_id}'"
done
log ""
log "Site 2 (r630-01) - 192.168.11.11:"
for vm_id in "${site2_vms[@]}"; do
log " ssh root@192.168.11.11 'qm start ${vm_id}'"
done
log ""
log "Option 3: Wait for Auto-Start"
log " The Crossplane controller may start VMs automatically."
log " Monitor with: kubectl get proxmoxvm -A -w"
log ""
log "=========================================="
log "After Starting VMs"
log "=========================================="
log ""
log "1. Wait for VMs to boot (2-5 minutes)"
log "2. Check IP addresses:"
log " ./scripts/get-smom-vm-ips.sh"
log ""
log "3. Verify deployment:"
log " ./scripts/verify-deployment.sh"
log ""
log "4. Proceed with configuration:"
log " See: docs/smom-dbis-138-next-steps.md"
log ""
}
main "$@"