#!/usr/bin/perl #use Data::Dumper; if ($ARGV[0] eq "") { printf "no mail address given to send report to. exit\n"; exit 1; } @servers = qw/conpve29 conpve28 conpve20 conpve17/; print "-- get general info from every host\n"; for $server (@servers) { print "--- server $server\n"; @serverinfo = `ssh -q -l root $server qm list | sed "s/\$/$server/" | grep -v VMID 2> /dev/null`; foreach (@serverinfo) { ($vmid, $vms{$1}{'name'}, $vms{$1}{'status'}, $vms{$1}{'memory'}, $vms{$1}{'bootdisk'}, $vms{$1}{'pid'}, $vms{$1}{'host'} ) = $_ =~ / *([0-9]{3,4}) *([^ ]*) *([a-z]*) *([0-9]*) *([0-9.]*) *([0-9]*) *($server)/gm; } $vmlist=""; foreach $vmid (keys %vms) { $vmlist = $vmlist . "$vmid " if ($vms{$vmid}{'host'} eq $server); } chomp $vmlist; print "---- get more details from vms $vmlist\n"; @more = `ssh -q -l root $server bash /opt/pve-reporting/get_vmid_info.sh $vmlist 2> /dev/null`; foreach (@more) { chomp; ( $vmid, $vms{$1}{'os'}, $vms{$1}{'disksizes'}, $vms{$1}{'diskusages'}, $vms{$1}{'sockets'}, $vms{$1}{'cores'}, $vms{$1}{'description'}, $vms{$1}{'tags'}, $vms{$1}{'cdrom'}, $vms{$1}{'nets'} ) = $_ =~ /([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*).([^|]*)$/gm; @tags=split ";", $vms{$1}{'tags'}; print "tags $vms{$1}{'tags'}\n"; foreach (@tags) { print "tag $_\n"; $tag{$_}{'name'}=$_; } print "----- ID $vmid\n"; } print "\n"; } open HTML, ">output1.html"; printf HTML "\n\n\n"; printf HTML ' '; printf HTML "\n\n"; open OUTPUT, ">output1.csv"; print "-- print vm information to console and in file output1.csv\n"; $hstr = sprintf "VMID|NAME|OS|DISKSIZE(S)|DISKUSAGE(S)|SOCKETS|CORES|MEMORY(MB)|BOOTDISK(GB)|NETS|DESCRIPTION|TAGS|STATUS|HOST|PID|CDROM\n"; printf $hstr; printf OUTPUT $hstr; $str = sprintf "\n\n"; printf HTML $str; foreach $vm (sort keys %vms) { $str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n", $vm, $vms{$vm}{'name'}, $vms{$vm}{'os'}, $vms{$vm}{'disksizes'}, $vms{$vm}{'diskusages'}, $vms{$vm}{'sockets'}, $vms{$vm}{'cores'}, $vms{$vm}{'memory'}, $vms{$vm}{'bootdisk'}, $vms{$vm}{'nets'}, $vms{$vm}{'description'}, $vms{$vm}{'tags'}, $vms{$vm}{'status'}, $vms{$vm}{'host'}, $vms{$vm}{'pid'}, $vms{$vm}{'cdrom'} ); printf $str; # if tag = euregon : extra datei #printf EUREGON $str if ($vms{$vm}{'tags'} =~ /euregon/i); # ausgabe printf OUTPUT $str; $alltags = $vms{$vm}{'tags'}; $alltags =~ s/;/
/g; $allsizes = $vms{$vm}{'disksizes'}; $allsizes =~ s/;/
/g; $allusages = $vms{$vm}{'diskusages'}; $allusages =~ s/;/
/g; $allnets = $vms{$vm}{'nets'}; $allnets =~ s/;/
/g; $str = sprintf ("\n", $vm, $vms{$vm}{'name'}, $vms{$vm}{'os'}, $allsizes, $allusages, $vms{$vm}{'sockets'}, $vms{$vm}{'cores'}, $vms{$vm}{'memory'}, $vms{$vm}{'bootdisk'}, $vms{$vm}{'nets'}, $vms{$vm}{'description'}, $alltags, $vms{$vm}{'status'}, $vms{$vm}{'host'}, $vms{$vm}{'pid'}, $vms{$vm}{'cdrom'} ); printf HTML $str; } close OUTPUT; printf HTML "\n
VMIDNAMEOSDISKSIZE(S)DISKUSAGE(S)SOCKETSCORESMEMORY(MB)BOOTDISK(GB)NETSDESCRIPTIONTAGSSTATUSHOSTPIDCDROM
%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s%s
\n"; close HTML; # schreibe einzelne tagfiles foreach $t (keys %tag) { print "t $t\n"; open OUT, ">output1_$t.csv"; printf OUT $hstr; foreach $vm (sort keys %vms) { print "1 $vms{$vm}{'tags'} 2 $tag{$t}{'name'}\n"; if ( $vms{$vm}{'tags'} =~ /$t/ ) { $str = sprintf ("%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s|%s\n", $vm, $vms{$vm}{'name'}, $vms{$vm}{'os'}, $vms{$vm}{'disksizes'}, $vms{$vm}{'diskusages'}, $vms{$vm}{'sockets'}, $vms{$vm}{'cores'}, $vms{$vm}{'memory'}, $vms{$vm}{'bootdisk'}, $vms{$vm}{'nets'}, $vms{$vm}{'description'}, $vms{$vm}{'tags'}, $vms{$vm}{'status'}, $vms{$vm}{'host'}, $vms{$vm}{'pid'}, $vms{$vm}{'cdrom'} ); print OUT $str; } } close OUT; } print "-- send output1.csv as attachement via email\n"; # mail open MAIL, ">mail1.tmp"; printf MAIL "TO: $ARGV[0]\n"; printf MAIL "FROM: CONET Services Monitoring Reporter