Este artículo explica cómo localizar una máquina virtual o contenedor en un cluster de Proxmox VE utilizando su dirección IP.
Requisitos previos
- Acceso SSH al nodo de Proxmox con privilegios de root
- QEMU Guest Agent instalado y ejecutándose en las VMs (para máquinas virtuales QEMU)
- La utilidad
jqdisponible en el sistema
Script
#!/bin/bash
TARGET_IP="192.0.2.100"
pvesh get /cluster/resources --type vm --output-format json | \
jq -r '.[] | select(.status=="running") | "\(.type) \(.node) \(.vmid) \(.name)"' | \
xargs -P 10 -L 1 bash -c '
type=$1; node=$2; vmid=$3; name=$4
if [ "$type" = "qemu" ]; then
result=$(timeout 3 pvesh get /nodes/$node/qemu/$vmid/agent/network-get-interfaces --output-format json 2>/dev/null)
if echo "$result" | jq -e ".result[].\"ip-addresses\"[]? | select(.\"ip-address\" == \"'"$TARGET_IP"'\")" > /dev/null 2>&1; then
echo "Found: VMID $vmid ($name) on node $node [QEMU]"
fi
elif [ "$type" = "lxc" ]; then
result=$(timeout 3 pvesh get /nodes/$node/lxc/$vmid/interfaces --output-format json 2>/dev/null)
if echo "$result" | jq -e ".[] | select(.inet == \"'"$TARGET_IP"'\" or (.inet | startswith(\"'"$TARGET_IP"'/\")))" > /dev/null 2>&1; then
echo "Found: VMID $vmid ($name) on node $node [LXC]"
fi
fi
' _Reemplaza 192.0.2.100 con la dirección IP que deseas buscar.
Cómo funciona
- Obtiene la lista de recursos: Consulta la API de Proxmox para obtener todos los recursos de tipo VM en el cluster.
- Filtra por tipo: Separa las máquinas virtuales QEMU de los contenedores LXC.
- Consulta en paralelo: Ejecuta hasta 10 consultas simultáneas para acelerar la búsqueda.
-
Consulta las interfaces:
- Para QEMU: Usa el endpoint del Guest Agent (
/agent/network-get-interfaces). - Para LXC: Usa el endpoint de interfaces (
/interfaces).
- Para QEMU: Usa el endpoint del Guest Agent (
- Muestra el resultado: Si encuentra la IP, muestra el VMID, nombre, nodo y tipo (QEMU o LXC).
Ejemplo de salida
Found: VMID 105 (web-server) on node pve1 [QEMU]
Found: VMID 200 (dns-server) on node pve2 [LXC]Notas
- Para VMs QEMU, el script requiere que el QEMU Guest Agent esté instalado y en ejecución.
- Para contenedores LXC, no se requiere ningún agente adicional.
- El timeout de 3 segundos evita que VMs sin Guest Agent o con problemas de comunicación bloqueen la búsqueda.