#!/bin/bash # - VAR # - Bash info APPNAME=$(basename $0) NAME="Check ESXi vCenter" AUTHOR="Kalarumeth" VERSION="v0.1" URL="https://github.com/Kalarumeth/ESXi-Monitoring" # - Default settings for connection COMMUNITY="public" HOST_NAME="localhost" SNMPVERSION="2c" # - State Variables STATE_OK=0 STATE_WARN=1 STATE_CRIT=2 STATE_UNK=3 STATE=$STATE_OK # - OID ESXi.OIDS() { OID_osName=".1.3.6.1.2.1.47.1.2.1.1.2.1" OID_fwRev=".1.3.6.1.2.1.47.1.1.1.1.9.1" OID_serviceTag=".1.3.6.1.2.1.47.1.1.1.1.11.1" OID_sysManufacturer=".1.3.6.1.2.1.47.1.1.1.1.12.1" OID_sysModel=".1.3.6.1.2.1.47.1.1.1.1.13.1" OID_prodName=".1.3.6.1.4.1.6876.1.1.0" OID_prodVersion=".1.3.6.1.4.1.6876.1.2.0" OID_prodBuild=".1.3.6.1.4.1.6876.1.4.0" OID_prodUpdate=".1.3.6.1.4.1.6876.1.5.0" OID_prodPatch=".1.3.6.1.4.1.6876.1.6.0" } # - MAIN CODE Source.HostAlive() { for server in $HOST_NAME; do ping -c1 -W1 -q $server &>/dev/null if [[ $? != 0 ]] ; then printf "%s\n" "$server is unreachable" exit $STATE_UNK fi done } Source.SNMP() { snmpwalk -v $SNMPVERSION -r 1 -t 10 -Oe -c $COMMUNITY $HOST_NAME $1 } Source.vSpheredb.Host() { icingacli vspheredb check host --name $HOST_NAME } Source.vSpheredb.Vm() { icingacli vspheredb check vm --name $VMNAME } # - ESXi vCenter Health Check ESXi.Main() { Source.HostAlive case $1 in info) ESXi.Info exit $STATE ;; host) Source.vSpheredb.Host exit $? ;; vm) Source.vSpheredb.Vm exit $? ;; *) echo "Unknown check!" Help.Function exit $STATE_UNK ;; esac } ESXi.GetData() { ESXi.OIDS case $1 in info) osName=$(Source.SNMP $OID_osName | cut -d '"' -f 2) fwRev=$(Source.SNMP $OID_fwRev | cut -d '"' -f 2) serviceTag=$(Source.SNMP $OID_serviceTag | cut -d '"' -f 2) sysManufacturer=$(Source.SNMP $OID_sysManufacturer | cut -d '"' -f 2) sysModel=$(Source.SNMP $OID_sysModel | cut -d '"' -f 2) prodName=$(Source.SNMP $OID_prodName | cut -d '"' -f 2) prodVersion=$(Source.SNMP $OID_prodVersion | cut -d '"' -f 2) prodBuild=$(Source.SNMP $OID_prodBuild | cut -d '"' -f 2) prodUpdate=$(Source.SNMP $OID_prodUpdate | cut -d '"' -f 2) prodPatch=$(Source.SNMP $OID_prodPatch | cut -d '"' -f 2) ;; esac } ESXi.Info() { ESXi.GetData info printf "%s\n" "$osName Rev. $fwRev" "$sysManufacturer Model: $sysModel Service Tag: $serviceTag" "$prodName $prodVersion Build: $prodBuild Update: $prodUpdate Patch: $prodPatch" } # - Help Help.Main() { echo "Check ESXi Status" echo '' Help.Usage echo '' Help.Option echo '' Help.Info echo '' exit $STATE_UNK } Help.Usage() { printf "%s\n" "Method to compose the execution string" printf "%s\n" "./$APPNAME -c -h " } Help.Option() { printf "%s\n" "OPTIONS:" printf "%s\t%s\t%s\n\t\t\t%s\n" "-c" "--community" "SNMP v2 community string with Read access." " Default is $COMMUNITY." printf "%s\t%s\t\t%s\n\t\t\t%s\n" "-h" "--host" "Host name or IP address to check." " Default is $HOST_NAME." printf "%s\t%s\t\t%s\n" "-t" "--type" "Argument for check function" printf "%s\t%s\t\t%s\n" "-H" "--help" "Show script help" printf "%s\t%s\t%s\n" "-V" "--version" "Show script version" } Help.Function() { printf "\n%s\n\n" "ESXi vCenter Check Function" printf "%s\t%s\n\n" "Check" "Description" printf "%s\t%s\n" "info" "System Information" } Help.Info() { printf "%s\t%s\t%s\n" "INFO:" "$NAME" "$VERSION" "" "$AUTHOR" "$URL" } # - COMMAND LINE ENCODER while test -n "$1"; do case "$1" in --host | -h) HOST_NAME=$2 shift ;; --comunity | -c) COMMUNITY=$2 shift ;; --type | -t) ESXi.Main $2 shift ;; --VM | -vm) VMNAME=$2 shift ;; --help | -H) Help.Main ;; --version | -V) Help.Info exit $STATE ;; *) echo "Unknown argument: $1" print_help exit $STATE_UNK ;; esac shift done ESXi.Main