b4ada2e9cc
Change-Id: Icba29fb271b09665dee21ea42aed598901b3cb96
94 lines
3.3 KiB
Python
94 lines
3.3 KiB
Python
# Copyright 2014 Huawei Technologies Co. Ltd
|
|
#
|
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
# you may not use this file except in compliance with the License.
|
|
# You may obtain a copy of the License at
|
|
#
|
|
# http://www.apache.org/licenses/LICENSE-2.0
|
|
#
|
|
# Unless required by applicable law or agreed to in writing, software
|
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
# See the License for the specific language governing permissions and
|
|
# limitations under the License.
|
|
|
|
"""Health Check module for Hardware Discovery."""
|
|
from compass.actions.health_check import base
|
|
from compass.actions.health_check import utils as health_check_utils
|
|
|
|
|
|
class HdsCheck(base.BaseCheck):
|
|
"""hds health check class."""
|
|
NAME = "HDS Check"
|
|
|
|
def run(self):
|
|
"""do health check."""
|
|
if self.dist in ("centos", "redhat", "fedora", "scientific linux"):
|
|
pkg_type = "yum"
|
|
else:
|
|
pkg_type = "apt"
|
|
|
|
try:
|
|
pkg_module = __import__(pkg_type)
|
|
except Exception:
|
|
self.messages.append("[%s]Error: No module named %s, "
|
|
"please install it first."
|
|
% (self.NAME, pkg_module))
|
|
|
|
method_name = 'self.check_' + pkg_type + '_snmp(pkg_module)'
|
|
eval(method_name)
|
|
print "[Done]"
|
|
self.check_snmp_mibs()
|
|
print "[Done]"
|
|
if self.code == 1:
|
|
self.messages.append("[%s]Info: hds health check has complated. "
|
|
"No problems found, all systems go."
|
|
% self.NAME)
|
|
|
|
return (self.code, self.messages)
|
|
|
|
def check_yum_snmp(self, pkg_module):
|
|
"""Check if SNMP yum dependencies are installed
|
|
|
|
:param pkg_module : python yum library
|
|
:type pkg_module : python module
|
|
|
|
"""
|
|
print "Checking SNMP Packages......",
|
|
yum_base = pkg_module.YumBase()
|
|
uninstalled = []
|
|
for package in ['net-snmp-utils', 'net-snmp', 'net-snmp-python']:
|
|
if len(yum_base.rpmdb.searchNevra(name=package)) == 0:
|
|
self.messages.append("[%s]Error: %s package is required "
|
|
"for HDS" % (self.NAME, package))
|
|
uninstalled.append(package)
|
|
|
|
if len(uninstalled) != 0:
|
|
self._set_status(0, "[%s]Info: Uninstalled packages: %s"
|
|
% (self.NAME,
|
|
', '.join(item for item in uninstalled)))
|
|
|
|
return True
|
|
|
|
def check_apt_snmp(self, pkg_module):
|
|
"""do apt health check."""
|
|
## TODO(xicheng): add ubuntu package check here
|
|
return None
|
|
|
|
def check_snmp_mibs(self):
|
|
"""Checks if SNMP MIB files are properly placed."""
|
|
|
|
print "Checking SNMP MIBs......",
|
|
conf_err_msg = health_check_utils.check_path(self.NAME,
|
|
'/etc/snmp/snmp.conf')
|
|
if not conf_err_msg == "":
|
|
self._set_status(0, conf_err_msg)
|
|
|
|
mibs_err_msg = health_check_utils.check_path(
|
|
self.NAME,
|
|
'/usr/local/share/snmp/mibs')
|
|
if not mibs_err_msg == "":
|
|
self._set_status(0, mibs_err_msg)
|
|
|
|
return True
|