96 lines
3.2 KiB
Python
96 lines
3.2 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 TFTP service."""
|
|
import os
|
|
import socket
|
|
import xmlrpclib
|
|
|
|
from compass.actions.health_check import base
|
|
from compass.actions.health_check import utils as health_check_utils
|
|
|
|
|
|
class TftpCheck(base.BaseCheck):
|
|
"""tftp health check class."""
|
|
NAME = "TFTP Check"
|
|
|
|
def run(self):
|
|
"""do health check."""
|
|
method_name = "self.check_" + self.os_installer['name'] + "_tftp()"
|
|
return eval(method_name)
|
|
|
|
def check_cobbler_tftp(self):
|
|
"""Checks if Cobbler manages TFTP service.
|
|
|
|
:note: we assume TFTP service is running at the
|
|
same machine where this health check runs at
|
|
"""
|
|
|
|
try:
|
|
remote = xmlrpclib.Server(
|
|
self.os_installer['name'],
|
|
allow_none=True)
|
|
remote.login(
|
|
*self.os_installer['token'])
|
|
except Exception:
|
|
self._set_status(
|
|
0,
|
|
"[%s]Error: Cannot login to Cobbler with the tokens "
|
|
" provided in the config file" % self.NAME)
|
|
return (self.code, self.messages)
|
|
|
|
cobbler_settings = remote.get_settings()
|
|
if cobbler_settings['manage_tftp'] == 0:
|
|
self.messages.append(
|
|
'[TFTP]Info: tftp service is not managed by Compass')
|
|
return (0, self.messages)
|
|
self.check_tftp_dir()
|
|
print "[Done]"
|
|
self.check_tftp_service()
|
|
print "[Done]"
|
|
if self.code == 1:
|
|
self.messages.append(
|
|
"[%s]Info: tftp service health check has completed. "
|
|
"No problems found, all systems go." % self.NAME)
|
|
|
|
return (self.code, self.messages)
|
|
|
|
def check_tftp_dir(self):
|
|
"""Validates TFTP directories and configurations."""
|
|
print "Checking TFTP directories......",
|
|
if not os.path.exists('/var/lib/tftpboot/'):
|
|
self._set_status(
|
|
0,
|
|
"[%s]Error: No tftp-boot libraries found, "
|
|
"please check if tftp server is properly "
|
|
"installed/managed" % self.NAME)
|
|
|
|
return True
|
|
|
|
def check_tftp_service(self):
|
|
"""Checks if TFTP is running on port 69."""
|
|
print "Checking TFTP services......",
|
|
serv_err_msg = health_check_utils.check_service_running(self.NAME,
|
|
'xinetd')
|
|
if not serv_err_msg == "":
|
|
self._set_status(0, serv_err_msg)
|
|
|
|
if 'tftp' != socket.getservbyport(69):
|
|
self._set_status(
|
|
0,
|
|
"[%s]Error: tftp doesn't seem to be listening "
|
|
"on Port 60." % self.NAME)
|
|
|
|
return True
|