Files
claudio 368d6fafea Issue
Code backup
2026-05-10 16:59:01 +02:00

175 lines
4.3 KiB
Bash

#!/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 <SNMP community> -h <host>"
}
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