#!/bin/sh # Fleet probe: for each running VM, report guest-agent status + primary IP. # Run on a Proxmox host. Output: "VMID NAME GA-STATUS IP(s)" set -u qm list 2>/dev/null | awk 'NR>1 && $3=="running" {print $1, $2}' | while read -r vmid name; do [ -n "$vmid" ] || continue if timeout 10 qm agent "$vmid" ping >/dev/null 2>&1; then gastatus="GA-OK" ips=$(timeout 10 qm agent "$vmid" network-get-interfaces 2>/dev/null \ | python3 -c ' import sys, json try: data = json.load(sys.stdin) except Exception: sys.exit(0) seen = [] for iface in data: ifname = iface.get("name","") if ifname == "lo": continue for a in iface.get("ip-addresses", []): ip = a.get("ip-address","") if ":" in ip: continue if ip.startswith("127."): continue seen.append(ip) print(",".join(seen)) ' 2>/dev/null) else gastatus="GA-NO" ips="" fi printf '%s\t%s\t%s\t%s\n' "$vmid" "$name" "$gastatus" "$ips" done