VMware image mentések riportja

in_risk_vm_machines.env
TSMUSER=user
TSMPASS=password
TSMSERVER=tsm
EMAIL_FROM="TSM riporter"
TSMNODE=VCENTER01
IN_RISK_DAYS=31
OUTPUT_FILE="in_risk_vm_machines.out"
EXCEPTION_FILE="in_risk_vm_machines.exceptions"
VCENTERS='https://vcenter01.fkf.hu/sdk'
in_risk_vmware_machines.sh
#!/bin/bash
cd $(dirname $(readlink -f $0))
MAILTO=$1
. in_risk_vm_machines.env
>$OUTPUT_FILE
. govc.config
 
if [[ -z $1 ]]; then
        echo "Hiba: nem adtal meg cimzettet! Helyes hasznalat:"
        echo "$0 email@cimem.hu[,email2@cimem.hu]"
        echo
        exit 1
fi
 
#Kivetel lista felolvasasa
[[ ! -e $EXCEPTION_FILE ]] && touch $EXCEPTION_FILE
while read SOR; do
        EXCEPTIONS="$(echo $EXCEPTIONS | sed 's/^\s*//') $(echo $SOR | awk '{print $1}')"
done <<< "`grep -v '^#' $EXCEPTION_FILE`"
 
datediff() {
    d1=$(date -d "$1" +%s)
    d2=$(date -d "$2" +%s)
    echo $(( (d1 - d2) / 86400 ))
}
 
for VCENTER in $VCENTERS; do
    echo "<caption><b><u><i>${VCENTER#https://}</i></u></b></caption>" >> $OUTPUT_FILE
    printf "%-30s %-60s %-40s %-5s %-15s\n" "VM_NAME","RESOURCE_POOL","UUID","PW_ST","LAST_BACKUP" >>$OUTPUT_FILE
    export GOVC_URL="$VCENTER"
        ./govc find . -type p | sort | while read RESPOOL; do
          ./govc find "$RESPOOL" -type m | sed 's/^.*\///g' | sort | while read VM_NAME; do
        POWER_STATE=$(./govc vm.info "$VM_NAME" | awk -F':' '/Power state/{print $2}' | sed 's/ *powered//')
        UUID=$(./govc vm.info "$VM_NAME" | awk -F':' '/UUID/{print $2}' | sed 's/ *//')
        LAST_BACKUP=$(dsmadmc -id=$TSMUSER -pa=$TSMPASS -se=$TSMSERVER -dataonly=y "select BACKUP_DATE from backups where node_name='$TSMNODE' and hl_name like '\\$VM_NAME\\%' order by BACKUP_DATE desc FETCH FIRST 1 ROWS ONLY" | grep -v 'AN[RS]' | sed 's/^ //' | sed 's/\.000000$//')
        [[ -z $LAST_BACKUP ]] && LAST_BACKUP='NINCS MENTVE!'
        IN_RISK=""
        [[ $LAST_BACKUP =~ ^[2][0] && $(datediff "$(date '+%m/%d/%Y %H:%M:%S' )" "$LAST_BACKUP") -gt $IN_RISK_DAYS ]] && { LAST_BACKUP="$LAST_BACKUP ($IN_RISK_DAYS napnál régebbi!)"; IN_RISK='!!!'; }
        [[ ! "${EXCEPTIONS^^}" = *"${UUID^^}"* && -n $IN_RISK || $LAST_BACKUP =~ ^[^2][^0] ]] && printf "%-30s %-60s %-40s %-5s %-15s\n" "$VM_NAME","$RESPOOL","$UUID","($POWER_STATE)","$LAST_BACKUP" | sed 's/ *$//' >> $OUTPUT_FILE
          done
        done
        echo -e '<br>\n' >> $OUTPUT_FILE
done
echo '<html><head><style>
table {
    border-collapse: collapse;
    width: 100%;
}
 
th, td {
    text-align: left;
    padding: 4px;
}
</style></head><body>' > $OUTPUT_FILE.html;
 
