#!/bin/bash if [ -z "$1" ]||[ "$1" == "-h" ]||[ "$1" == "--help" ] then echo "`basename $0` liest Informationen von VM´s eines ESXI Servers aus" echo "" echo "Syntax:" echo "`basename $0` esxi-server" echo "Liest die Information von esxi-server" echo "" echo "Syntax einrichten der Datenbank:" echo "`basename $0` -install" echo "" echo "Syntax Abfragen der Datenbank:" echo "`basename $0`"' -query "String"' exit 0 fi if [ "$1" == "-v" ] then echo "`basename $0` Version 1.0" echo "Reini" echo "http://www.call4wall.com" exit 0 fi ################################################ Quellen und Ziele ################################## Scriptselbst=`basename $0` Startpfad=`pwd` #Datenbankpfad=$HOME/.$Scriptselbst Datenbankpfad=/usr/lib/cgi-bin/readdb Temppfad=/tmp/$Scriptselbst rm -r $Temppfad 2>/dev/null Datenbankfile=$Datenbankpfad/$Scriptselbst.db if echo $1|egrep ^[[:digit:]] 1>&2>/dev/null then deresxi=$1 else deresxi=${1%%.*} fi ############################################### Anlegen der Verzeichnisse ########################### if [ ! -d $Datenbankpfad ] then mkdir $Datenbankpfad fi if [ ! -d $Temppfad ] then mkdir $Temppfad fi ############################################# Installation der DatenBank ############################# if [ $1 == "-install" ] then if [ ! -e $Datenbankfile ] then echo "create table kundentab ( ID integer primary key autoincrement,kundenname text not null);"|sqlite3 $Datenbankfile echo "create table vmtab ( ID integer primary key autoincrement,vmid integer not null,esxi text not null,vmname text not null,powerstate boolean,cpu integer,ram integer,hdd text,freespace integerm,gpuram integer,createtime datetime,changetime datetime,dumptime datetime not null);"|sqlite3 $Datenbankfile echo "create table verknuepftab ( aID integer not null,bID integer not null);"|sqlite3 $Datenbankfile else echo "$Datenbankfile exestiert bereits" fi rm -r $Temppfad exit fi ########################### Vm´s einlesen ####################################################################### ssh $deresxi vim-cmd vmsvc/getallvms|egrep ^[[:digit:]] >$Temppfad/$Scriptselbst.00.dump ###########################Summary Werte holen ################################################################# ssh $deresxi 'for vm in `vim-cmd vmsvc/getallvms|egrep ^[[:digit:]]|cut -f1 -d" "`;do vim-cmd vmsvc/get.summary $vm;done' >$Temppfad/$Scriptselbst.01.dump ##########################DataStore Werte holen######################################## ssh $deresxi 'for vm in `vim-cmd vmsvc/getallvms|egrep ^[[:digit:]]|cut -f1 -d" "`;do vim-cmd vmsvc/get.datastores $vm;done' >$Temppfad/$Scriptselbst.02.dump ##########################videoRamSizeInKB Werte holen######################################### ssh $deresxi 'for vm in `vim-cmd vmsvc/getallvms|egrep ^[[:digit:]]|cut -f1 -d" "`;do vim-cmd vmsvc/device.getdevices $vm;done' >$Temppfad/$Scriptselbst.03.dump ########################## modified Werte holen######################################### ssh $deresxi 'for vm in `vim-cmd vmsvc/getallvms|egrep ^[[:digit:]]|cut -f1 -d" "`;do vim-cmd vmsvc/get.config $vm;done' >$Temppfad/$Scriptselbst.04.dump ##########################Local Verarbeiten##################################### cat $Temppfad/$Scriptselbst.00.dump|cut -f1 -d" " >$Temppfad/$Scriptselbst.VMid.dump cat $Temppfad/$Scriptselbst.00.dump|sed 's/ //g'|cut -f4 -d" "|cut -f1 -d"/" >$Temppfad/$Scriptselbst.pfadname.dump cat $Temppfad/$Scriptselbst.01.dump|grep "name ="|sed 's/ //g'|cut -f2 -d'"' >$Temppfad/$Scriptselbst.hostName.dump cat $Temppfad/$Scriptselbst.01.dump|grep "powerState ="|sed 's/ //g'|cut -f2 -d'"'|sed s'/poweredOn/1/g'|sed 's/poweredOff/0/g' >$Temppfad/$Scriptselbst.powerState.dump cat $Temppfad/$Scriptselbst.01.dump|grep "numCpu ="|sed 's/ //g'|cut -f2 -d"="|sed 's/,//g' >$Temppfad/$Scriptselbst.numCpu.dump cat $Temppfad/$Scriptselbst.01.dump|grep "maxMemoryUsage ="|sed 's/ //g'|cut -f2 -d"="|sed 's/,//g' >$Temppfad/$Scriptselbst.maxMemoryUsage.dump cat $Temppfad/$Scriptselbst.02.dump|grep "freeSpace "|sed 's/ //g'|cut -f1 -d" "|cut -f4 -d"e" >$Temppfad/$Scriptselbst.freeSpace.dump cat $Temppfad/$Scriptselbst.00.dump |cut -f2 -d"["|sed 's/] /\//g'|cut -f-2 -d"/"|sed 's/^/\/vmfs\/volumes\//g' >$Temppfad/$Scriptselbst.pfadurl.dump cat $Temppfad/$Scriptselbst.03.dump|grep "capacityInKB"|cut -f2 -d"="|sed 's/,//g'|sed 's/ //g' >$Temppfad/$Scriptselbst.capacity.dump cat $Temppfad/$Scriptselbst.03.dump|grep "videoRamSizeInKB"|sed 's/ //g'|cut -f2 -d"="|sed 's/,//g' >$Temppfad/$Scriptselbst.videoRamSizeInKB.dump cat $Temppfad/$Scriptselbst.04.dump|grep "changeVersion ="|sed 's/ //g'|cut -f2 -d'"'|cut -f1 -d"."|sed 's/T/-/g' >$Temppfad/$Scriptselbst.modified.dump while read line do echo $deresxi $line >>$Temppfad/$Scriptselbst.esxi-vmname.dump done < $Temppfad/$Scriptselbst.hostName.dump ########################## Zusammen fuehren ################################################################################# dumptime=$(date '+%Y-%m-%d-%R:%S') ########################### HDD´s und ErstellungsDatum einlesen ############################ #for a in $(cat $Temppfad/$Scriptselbst.datacenter.dump) while read a do pfad=$(echo "$a"|sed 's/ /\\ /g') echo "$pfad" >> $Temppfad/$Scriptselbst.test2.dump #echo "$dumptime" >> $Temppfad/$Scriptselbst.dumpdate.dump rohdate=$(ssh $deresxi "ls -tec $pfad|tail -n1|sed 's/ //g'|cut -f5-7 -d' '" > $Temppfad/$Scriptselbst.createdate.dump banam=$(basename "$a") b=$(ssh $deresxi "ls -lh `echo $pfad`/$banam*flat.vmdk|sed 's/ */ /g'|cut -f5 -d' '" > $Temppfad/$Scriptselbst.test3.dump echo "HDD=$b|"|tr "\n" " " >> $Temppfad/$Scriptselbst.test1.dump echo "HDD=$b|"|tr "\n" " "|sed 's/|/\n/g'|sed 's/ /+/g'|sed 's/^+//g' >> $Temppfad/$Scriptselbst.sort-hdds.dump #echo "d=$pfad HDD $b" >> $Temppfad/$Scriptselbst.test.txt #echo "$a HDD $b"|sed 's/ /-/g' >> $Temppfad/$Scriptselbst.unsort-hdds.dump done < $Temppfad/$Scriptselbst.pfadurl.dump #cat $Temppfad/$Scriptselbst.unsort-hdds.dump|uniq|grep "/"|sed 's/--/ /g'|cut -f2 -d" " >$Temppfad/$Scriptselbst.sort-hdds.dump ############################ Daten zusammen fügen ########################################################### paste $Temppfad/$Scriptselbst.VMid.dump $Temppfad/$Scriptselbst.esxi-vmname.dump $Temppfad/$Scriptselbst.powerState.dump $Temppfad/$Scriptselbst.numCpu.dump $Temppfad/$Scriptselbst.maxMemoryUsage.dump $Temppfad/$Scriptselbst.sort-hdds.dump $Temppfad/$Scriptselbst.freeSpace.dump $Temppfad/$Scriptselbst.videoRamSizeInKB.dump $Temppfad/$Scriptselbst.createdate.dump $Temppfad/$Scriptselbst.modified.dump|sed 's/\t/ /g'|sed 's/ / /g'|sed 's/ /,/g'|head -n -1 >$Temppfad/$Scriptselbst.merge.dump while read line do echo "select * from vmtab where (vmname,id) in (select '"$line"',max(id) from vmtab group by vmname);"|sqlite3 "$Datenbankfile" >>$Temppfad/$Scriptselbst-1.txt done <$Temppfad/$Scriptselbst.hostName.dump cat /$Temppfad/$Scriptselbst-1.txt|sed "s/|/,/g"|cut -f2-12 -d"," >>$Temppfad/$Scriptselbst.txt diff -u $Temppfad/$Scriptselbst.txt $Temppfad/$Scriptselbst.merge.dump|tail +4|grep ^[-+]|cut -c2- >$Temppfad/$Scriptselbst.diff2.dump if [ ! -e $Temppfad/$Scriptselbst.diff2.dump ] then touch $Temppfad/$Scriptselbst.diff2.dump fi cat $Temppfad/$Scriptselbst.diff2.dump|sed "s/,/,'/1"|sed "s/,/','/2"|sed "s/,/',/3"|sed "s/,/,'/6"|sed "s/,/',/7"|sed "s/,/,'/9"|sed "s/,/','/10"|sed "s/,/','/11"|sed "s/$/'/g"|cut -f2- -d" " >$Temppfad/$Scriptselbst.ready.dump while read line do echo "$line,'$dumptime'" >>$Temppfad/$Scriptselbst.dbready.dump done <$Temppfad/$Scriptselbst.ready.dump #paste $Temppfad/$Scriptselbst.ready.dump $Temppfad/$Scriptselbst.dumpdate.dump|sed "s/\t/,'/g"|sed "s/$/'/g" >>$Temppfad/$Scriptselbst.dbready.dump if [ ! -e $Temppfad/$Scriptselbst.dbready.dump ] then touch $Temppfad/$Scriptselbst.dbready.dump fi while read line do echo "insert into vmtab (vmid,esxi,vmname,powerstate,cpu,ram,hdd,freespace,gpuram,createtime,changetime,dumptime) values ($line);"|sqlite3 "$Datenbankfile" done <$Temppfad/$Scriptselbst.dbready.dump #rm -r $Temppfad