promox-inventory.sh gelöscht

This commit is contained in:
2025-06-27 22:58:23 +02:00
parent 5546a2590d
commit 9c50137207
-160
View File
@@ -1,160 +0,0 @@
#!/bin/bash
# Default Konfiguration
SSH_USER="root"
INTERNAL_DOMAIN=""
USE_LOCAL=false
USE_INTERNAL=false
OUTPUT_FORMAT="cli"
NODES=()
# Argumente parsen
while [[ "$#" -gt 0 ]]; do
case "$1" in
--local) USE_LOCAL=true ;;
--internal) USE_INTERNAL=true ;;
--nodes) shift; IFS=',' read -r -a NODES <<< "$1" ;;
--output) shift; OUTPUT_FORMAT="$1" ;;
esac
shift
done
# Hilfsfunktionen
run_cmd() {
local node="$1"
local cmd="$2"
if $USE_LOCAL; then
bash -c "$cmd"
else
ssh "${SSH_USER}@${node}" "$cmd"
fi
}
resolve_dns() {
local hostname="$1"
getent hosts "$hostname" | awk '{print $1}'
}
format_bytes() {
local bytes="$1"
echo "$((bytes / 1024))M"
}
parse_storage() {
local config="$1"
echo "$config" | grep -E '(^scsi|^virtio|^rootfs|^mp[0-9]+)' | \
grep -v none | grep -oP 'size=\K[0-9]+[A-Z]+' | paste -sd "+" -
}
# Daten erfassen
declare -a DATA_ROWS
gather_node_data() {
local node="$1"
local hostname fqdn ip cpu ram
hostname=$(run_cmd "$node" "hostname")
fqdn="${hostname}.${INTERNAL_DOMAIN}"
ip=$(resolve_dns "$fqdn")
cpu=$(run_cmd "$node" "nproc")
ram=$(run_cmd "$node" "grep MemTotal /proc/meminfo | awk '{print int(\$2 / 1024)}'")
DATA_ROWS+=("$hostname|$fqdn|$ip|Node|$cpu|${ram}M|-")
}
gather_vm_data() {
local node="$1"
local vms
vms=$(run_cmd "$node" "qm list | awk 'NR>1 {print \$1}'")
for vm in $vms; do
local config name ip cpu ram storage
config=$(run_cmd "$node" "qm config $vm")
name=$(echo "$config" | grep "^name:" | cut -d' ' -f2-)
ip=$(echo "$config" | grep -oP "ip=\K[^,]+" | head -n1)
cpu=$(echo "$config" | grep "^cores:" | awk '{print $2}')
ram=$(echo "$config" | grep "^memory:" | awk '{print $2"M"}')
storage=$(parse_storage "$config")
DATA_ROWS+=("$vm|$name|${ip:-"-"}|VM|${cpu:-"-"}|${ram:-"-"}|$storage")
done
}
gather_lxc_data() {
local node="$1"
local lxcs
lxcs=$(run_cmd "$node" "pct list | awk 'NR>1 {print \$1}'")
for ct in $lxcs; do
local config name ip cpu ram storage
config=$(run_cmd "$node" "pct config $ct")
name=$(echo "$config" | grep "^hostname:" | cut -d' ' -f2-)
ip=$(echo "$config" | grep -oP "ip=\K[^,]+" | head -n1)
cpu=$(echo "$config" | grep "^cores:" | awk '{print $2}')
ram=$(echo "$config" | grep "^memory:" | awk '{print $2"M"}')
storage=$(parse_storage "$config")
DATA_ROWS+=("$ct|$name|${ip:-"-"}|CT|${cpu:-"-"}|${ram:-"-"}|$storage")
done
}
# Nodes abfragen
if $USE_LOCAL; then
gather_node_data "localhost"
gather_vm_data "localhost"
gather_lxc_data "localhost"
else
for n in "${NODES[@]}"; do
gather_node_data "$n"
gather_vm_data "$n"
gather_lxc_data "$n"
done
fi
# Dynamische Spaltenberechnung
calculate_widths() {
max_id=2; max_host=8; max_ip=10; max_typ=5; max_cpu=3; max_ram=3; max_storage=7
for row in "${DATA_ROWS[@]}"; do
IFS='|' read -r id hn ip typ cpu ram sto <<< "$row"
[[ ${#id} -gt $max_id ]] && max_id=${#id}
[[ ${#hn} -gt $max_host ]] && max_host=${#hn}
[[ ${#ip} -gt $max_ip ]] && max_ip=${#ip}
[[ ${#typ} -gt $max_typ ]] && max_typ=${#typ}
[[ ${#cpu} -gt $max_cpu ]] && max_cpu=${#cpu}
[[ ${#ram} -gt $max_ram ]] && max_ram=${#ram}
[[ ${#sto} -gt $max_storage ]] && max_storage=${#sto}
done
}
print_cli_output() {
calculate_widths
printf "%-${max_id}s %-${max_host}s %-${max_ip}s %-${max_typ}s %${max_cpu}s %${max_ram}s %-${max_storage}s\n" \
"ID" "Hostname" "IP" "Typ" "CPU" "RAM" "Storage"
printf -- "%0.s-" $(seq 1 $((max_id + max_host + max_ip + max_typ + max_cpu + max_ram + max_storage + 18)))
echo
for row in "${DATA_ROWS[@]}"; do
IFS='|' read -r id hn ip typ cpu ram sto <<< "$row"
printf "%-${max_id}s %-${max_host}s %-${max_ip}s %-${max_typ}s %${max_cpu}s %${max_ram}s %-${max_storage}s\n" \
"$id" "$hn" "$ip" "$typ" "$cpu" "$ram" "$sto"
done
}
print_csv_output() {
echo "ID,Hostname,IP,Typ,CPU,RAM,Storage"
for row in "${DATA_ROWS[@]}"; do
echo "$row" | tr '|' ','
done
}
print_json_output() {
echo "["
for i in "${!DATA_ROWS[@]}"; do
IFS='|' read -r id hn ip typ cpu ram sto <<< "${DATA_ROWS[i]}"
printf ' {"id": "%s", "hostname": "%s", "ip": "%s", "type": "%s", "cpu": "%s", "ram": "%s", "storage": "%s"}' \
"$id" "$hn" "$ip" "$typ" "$cpu" "$ram" "$sto"
[[ $i -lt $((${#DATA_ROWS[@]} - 1)) ]] && echo "," || echo
done
echo "]"
}
# Ausgabe
case "$OUTPUT_FORMAT" in
cli) print_cli_output ;;
csv) print_csv_output ;;
json) print_json_output ;;
*) echo "Unbekanntes Ausgabeformat: $OUTPUT_FORMAT" ;;
esac