promox-inventory.sh gelöscht
This commit is contained in:
@@ -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
|
|
||||||
Reference in New Issue
Block a user