56 lines
1.7 KiB
Bash
56 lines
1.7 KiB
Bash
#!/bin/bash
|
|
|
|
##########################################
|
|
# ProxMox update tools #
|
|
# Get OS release info on all CT`s/VM`s #
|
|
# @author: Bram Prieshof #
|
|
##########################################
|
|
|
|
#Dirs
|
|
WorkDir=$(dirname $0)
|
|
#InventoryFile
|
|
InventoryFile=$WorkDir/GuestInventory.csv
|
|
#Load functions
|
|
source $WorkDir/functions.sh
|
|
|
|
#Get what sould be checked
|
|
CheckVM=true
|
|
CheckCT=true
|
|
|
|
echo "Type,ID,Name,Status,Distro,Version" | tee $InventoryFile
|
|
|
|
#CT Inventory
|
|
if $CheckCT; then
|
|
TYPE=CT;
|
|
for ID in $(pct list | tail -n+2 | awk '{print $1}'); do
|
|
STATUS=$(pct status $ID |sed 's/status: //')
|
|
NAME=$(pct config $ID | grep hostname |sed 's/hostname: //')
|
|
if [ $STATUS == "running" ]; then OSRELEASE=$(pct exec $ID -- cat /etc/os-release);fi
|
|
ParseOSRelease
|
|
unset OSRELEASE ID NAME STATUS DISTRO VERSION
|
|
done
|
|
unset TYPE
|
|
fi
|
|
|
|
#VM inventory
|
|
if $CheckVM; then
|
|
TYPE=VM;
|
|
for ID in $(qm list | tail -n+2 | awk '{print $1}'); do
|
|
STATUS=$(qm status $ID |sed 's/status: //')
|
|
NAME=$(qm config $ID | grep name |sed 's/name: //')
|
|
OSYPE=$(qm config $ID | grep ostype |sed 's/ostype: //')
|
|
if [ $STATUS == "running" ]; then
|
|
if [[ $OSYPE == *"win"* ]]; then
|
|
DISTRO=Windows
|
|
VERSION=$(qm guest exec $ID "systeminfo" |jq -r '.["out-data"]'| grep "OS Name" |sed -e 's/OS Name://' -e 's/^[ \t]*//' -e 's/Microsoft Windows//' -e 's/^[ \t]*//')
|
|
echo "$TYPE,$ID,$NAME,$STATUS,$DISTRO,$VERSION" | tee -a $InventoryFile
|
|
else
|
|
OSRELEASE=$(qm guest exec $ID -- cat /etc/os-release |jq -r '.["out-data"]')
|
|
fi
|
|
fi
|
|
ParseOSRelease
|
|
unset OSRELEASE OSYPE ID NAME STATUS DISTRO VERSION
|
|
done
|
|
unset TYPE
|
|
fi
|