Files
proxmox/scripts/list_vms.sh
defiQUG 8b67fcbda1 Organize docs directory: move 25 files to appropriate locations
- Created docs/00-meta/ for documentation meta files (11 files)
- Created docs/archive/reports/ for reports (5 files)
- Created docs/archive/issues/ for issue tracking (2 files)
- Created docs/bridge/contracts/ for Solidity contracts (3 files)
- Created docs/04-configuration/metamask/ for Metamask configs (3 files)
- Created docs/scripts/ for documentation scripts (2 files)
- Root directory now contains only 3 essential files (89.3% reduction)

All recommended actions from docs directory review complete.
2026-01-06 03:32:20 -08:00

115 lines
4.1 KiB
Bash
Executable File

#!/bin/bash
# List all Proxmox VMs with VMID, Name, IP Address, FQDN, and Description
# This script uses pvesh command-line tool and requires SSH access to Proxmox node
# Configuration
PROXMOX_HOST="${PROXMOX_HOST:-192.168.6.247}"
PROXMOX_USER="${PROXMOX_USER:-root}"
SSH_OPTS="-o StrictHostKeyChecking=no -o ConnectTimeout=5"
# Function to get VM config value
get_config_value() {
local node=$1
local vmid=$2
local vm_type=$3
local key=$4
ssh $SSH_OPTS ${PROXMOX_USER}@${PROXMOX_HOST} \
"pvesh get /nodes/${node}/${vm_type}/${vmid}/config --output-format json" 2>/dev/null | \
grep -o "\"${key}\":\"[^\"]*\"" | cut -d'"' -f4
}
# Function to get IP address for QEMU VM
get_qemu_ip() {
local node=$1
local vmid=$2
ssh $SSH_OPTS ${PROXMOX_USER}@${PROXMOX_HOST} \
"pvesh get /nodes/${node}/qemu/${vmid}/agent/network-get-interfaces --output-format json" 2>/dev/null | \
python3 -c "
import sys, json
try:
data = json.load(sys.stdin)
if 'result' in data:
for iface in data['result']:
if 'ip-addresses' in iface:
for ip_info in iface['ip-addresses']:
if ip_info.get('ip-address-type') == 'ipv4' and not ip_info.get('ip-address', '').startswith('127.'):
print(ip_info['ip-address'])
sys.exit(0)
except:
pass
" 2>/dev/null | head -1
}
# Function to get IP address for LXC container
get_lxc_ip() {
local vmid=$1
ssh $SSH_OPTS ${PROXMOX_USER}@${PROXMOX_HOST} \
"pct exec ${vmid} -- hostname -I 2>/dev/null" 2>/dev/null | \
awk '{for(i=1;i<=NF;i++) if($i !~ /^127\./) {print $i; exit}}'
}
# Print header
printf "%-6s | %-23s | %-4s | %-19s | %-23s | %s\n" "VMID" "Name" "Type" "IP Address" "FQDN" "Description"
echo "-------|-------------------------|------|-------------------|-------------------------|----------------"
# Get all nodes
NODES=$(ssh $SSH_OPTS ${PROXMOX_USER}@${PROXMOX_HOST} "pvesh get /nodes --output-format json" 2>/dev/null | \
python3 -c "import sys, json; [print(n['node']) for n in json.load(sys.stdin)]" 2>/dev/null)
if [ -z "$NODES" ]; then
echo "Error: Could not connect to Proxmox host ${PROXMOX_HOST}" >&2
echo "Usage: PROXMOX_HOST=your-host PROXMOX_USER=root ./list_vms.sh" >&2
exit 1
fi
# Process each node
for NODE in $NODES; do
# Get QEMU VMs
ssh $SSH_OPTS ${PROXMOX_USER}@${PROXMOX_HOST} \
"pvesh get /nodes/${NODE}/qemu --output-format json" 2>/dev/null | \
python3 -c "
import sys, json
try:
vms = json.load(sys.stdin)
for vm in sorted(vms, key=lambda x: int(x.get('vmid', 0))):
print(f\"{vm.get('vmid')}|{vm.get('name', 'N/A')}|qemu|{NODE}\")
except:
pass
" 2>/dev/null | while IFS='|' read -r vmid name vm_type node; do
description=$(get_config_value "$node" "$vmid" "$vm_type" "description")
hostname=$(get_config_value "$node" "$vmid" "$vm_type" "hostname")
ip=$(get_qemu_ip "$node" "$vmid")
description=${description:-N/A}
fqdn=${hostname:-N/A}
ip=${ip:-N/A}
printf "%-6s | %-23s | %-4s | %-19s | %-23s | %s\n" \
"$vmid" "$name" "QEMU" "$ip" "$fqdn" "$description"
done
# Get LXC containers
ssh $SSH_OPTS ${PROXMOX_USER}@${PROXMOX_HOST} \
"pvesh get /nodes/${NODE}/lxc --output-format json" 2>/dev/null | \
python3 -c "
import sys, json
try:
vms = json.load(sys.stdin)
for vm in sorted(vms, key=lambda x: int(x.get('vmid', 0))):
print(f\"{vm.get('vmid')}|{vm.get('name', 'N/A')}|lxc|{NODE}\")
except:
pass
" 2>/dev/null | while IFS='|' read -r vmid name vm_type node; do
description=$(get_config_value "$node" "$vmid" "$vm_type" "description")
hostname=$(get_config_value "$node" "$vmid" "$vm_type" "hostname")
ip=$(get_lxc_ip "$vmid")
description=${description:-N/A}
fqdn=${hostname:-N/A}
ip=${ip:-N/A}
printf "%-6s | %-23s | %-4s | %-19s | %-23s | %s\n" \
"$vmid" "$name" "LXC" "$ip" "$fqdn" "$description"
done
done