#!/bin/bash

# Aufgabe: Skript prueft ob mindestens 2 Hosts in jeder AZ mehr als 65 GB Free RAM haben
# Datum: 13.03.2019
# Issue: OS-572
# Author: Marc Vorwerk <marc.vorwerk@noris.de>

# Exit Status Codes
OK=0
WARNING=1
CRITICAL=2
UNKNOWN=3

# Vorhandene AZs
AZ_A="a.openstack.noris.de"
AZ_B="b.openstack.noris.de"

# Vordefinierte Variable zum Rechnen der Anzahl
Anzahl_A=0
Anzahl_B=0

# Config Parameter
MIN_HOST=2
MIN_RAM=65000

# Ich brauche bc - testen ob bc installiert ist
if ! command -v bc >/dev/null; then
    echo "Du hast bc nicht installiert - apt-get install bc"
    exit $UNKNOWN
fi

# Schleife um alle HVs zu identifizieren und den freien RAM zu sehen
IFS=$'\n'
HV=$(openstack hypervisor list --long -c 'Hypervisor Hostname' -c 'Memory MB Used' -c 'Memory MB' -f value)
for LINE in $HV
do
    HOST=$( echo $LINE | awk '{ print $1 }' )
    USED_MB=$( echo $LINE | awk '{ print $2 }' )
    TOTAL_MB=$( echo $LINE | awk '{ print $3 }' )
    FREE_MB=$( echo "$TOTAL_MB - $USED_MB" | bc )

    echo "$HOST hat $FREE_MB"

    if [ "${FREE_MB}" -gt "$MIN_RAM" ]
    then
        echo "$HOST hat mehr als 65 GB free RAM: $FREE_MB"

        if echo "$HOST" | grep -q "$AZ_A"
        then
            Anzahl_A=$((Anzahl_A + 1))
            echo $Anzahl_A
        fi

        if echo "$HOST" | grep -q "$AZ_B"
        then
            Anzahl_B=$((Anzahl_B + 1))
        fi
    fi
done

# Ermittle ob genug Hosts die Anforderung erfuellen
echo "foo $Anzahl_A"
if [ "$Anzahl_A" -lt "$MIN_HOST" ] || [ "$Anzahl_B" -lt "$MIN_HOST" ]
then
    echo "Es sind nicht genug HVs mit 64GB free RAM da:"
    echo "Auf AZ-A sind es $Anzahl_A und auf AZ-B $Anzahl_B"
    exit $CRITICAL
fi

exit $OK
