Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
128 lines
3.4 KiB
Bash
Executable File
128 lines
3.4 KiB
Bash
Executable File
#!/bin/bash
|
|
source ~/.bashrc
|
|
# Verify Cloud-init Installation on VMs
|
|
# Checks if cloud-init is installed and working
|
|
|
|
set -e
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
PROJECT_ROOT="$(cd "$SCRIPT_DIR/../.." && pwd)"
|
|
|
|
# SSH user
|
|
SSH_USER="${SSH_USER:-ubuntu}"
|
|
SSH_KEY="${SSH_KEY:-$HOME/.ssh/id_ed25519_proxmox}"
|
|
PROXMOX_HOST="${PROXMOX_ML110_IP:-192.168.1.206}"
|
|
|
|
# Import helper library
|
|
if [ -f "$PROJECT_ROOT/scripts/lib/proxmox_vm_helpers.sh" ]; then
|
|
source "$PROJECT_ROOT/scripts/lib/proxmox_vm_helpers.sh"
|
|
else
|
|
echo "[ERROR] Helper library not found. Run this script on Proxmox host or via SSH." >&2
|
|
exit 1
|
|
fi
|
|
|
|
# VMID NAME (no IP - discovered via guest agent)
|
|
VMS=(
|
|
"100 cloudflare-tunnel"
|
|
"101 k3s-master"
|
|
"102 git-server"
|
|
"103 observability"
|
|
)
|
|
|
|
# Colors
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m'
|
|
|
|
log_info() {
|
|
echo -e "${GREEN}[INFO]${NC} $1"
|
|
}
|
|
|
|
log_warn() {
|
|
echo -e "${YELLOW}[WARN]${NC} $1"
|
|
}
|
|
|
|
log_error() {
|
|
echo -e "${RED}[ERROR]${NC} $1"
|
|
}
|
|
|
|
check_cloud_init() {
|
|
local vmid=$1
|
|
local name=$2
|
|
|
|
log_info "Checking cloud-init on $name (VM $vmid)..."
|
|
|
|
# Ensure guest agent is enabled
|
|
ensure_guest_agent_enabled "$vmid" || true
|
|
|
|
# Get IP from guest agent
|
|
local ip
|
|
ip="$(get_vm_ip_or_warn "$vmid" "$name" || true)"
|
|
|
|
if [[ -z "$ip" ]]; then
|
|
log_warn "$name (VM $vmid) - cannot get IP from guest agent"
|
|
return 1
|
|
fi
|
|
|
|
log_info " Discovered IP: $ip"
|
|
|
|
# Test connectivity
|
|
if ! ping -c 1 -W 2 "$ip" &> /dev/null; then
|
|
log_warn "$name ($ip) is not reachable - may still be booting"
|
|
return 1
|
|
fi
|
|
|
|
# Try SSH connection
|
|
if ssh -i "$SSH_KEY" -o StrictHostKeyChecking=accept-new -o ConnectTimeout=5 "$SSH_USER@$ip" "echo 'Connected'" &>/dev/null; then
|
|
log_info " SSH connection successful"
|
|
|
|
# Check cloud-init
|
|
local cloud_init_status=$(ssh -i "$SSH_KEY" -o StrictHostKeyChecking=accept-new "$SSH_USER@$ip" \
|
|
"systemctl is-active cloud-init 2>/dev/null || echo 'not-installed'" 2>/dev/null)
|
|
|
|
if [ "$cloud_init_status" = "active" ] || [ "$cloud_init_status" = "inactive" ]; then
|
|
log_info " ✓ Cloud-init is installed"
|
|
ssh -i "$SSH_KEY" -o StrictHostKeyChecking=accept-new "$SSH_USER@$ip" \
|
|
"cloud-init status 2>/dev/null || echo 'Status unknown'" 2>/dev/null
|
|
return 0
|
|
else
|
|
log_warn " Cloud-init may not be installed"
|
|
return 1
|
|
fi
|
|
else
|
|
log_warn " Cannot SSH to $name ($ip) - may need password or key"
|
|
log_info " To verify manually: ssh -i $SSH_KEY $SSH_USER@$ip"
|
|
return 1
|
|
fi
|
|
}
|
|
|
|
main() {
|
|
log_info "Verifying cloud-init installation on VMs"
|
|
log_warn "This requires SSH access to VMs"
|
|
log_info "Using guest-agent IP discovery"
|
|
echo ""
|
|
|
|
local all_ok=true
|
|
|
|
for vm_spec in "${VMS[@]}"; do
|
|
read -r vmid name <<< "$vm_spec"
|
|
if ! check_cloud_init "$vmid" "$name"; then
|
|
all_ok=false
|
|
fi
|
|
echo ""
|
|
done
|
|
|
|
if [ "$all_ok" = true ]; then
|
|
log_info "All VMs have cloud-init installed!"
|
|
else
|
|
log_warn "Some VMs may not have cloud-init or are not accessible"
|
|
log_info "If cloud-init is not installed, install it:"
|
|
log_info " sudo apt update && sudo apt install cloud-init"
|
|
fi
|
|
}
|
|
|
|
main "$@"
|
|
|