mirror of
https://github.com/opinkerfi/nagios-plugins.git
synced 2024-11-22 10:23:46 +01:00
Merging with check_yum from code.google.com
This commit is contained in:
parent
38c56fe3d8
commit
afb015b67d
@ -1,15 +1,36 @@
|
|||||||
#!/usr/bin/env python
|
#!/usr/bin/python
|
||||||
|
# coding=utf-8
|
||||||
|
|
||||||
"""Nagios plugin to test for Yum updates on RedHat/CentOS Linux.
|
#Copyright © 2008-2012, Hari Sekhon <harisekhon@gmail.com>.
|
||||||
|
#Copyright © 2012, Christoph Anton Mitterer <mail@christoph.anton.mitterer.name>.
|
||||||
|
#All rights reserved.
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#This program is free software; you can redistribute it and/or
|
||||||
|
#modify it under the terms of the GNU General Public License
|
||||||
|
#as published by the Free Software Foundation; version 2
|
||||||
|
#of the License.
|
||||||
|
#
|
||||||
|
#This program is distributed in the hope that it will be useful,
|
||||||
|
#but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
#MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
#GNU General Public License for more details.
|
||||||
|
#
|
||||||
|
#You should have received a copy of the GNU General Public License
|
||||||
|
#along with this program; if not, write to the Free Software
|
||||||
|
#Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
|
||||||
|
"""Nagios plugin to check the YUM package management system for package updates.
|
||||||
Can optionally alert on any available updates as well as just
|
Can optionally alert on any available updates as well as just
|
||||||
security related updates"""
|
security related updates"""
|
||||||
|
|
||||||
__author__ = "Hari Sekhon"
|
__author__ = "Hari Sekhon"
|
||||||
__title__ = "Nagios Plugin for Yum updates on RedHat/CentOS systems"
|
__title__ = "Nagios plugin to check the YUM package management system for package updates."
|
||||||
__version__ = "0.7.2"
|
__version__ = "0.7.3"
|
||||||
|
|
||||||
# Changes:
|
# Changes:
|
||||||
# 0.7.2 added support for rhel6-style yum output
|
# 0.7.2 Addes support for rhel6-style output (palli@opensource.is)
|
||||||
|
# 0.7.3 Maintenance taken over by Christoph Anton Mitterer
|
||||||
|
|
||||||
|
|
||||||
# Standard Nagios return codes
|
# Standard Nagios return codes
|
||||||
@ -163,7 +184,7 @@ class YumTester:
|
|||||||
|
|
||||||
def check_returncode(self, returncode, output):
|
def check_returncode(self, returncode, output):
|
||||||
"""Takes the returncode and output (as an array of lines)
|
"""Takes the returncode and output (as an array of lines)
|
||||||
of the yum program execution and tests for failures, exits
|
of the YUM program execution and tests for failures, exits
|
||||||
with an appropriate message if any are found"""
|
with an appropriate message if any are found"""
|
||||||
|
|
||||||
if returncode == 0:
|
if returncode == 0:
|
||||||
@ -174,7 +195,7 @@ class YumTester:
|
|||||||
elif returncode == 200:
|
elif returncode == 200:
|
||||||
if "lock" in output[-2] or "another copy is running" in output[-2]:
|
if "lock" in output[-2] or "another copy is running" in output[-2]:
|
||||||
msg = "Cannot check for updates, " \
|
msg = "Cannot check for updates, " \
|
||||||
+ "another instance of yum is running"
|
+ "another instance of YUM is running"
|
||||||
if self.no_warn_on_lock:
|
if self.no_warn_on_lock:
|
||||||
end(OK, msg)
|
end(OK, msg)
|
||||||
else:
|
else:
|
||||||
@ -185,7 +206,7 @@ class YumTester:
|
|||||||
else:
|
else:
|
||||||
if not 'Loading "security" plugin' in output \
|
if not 'Loading "security" plugin' in output \
|
||||||
or "Command line error: no such option: --security" in output:
|
or "Command line error: no such option: --security" in output:
|
||||||
end(UNKNOWN, "Security plugin for yum is required. Try to " \
|
end(UNKNOWN, "Security plugin for YUM is required. Try to " \
|
||||||
+ "'yum install yum-security' and then re-run " \
|
+ "'yum install yum-security' and then re-run " \
|
||||||
+ "this plugin. Alternatively, to just alert on " \
|
+ "this plugin. Alternatively, to just alert on " \
|
||||||
+ "any update which does not require the security " \
|
+ "any update which does not require the security " \
|
||||||
@ -282,7 +303,7 @@ class YumTester:
|
|||||||
raise ValueError
|
raise ValueError
|
||||||
except ValueError:
|
except ValueError:
|
||||||
end(UNKNOWN, "Error parsing package information, invalid package " \
|
end(UNKNOWN, "Error parsing package information, invalid package " \
|
||||||
+ "number, yum output may have changed. Please make " \
|
+ "number, YUM output may have changed. Please make " \
|
||||||
+ "sure you have upgraded to the latest version of " \
|
+ "sure you have upgraded to the latest version of " \
|
||||||
+ "this plugin. If the problem persists, then please " \
|
+ "this plugin. If the problem persists, then please " \
|
||||||
+ "contact the author for a fix")
|
+ "contact the author for a fix")
|
||||||
@ -293,7 +314,7 @@ class YumTester:
|
|||||||
count = 0
|
count = 0
|
||||||
re_package_format = \
|
re_package_format = \
|
||||||
re.compile("^.+\.(i[3456]86|x86_64|noarch)\s+.+\s+.+$")
|
re.compile("^.+\.(i[3456]86|x86_64|noarch)\s+.+\s+.+$")
|
||||||
# This is to work around a yum truncation issue effectively changing
|
# This is to work around a YUM truncation issue effectively changing
|
||||||
# the package output format. Currently only very long kmod lines
|
# the package output format. Currently only very long kmod lines
|
||||||
# are seen to have caused this so we stick to what we know for safety
|
# are seen to have caused this so we stick to what we know for safety
|
||||||
# and raise an unknown error on anything else for maximum security
|
# and raise an unknown error on anything else for maximum security
|
||||||
@ -349,7 +370,7 @@ class YumTester:
|
|||||||
break
|
break
|
||||||
|
|
||||||
if not summary_line_found:
|
if not summary_line_found:
|
||||||
end(WARNING, "Cannot find summary line in yum output. Please " \
|
end(WARNING, "Cannot find summary line in YUM output. Please " \
|
||||||
+ "make sure you have upgraded to the latest version " \
|
+ "make sure you have upgraded to the latest version " \
|
||||||
+ "of this plugin. If the problem persists, please " \
|
+ "of this plugin. If the problem persists, please " \
|
||||||
+ "contact the author for a fix")
|
+ "contact the author for a fix")
|
||||||
@ -358,7 +379,7 @@ class YumTester:
|
|||||||
number_security_updates = int(number_security_updates)
|
number_security_updates = int(number_security_updates)
|
||||||
number_total_updates = int(number_total_updates)
|
number_total_updates = int(number_total_updates)
|
||||||
except ValueError:
|
except ValueError:
|
||||||
end(WARNING, "Error parsing package information, yum output " \
|
end(WARNING, "Error parsing package information, YUM output " \
|
||||||
+ "may have changed. Please make sure you have " \
|
+ "may have changed. Please make sure you have " \
|
||||||
+ "upgraded to the latest version of this plugin. " \
|
+ "upgraded to the latest version of this plugin. " \
|
||||||
+ "If the problem persists, the please contact the " \
|
+ "If the problem persists, the please contact the " \
|
||||||
@ -464,7 +485,7 @@ def main():
|
|||||||
help="Does not distinguish between security and " \
|
help="Does not distinguish between security and " \
|
||||||
+ "non-security updates, but returns critical for " \
|
+ "non-security updates, but returns critical for " \
|
||||||
+ "any available update. This may be used if the " \
|
+ "any available update. This may be used if the " \
|
||||||
+ "yum security plugin is absent or you want to " \
|
+ "YUM security plugin is absent or you want to " \
|
||||||
+ "maintain every single package at the latest " \
|
+ "maintain every single package at the latest " \
|
||||||
+ "version. You may want to use " \
|
+ "version. You may want to use " \
|
||||||
+ "--warn-on-any-update instead of this option")
|
+ "--warn-on-any-update instead of this option")
|
||||||
@ -486,7 +507,7 @@ def main():
|
|||||||
action="store_true",
|
action="store_true",
|
||||||
dest="no_cache_update",
|
dest="no_cache_update",
|
||||||
help="Run entirely from cache and do not update the " \
|
help="Run entirely from cache and do not update the " \
|
||||||
+ "cache when running yum. Useful if you have " \
|
+ "cache when running YUM. Useful if you have " \
|
||||||
+ "'yum makecache' cronned so that the nagios " \
|
+ "'yum makecache' cronned so that the nagios " \
|
||||||
+ "check itself doesn't have to do it, possibly " \
|
+ "check itself doesn't have to do it, possibly " \
|
||||||
+ "speeding up execution (by 1-2 seconds in tests)")
|
+ "speeding up execution (by 1-2 seconds in tests)")
|
||||||
@ -494,22 +515,22 @@ def main():
|
|||||||
parser.add_option( "--no-warn-on-lock",
|
parser.add_option( "--no-warn-on-lock",
|
||||||
action="store_true",
|
action="store_true",
|
||||||
dest="no_warn_on_lock",
|
dest="no_warn_on_lock",
|
||||||
help="Return OK instead of WARNING when yum is locked " \
|
help="Return OK instead of WARNING when YUM is locked " \
|
||||||
+ "and fails to check for updates due to another " \
|
+ "and fails to check for updates due to another " \
|
||||||
+ "instance running. This is not recommended from " \
|
+ "instance running. This is not recommended from " \
|
||||||
+ "the security standpoint, but may be wanted to " \
|
+ "the security standpoint, but may be wanted to " \
|
||||||
+ "reduce the number of alerts that may " \
|
+ "reduce the number of alerts that may " \
|
||||||
+ "intermittently pop up when someone is running " \
|
+ "intermittently pop up when someone is running " \
|
||||||
+ "yum interactively for package management")
|
+ "YUM interactively for package management")
|
||||||
|
|
||||||
parser.add_option( "--enablerepo",
|
parser.add_option( "--enablerepo",
|
||||||
dest="repository_to_enable",
|
dest="repository_to_enable",
|
||||||
help="Explicitly enables a reposity when calling yum. "
|
help="Explicitly enables a reposity when calling YUM. "
|
||||||
+ "Can take a comma separated list of repositories")
|
+ "Can take a comma separated list of repositories")
|
||||||
|
|
||||||
parser.add_option( "--disablerepo",
|
parser.add_option( "--disablerepo",
|
||||||
dest="repository_to_disable",
|
dest="repository_to_disable",
|
||||||
help="Explicitly disables a repository when calling yum "
|
help="Explicitly disables a repository when calling YUM "
|
||||||
+ "Can take a comma separated list of repositories")
|
+ "Can take a comma separated list of repositories")
|
||||||
|
|
||||||
parser.add_option( "-t",
|
parser.add_option( "-t",
|
||||||
@ -564,3 +585,4 @@ if __name__ == "__main__":
|
|||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
print "Caught Control-C..."
|
print "Caught Control-C..."
|
||||||
sys.exit(CRITICAL)
|
sys.exit(CRITICAL)
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user