1
0
mirror of https://github.com/Napsty/check_esxi_hardware.git synced 2026-02-06 15:15:20 +01:00

18 Commits

Author SHA1 Message Date
Claudio Kuenzler
89f9e505c3 Added support for pywbem 0.9.x (and upcoming releases) 2016-10-13 15:59:19 +02:00
Claudio Kuenzler
82a4156e34 Bump version, edit changelog 2016-05-31 07:28:55 +02:00
Claudio Kuenzler
1f7c3b5927 Merge pull request #17 from Napsty/ports
Add CIM port option, adapt help
2016-05-31 07:27:03 +02:00
Claudio Kuenzler
ced39ad416 Add CIM port option, adapt help 2016-04-14 21:41:31 +02:00
Claudio Kuenzler
ec7db6479d Merge pull request #16 from Napsty/pywbem-versions
Distinguish between pywbem 0.7 and 0.8
2016-04-11 15:21:16 +02:00
Claudio Kuenzler
496ae6cf31 Distinguish between pywbem 0.7 and 0.8 2016-04-11 15:19:37 +02:00
Claudio Kuenzler
d8a95f864f Merge pull request #14 from stefaro/patch-1
Merge pull request from Stefan Roos. Declare hosturl variable. Remove sensor_value variable (it's not used).
2016-04-07 13:51:36 +02:00
Stefan Roos
156016869a Update check_esxi_hardware.py
Removed some modifications.
2016-04-07 10:11:40 +03:00
stefaro
03f8ca8335 Minor changes and cleanup
Removed unused sensor_value variable and string import.
Removed no SSL tryout on pywbem v 0.0.7 (default version doesn't have no_verification).
Added global hosturl variable declaration after imports.
Added "Front Panel Board 1 FP LCD Cable 0: Connected" to ignore list (LENOVO System x3550 M5).
2015-11-11 09:57:05 +02:00
Claudio Kuenzler
3727e67609 Exit Unknown instead of Critical for non-essential errors 2015-07-10 09:56:25 +02:00
Claudio Kuenzler
8c147a204e Merge pull request #12 from giner/patch-1
check_esxi_hardware.py: unknown instead of crit
2015-07-10 09:45:02 +02:00
Napsty
0036c441de Change version number for public release 2015-06-26 14:50:10 +02:00
Napsty
c806fb4d90 Change version number for public release 2015-06-26 14:30:42 +02:00
Napsty
6c8a4bfd63 Extended pywbem version compatibility 2015-06-10 12:47:12 +02:00
Stanislav German-Evtushenko
fb038edcda check_esxi_hardware.py: revert last change
1. This change was wrong and inappropriate.
2. The issue I tried to fix was caused by the bug in python library pywbem: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=780264
2015-06-01 19:52:59 +03:00
Napsty
3f97ca6485 Added support for patched pywbem 0.7.0 and new version 0.8.0, handle SSL error exception 2015-05-12 08:45:32 +02:00
Stanislav German-Evtushenko
b3c0ca4cdd check_esxi_hardware.py: force exit on timeout
Replace sys.exit by os._exit to be sure that the script stops on timeout immediately and does not produce false-positive results (usually it comes to WARNING).
2015-04-07 15:56:00 +03:00
Stanislav German-Evtushenko
e3a43a5dd0 check_esxi_hardware.py: unknown instead of crit
Set status to unknown instead of critical for timeouts, authentication errors and such things as those issues are critical for the check itself but not for the service.
2015-03-16 15:16:47 +03:00

View File

@@ -24,7 +24,7 @@
# Copyright (c) 2008 David Ligeret # Copyright (c) 2008 David Ligeret
# Copyright (c) 2009 Joshua Daniel Franklin # Copyright (c) 2009 Joshua Daniel Franklin
# Copyright (c) 2010 Branden Schneider # Copyright (c) 2010 Branden Schneider
# Copyright (c) 2010-2015 Claudio Kuenzler # Copyright (c) 2010-2016 Claudio Kuenzler
# Copyright (c) 2010 Samir Ibradzic # Copyright (c) 2010 Samir Ibradzic
# Copyright (c) 2010 Aaron Rogers # Copyright (c) 2010 Aaron Rogers
# Copyright (c) 2011 Ludovic Hutin # Copyright (c) 2011 Ludovic Hutin
@@ -36,6 +36,8 @@
# Copyright (c) 2012 Craig Hart # Copyright (c) 2012 Craig Hart
# Copyright (c) 2013 Carl R. Friend # Copyright (c) 2013 Carl R. Friend
# Copyright (c) 2015 Andreas Gottwald # Copyright (c) 2015 Andreas Gottwald
# Copyright (c) 2015 Stanislav German-Evtushenko
# Copyright (c) 2015 Stefan Roos
# #
# The VMware 4.1 CIM API is documented here: # The VMware 4.1 CIM API is documented here:
# http://www.vmware.com/support/developer/cim-sdk/4.1/smash/cim_smash_410_prog.pdf # http://www.vmware.com/support/developer/cim-sdk/4.1/smash/cim_smash_410_prog.pdf
@@ -216,17 +218,43 @@
#@ Author : Andreas Gottwald #@ Author : Andreas Gottwald
#@ Reason : Fix NoneType element bug #@ Reason : Fix NoneType element bug
#@--------------------------------------------------- #@---------------------------------------------------
#@ Date : 20150626
#@ Author : Claudio Kuenzler (www.claudiokuenzler.com)
#@ Reason : Added support for patched pywbem 0.7.0 and new version 0.8.0, handle SSL error exception
#@---------------------------------------------------
#@ Date : 20150710
#@ Author : Stanislav German-Evtushenko
#@ Reason : Exit Unknown instead of Critical for timeouts and auth errors
#@---------------------------------------------------
#@ Date : 20151111
#@ Author : Stefan Roos
#@ Reason : Removed unused sensor_value variable and string import.
#@ Reason : Added global hosturl variable declaration after imports.
#@---------------------------------------------------
#@ Date : 20160411
#@ Author : Claudio Kuenzler (www.claudiokuenzler.com)
#@ Reason : Distinguish between pywbem 0.7 and 0.8 (which is now released)
#@---------------------------------------------------
#@ Date : 20160531
#@ Author : Claudio Kuenzler (www.claudiokuenzler.com)
#@ Reason : Add parameter for variable CIM port (useful when behind NAT)
#@---------------------------------------------------
#@ Date : 20161013
#@ Author : Claudio Kuenzler (www.claudiokuenzler.com)
#@ Reason : Added support for pywbem 0.9.x (and upcoming releases)
#@---------------------------------------------------
import sys import sys
import time import time
import pywbem import pywbem
import re import re
import string import pkg_resources
from optparse import OptionParser,OptionGroup from optparse import OptionParser,OptionGroup
version = '20150119' version = '20161013'
NS = 'root/cimv2' NS = 'root/cimv2'
hosturl = ''
# define classes to check 'OperationStatus' instance # define classes to check 'OperationStatus' instance
ClassesToCheck = [ ClassesToCheck = [
@@ -287,6 +315,9 @@ perf_Prefix = {
# host name # host name
hostname='' hostname=''
# cim port
cimport=''
# user # user
user='' user=''
@@ -441,14 +472,11 @@ def verboseoutput(message) :
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
def getopts() : def getopts() :
global hosturl,user,password,vendor,verbose,perfdata,urlise_country,timeout,ignore_list,get_power,get_volts,get_current,get_temp,get_fan global hosturl,cimport,user,password,vendor,verbose,perfdata,urlise_country,timeout,ignore_list,get_power,get_volts,get_current,get_temp,get_fan
usage = "usage: %prog https://hostname user password system [verbose]\n" \ usage = "usage: %prog -H hostname -U username -P password [-C port -V system -v -p -I XX]\n" \
"example: %prog https://my-shiny-new-vmware-server root fakepassword dell\n\n" \ "example: %prog -H my-shiny-new-vmware-server -U root -P fakepassword -C 5989 -V auto -I uk\n\n" \
"or, using new style options:\n\n" \
"usage: %prog -H hostname -U username -P password [-V system -v -p -I XX]\n" \
"example: %prog -H my-shiny-new-vmware-server -U root -P fakepassword -V auto -I uk\n\n" \
"or, verbosely:\n\n" \ "or, verbosely:\n\n" \
"usage: %prog --host=hostname --user=username --pass=password [--vendor=system --verbose --perfdata --html=XX]\n" "usage: %prog --host=hostname --user=username --pass=password [--cimport=port --vendor=system --verbose --perfdata --html=XX]\n"
parser = OptionParser(usage=usage, version="%prog "+version) parser = OptionParser(usage=usage, version="%prog "+version)
group1 = OptionGroup(parser, 'Mandatory parameters') group1 = OptionGroup(parser, 'Mandatory parameters')
@@ -459,6 +487,7 @@ def getopts() :
group1.add_option("-P", "--pass", dest="password", \ group1.add_option("-P", "--pass", dest="password", \
help="password, if password matches file:<path>, first line of given file will be used as password", metavar="PASS") help="password, if password matches file:<path>, first line of given file will be used as password", metavar="PASS")
group2.add_option("-C", "--cimport", dest="cimport", help="CIM port (default 5989)", metavar="CIMPORT")
group2.add_option("-V", "--vendor", dest="vendor", help="Vendor code: auto, dell, hp, ibm, intel, or unknown (default)", \ group2.add_option("-V", "--vendor", dest="vendor", help="Vendor code: auto, dell, hp, ibm, intel, or unknown (default)", \
metavar="VENDOR", type='choice', choices=['auto','dell','hp','ibm','intel','unknown'],default="unknown") metavar="VENDOR", type='choice', choices=['auto','dell','hp','ibm','intel','unknown'],default="unknown")
group2.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, \ group2.add_option("-v", "--verbose", action="store_true", dest="verbose", default=False, \
@@ -526,6 +555,7 @@ def getopts() :
user=options.user user=options.user
password=options.password password=options.password
cimport=options.cimport
vendor=options.vendor.lower() vendor=options.vendor.lower()
verbose=options.verbose verbose=options.verbose
perfdata=options.perfdata perfdata=options.perfdata
@@ -565,12 +595,32 @@ if os_platform != "win32":
on_windows = False on_windows = False
import signal import signal
def handler(signum, frame): def handler(signum, frame):
print 'CRITICAL: Execution time too long!' print 'UNKNOWN: Execution time too long!'
sys.exit(ExitCritical) sys.exit(ExitUnknown)
if cimport:
verboseoutput("Using manually defined CIM port "+cimport)
hosturl += ':'+cimport
# connection to host # connection to host
verboseoutput("Connection to "+hosturl) verboseoutput("Connection to "+hosturl)
wbemclient = pywbem.WBEMConnection(hosturl, (user,password), NS) # pywbem 0.7.0 handling is special, some patched 0.7.0 installations work differently
pywbemversion = pkg_resources.get_distribution("pywbem").version
verboseoutput("Found pywbem version "+pywbemversion)
if '0.7.' in pywbemversion:
try:
conntest = pywbem.WBEMConnection(hosturl, (user,password))
c = conntest.EnumerateInstances('CIM_Card')
except:
#raise
verboseoutput("Connection error, disable SSL certification verification (probably patched pywbem)")
wbemclient = pywbem.WBEMConnection(hosturl, (user,password), no_verification=True)
else:
verboseoutput("Connection worked")
wbemclient = pywbem.WBEMConnection(hosturl, (user,password))
# pywbem 0.8.0 and later
else:
wbemclient = pywbem.WBEMConnection(hosturl, (user,password), NS, no_verification=True)
# Add a timeout for the script. When using with Nagios, the Nagios timeout cannot be < than plugin timeout. # Add a timeout for the script. When using with Nagios, the Nagios timeout cannot be < than plugin timeout.
if on_windows == False and timeout > 0: if on_windows == False and timeout > 0:
@@ -619,19 +669,18 @@ for classe in ClassesToCheck :
instance_list = wbemclient.EnumerateInstances(classe) instance_list = wbemclient.EnumerateInstances(classe)
except pywbem.cim_operations.CIMError,args: except pywbem.cim_operations.CIMError,args:
if ( args[1].find('Socket error') >= 0 ): if ( args[1].find('Socket error') >= 0 ):
print "CRITICAL: %s" %args print "UNKNOWN: %s" %args
sys.exit (ExitCritical) sys.exit (ExitUnknown)
else: else:
verboseoutput("Unknown CIM Error: %s" % args) verboseoutput("Unknown CIM Error: %s" % args)
except pywbem.cim_http.AuthError,arg: except pywbem.cim_http.AuthError,arg:
verboseoutput("Global exit set to UNKNOWN") verboseoutput("Global exit set to UNKNOWN")
GlobalStatus = ExitCritical GlobalStatus = ExitUnknown
print "UNKNOWN: Authentication Error" print "UNKNOWN: Authentication Error"
sys.exit (GlobalStatus) sys.exit (GlobalStatus)
else: else:
# GlobalStatus = ExitOK #ARR # GlobalStatus = ExitOK #ARR
for instance in instance_list : for instance in instance_list :
sensor_value = ""
elementName = instance['ElementName'] elementName = instance['ElementName']
if elementName is None : if elementName is None :
elementName = 'Unknown' elementName = 'Unknown'