Initial commit: loc_az_hci (smom-dbis-138 excluded via .gitignore)
Some checks failed
Test / test (push) Has been cancelled
Some checks failed
Test / test (push) Has been cancelled
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
127
scripts/deploy/verify-cloud-init.sh
Executable file
127
scripts/deploy/verify-cloud-init.sh
Executable file
@@ -0,0 +1,127 @@
|
||||
#!/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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user