for VCENTER in $VCENTERS; do
VCENTER=$(echo ${VCENTER#https://} | sed 's/\/.*$//')
 
echo '<h2 style="text-align: center">Régen mentett VMware hosztok</h2>' >> $OUTPUT_FILE.html
ROWNUM=1
echo '<table>' >> $OUTPUT_FILE.html
while read INPUT ; do
  [[ "$(echo $INPUT | grep -c '(Off)')" -eq 1 ]] && continue;
#                if [[ $(($ROWNUM % 2)) -eq 0 ]]; then ROWNUM=$(($ROWNUM+1)); fi
  if [[ $(echo $INPUT | grep -c '<caption>') -gt 0 ]]; then
        echo "$INPUT" >> $OUTPUT_FILE.html;
  elif [[ $(echo $INPUT | grep -c 'NINCS MENTVE') -gt 0 ]]; then
        echo "<tr style=\"background-color: #ffa8a8\"><td>${INPUT//,/</td><td>}</td></tr>" >> $OUTPUT_FILE.html
  else
        if [[ $(echo $INPUT | grep -c 'VM_NAME') -gt 0 ]]; then
          [[ $(($ROWNUM % 2)) -eq 0 ]] && echo "<tr style=\"background-color: #f2f2f2; font-weight: bold;\"><th>${INPUT//,/</th><th>}</th></th>" >> $OUTPUT_FILE.html || echo "<tr><th>${INPUT//,/</th><th>}</th></th>" >> $OUTPUT_FILE.html
        else
          [[ $(($ROWNUM % 2)) -eq 0 ]] && echo "<tr style=\"background-color: #f2f2f2\"><td>${INPUT//,/</td><td>}</td></tr>" >> $OUTPUT_FILE.html || echo "<tr><td>${INPUT//,/</td><td>}</td></tr>" >> $OUTPUT_FILE.html
        fi
  fi
  ROWNUM=$(($ROWNUM+1))
done <<< "`awk 'BEGIN{IGNORECASE=1;RS=ORS="\n\n";FS=OFS="\n"}/'${VCENTER}'/' $OUTPUT_FILE`"
echo "</table><br>" >> $OUTPUT_FILE.html
 
echo '<h2 style="text-align: center">Kikapcsolt VMware hosztok</h2>' >> $OUTPUT_FILE.html
ROWNUM=1
echo '<table>' >> $OUTPUT_FILE.html
while read INPUT ; do
  [[ "$(echo $INPUT | grep -c '(Off)')" -eq 0 ]] && continue;
  if [[ $(echo $INPUT | grep -c '<caption>') -gt 0 ]]; then
        echo "$INPUT" >> $OUTPUT_FILE.html;
  elif [[ $(echo $INPUT | grep -c 'NINCS MENTVE') -gt 0 ]]; then
        echo "<tr style=\"background-color: #ffa8a8\"><td>${INPUT//,/</td><td>}</td></tr>" >> $OUTPUT_FILE.html
  else
        if [[ $(echo $INPUT | grep -c 'VM_NAME') -gt 0 ]]; then
          [[ $(($ROWNUM % 2)) -eq 0 ]] && echo "<tr style=\"background-color: #f2f2f2; font-weight: bold;\"><th>${INPUT//,/</th><th>}</th></th>" >> $OUTPUT_FILE.html || echo "<tr><th>${INPUT//,/</th><th>}</th></th>" >> $OUTPUT_FILE.html
        else
          [[ $(($ROWNUM % 2)) -eq 0 ]] && echo "<tr style=\"background-color: #f2f2f2\"><td>${INPUT//,/</td><td>}</td></tr>" >> $OUTPUT_FILE.html || echo "<tr><td>${INPUT//,/</td><td>}</td></tr>" >> $OUTPUT_FILE.html
        fi
  fi
  ROWNUM=$(($ROWNUM+1))
done <<< "`awk 'BEGIN{IGNORECASE=1;RS=ORS="\n\n";FS=OFS="\n"}/'${VCENTER}'/' $OUTPUT_FILE`"
echo "</table>" >> $OUTPUT_FILE.html
 
done
 
echo "<br><b>Kivetelek:</b> $EXCEPTIONS<br>" >> $OUTPUT_FILE.html
echo "</body></html>" >> $OUTPUT_FILE.html
echo -e "To: $MAILTO\nMIME-Version: 1.0\nContent-Type: text/html\nContent-Disposition: inline\nSubject: TSM VM kockazat riport\n$(cat $OUTPUT_FILE.html)" > $OUTPUT_FILE.html
cat $OUTPUT_FILE.html | sendmail -B 8BITMIME -t -F $EMAIL_FROM