- 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.
115 lines
4.1 KiB
Bash
Executable File
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
|