Files
openGauss-OM/script/gs_checkos
coolany eae422baf3 适配CM组件
Signed-off-by: coolany <kyosang@163.com>

support cgroup

追加合入
2022-03-05 18:51:52 +08:00

1574 lines
59 KiB
Python

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#############################################################################
# Copyright (c) 2020 Huawei Technologies Co.,Ltd.
#
# openGauss is licensed under Mulan PSL v2.
# You can use this software according to the terms
# and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
#
# http://license.coscl.org.cn/MulanPSL2
#
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS,
# WITHOUT WARRANTIES OF ANY KIND,
# EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
# MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
# See the Mulan PSL v2 for more details.
# ----------------------------------------------------------------------------
# Description : gs_checkos is a utility to check and set cluster OS information.
#############################################################################
import os
import sys
import time
import subprocess
from datetime import datetime, timedelta
sys.path.append(sys.path[0] + '/../lib')
from gspylib.threads.SshTool import SshTool
from gspylib.common.GaussLog import GaussLog
from gspylib.common.Common import DefaultValue
from gspylib.common.OMCommand import OMCommand
from gspylib.common.DbClusterInfo import dbClusterInfo
from gspylib.common.ErrorCode import ErrorCode
from gspylib.common.ParameterParsecheck import Parameter
from base_utils.os.file_util import FileUtil
from base_utils.os.net_util import NetUtil
from domain_utils.domain_common.cluster_constants import ClusterConstants
from base_utils.common.constantsbase import ConstantsBase
#############################################################################
# Global variables
# gs_checkos_version: the gs_checkos verion number
# g_opts: globle option
# g_logger: globle logger
# g_sshTool: globle ssh interface
# g_OSCheckOpts: options about all checking and setting items
# DEFAULT_INTERVAL: default space number
# CHECK_ITEMNUMLIST: checking item list
# SET_ITEMNUMLIST: setting item list
# LOG_DIR: the log directory about gs_checkos
#############################################################################
g_opts = None
g_logger = None
g_sshTool = None
host = None
g_clusterInfo = None
g_OSCheckOpts = {
'A1': ['Checking items', '[ OS version status ]', 'Normal', 'OK', 'OK'],
'A2': ['Checking items', '[ Kernel version status ]', 'Normal', 'OK',
'OK'],
'A3': ['Checking items', '[ Unicode status ]', 'Normal', 'OK', 'OK'],
'A4': ['Checking items', '[ Time zone status ]', 'Normal', 'OK', 'OK'],
'A5': ['Checking items', '[ Swap memory status ]', 'Normal', 'OK', 'OK'],
'A6': ['Checking items', '[ System control parameters status ]', 'Normal',
'OK', 'OK'],
'A7': ['Checking items', '[ File system configuration status ]', 'Normal',
'OK', 'OK'],
'A8': ['Checking items', '[ Disk configuration status ]', 'Normal', 'OK',
'OK'],
'A9': ['Checking items', '[ Pre-read block size status ]', 'Normal', 'OK',
'OK'],
'A10': ['Checking items', '[ IO scheduler status ]', 'Normal', 'OK',
'OK'],
'A11': ['Checking items', '[ Network card configuration status ]',
'Normal', 'OK', 'OK'],
'A12': ['Checking items', '[ Time consistency status ]', 'Normal', 'OK',
'OK'],
'A13': ['Checking items', '[ Firewall service status ]', 'Normal', 'OK',
'OK'],
'A14': ['Checking items', '[ THP service status ]', 'Normal', 'OK', 'OK'],
'B1': ['Setting items', '[ Set system control parameters ]', 'Normal',
'OK', 'OK'],
'B2': ['Setting items', '[ Set file system configuration value ]',
'Normal', 'OK', 'OK'],
'B3': ['Setting items', '[ Set pre-read block size value ]', 'Normal',
'OK', 'OK'],
'B4': ['Setting items', '[ Set IO scheduler value ]', 'Normal', 'OK',
'OK'],
'B5': ['Setting items', '[ Set network card configuration value ]',
'Normal', 'OK', 'OK'],
'B6': ['Setting items', '[ Set THP service ]', 'Normal', 'OK', 'OK'],
'B7': ['Setting items', '[ Set RemoveIPC value ]', 'Normal', 'OK', 'OK'],
'B8': ['Setting items', '[ Set Session Process ]', 'Normal', 'OK', 'OK']}
DEFAULT_INTERVAL = 60
CHECK_ITEMNUMLIST = ['A1', 'A2', 'A3', 'A4', 'A5', 'A6', 'A7', 'A8', 'A9',
'A10', 'A11', 'A12', 'A13', 'A14']
SET_ITEMNUMLIST = ['B1', 'B2', 'B3', 'B4', 'B5', 'B6', 'B7', 'B8']
LOG_DIR = "/tmp/gs_checkos"
Local_CheckOs = ""
Local_Check = ""
#######################################################
# action option strings
ACTION_CHECK_OS_VERSION = "Check_OS_Version"
ACTION_CHECK_KERNEL_VERSION = "Check_Kernel_Version"
ACTION_CHECK_UNICODE = "Check_Unicode"
ACTION_CHECK_TIMEZONE = "Check_TimeZone"
ACTION_CHECK_SYSCTL_PARAMETER = "Check_SysCtl_Parameter"
ACTION_CHECK_DISK_CONFIGURE = "Check_Disk_Configure"
ACTION_CHECK_BLOCKDEV_CONFIGURE = "Check_BlockDev_Configure"
ACTION_CHECK_LOGICAL_BLOCK = "Check_Logical_Block"
ACTION_CHECK_IO_REQUEST = "Check_IO_Request"
ACTION_CHECK_ASYNCHRONOUS_IO_REQUEST = "Check_Asynchronous_IO_Request"
ACTION_CHECK_IO_CONFIGURE = "Check_IO_Configure"
ACTION_CHECK_NETWORK_CONFIGURE = "Check_Network_Configure"
ACTION_CHECK_NETWORK_BOND_MODE = "Check_Network_Bond_Mode"
ACTION_CHECK_SWAP_MEMORY_CONFIGURE = "Check_Swap_Memory_Configure"
ACTION_CHECK_FILESYSTEM_CONFIGURE = "Check_FileSystem_Configure"
ACTION_CHECK_TIME_CONSISTENCY = "Check_Time_Consistency"
ACTION_CHECK_FIREWALL_SERVICE = "Check_Firewall_Service"
ACTION_CHECK_THP_SERVICE = "Check_THP_Service"
ACTION_SET_SYSCTL_PARAMETER = "Set_SysCtl_Parameter"
ACTION_SET_FILESYSTEM_CONFIGURE = "Set_FileSystem_Configure"
ACTION_SET_NETWORK_CONFIGURE = "Set_Network_Configure"
ACTION_SET_THP_SERVICE = "Set_THP_Service"
ACTION_SET_REMOVEIPC_VALUE = "Set_RemoveIPC_Value"
ACTION_SET_SESSION_PROCESS = "Set_Session_Process"
ACTION_SET_BLOCKDEV_CONFIGURE = "Set_BlockDev_Configure"
ACTION_SET_LOGICAL_BLOCK = "Set_Logical_Block"
ACTION_SET_IO_CONFIGURE = "Set_IO_Configure"
ACTION_SET_IO_REQUEST = "Set_IO_REQUEST"
ACTION_SET_ASYNCHRONOUS_IO_REQUEST = "Set_Asynchronous_IO_Request"
#######################################################
class CmdOptions():
"""
init the command options
"""
def __init__(self):
self.hostnamestr = ""
self.itemstr = ""
self.hostlistfile = ""
self.hostnameList = []
self.outputfile = ""
self.logFile = ""
self.localLog = ""
self.set = False
self.detail = False
self.detail_all = False
self.item_detail = []
self.confFile = ""
self.localMode = False
#########################################################
# Init global log
#########################################################
def initGlobals():
"""
init the global parameter g_logger and g_sshTool
"""
global g_logger
global g_sshTool
global g_clusterInfo
g_logger = GaussLog(g_opts.logFile, "gs_checkos")
dirName = os.path.dirname(g_opts.logFile)
g_opts.localLog = os.path.join(dirName, ClusterConstants.LOCAL_LOG_FILE)
g_sshTool = SshTool(g_opts.hostnameList, g_logger.logFile,
DefaultValue.TIMEOUT_PSSH_CHECK)
g_clusterInfo = dbClusterInfo()
if (g_opts.confFile != ""):
g_clusterInfo.initFromXml(g_opts.confFile)
#############################################################################
# Parse and check parameters
#############################################################################
def usage():
"""
gs_checkos is a utility to check and set cluster OS information.
Usage:
gs_checkos -? | --help
gs_checkos -V | --version
gs_checkos -i ITEM [-f HOSTFILE] [-h HOSTNAME] [-X XMLFILE] [--detail] [-o OUTPUT] [-l LOGFILE]
General options:
-i Item number. To check all items, enter "-i A". To set all parameters, enter "-i B".
To check multiple status, enter the items in the following format: "-i A1,A2,A3".
-f File listing names of all the hosts to connect to. The host names are separated by line breaks.
-h Name of the host to connect to.
-X Configuration file of the cluster.
--detail Show detailed information.
-o Save the result to the specified file.
-l Path of log file.
-? --help Show help information for this utility, and exit the command line mode.
-V --version Show version information.
Item number description:
'A1':[ OS version status ]
'A2':[ Kernel version status ]
'A3':[ Unicode status ]
'A4':[ Time zone status ]
'A5':[ Swap memory status ]
'A6':[ System control parameters status ]
'A7':[ File system configuration status ]
'A8':[ Disk configuration status ]
'A9':[ Pre-read block size status ]
'A10':[ IO scheduler status ]
'A11':[ Network card configuration status ]
'A12':[ Time consistency status ]
'A13':[ Firewall service status ]
'A14':[ THP service status ]
'B1':[ Set system control parameters ]
'B2':[ Set file system configuration value ]
'B3':[ Set pre-read block size value ]
'B4':[ Set IO scheduler value ]
'B5':[ Set network card configuration value ]
'B6':[ Set THP service ]
'B7':[Set RemoveIPC value]
'B8':[Set Session Process]
"""
print(usage.__doc__)
def parseHostnameOpts(value):
"""
parse hostnames by value
"""
if (len(value) > 1):
for val in value:
val = val.strip()
if val != "" and val not in g_opts.hostnameList:
g_opts.hostnameList.append(val)
else:
g_opts.hostnameList.append(value[0])
def parseItemOpts(itemList):
"""
parse items by value
"""
value = []
for val in itemList:
if (len(val.split(',')) > 1):
for i in val.split(','):
value.append(i)
else:
value.append(val)
if (len(value) > 1):
for val in value:
val = val.strip().upper()
if (val in CHECK_ITEMNUMLIST or val.upper() == "A" or
val in SET_ITEMNUMLIST or val.upper() == "B"):
if val not in g_opts.item_detail:
g_opts.item_detail.append(val)
else:
GaussLog.exitWithError(
ErrorCode.GAUSS_500["GAUSS_50004"] % 'i')
else:
value = value[0].upper()
if (value in CHECK_ITEMNUMLIST or value == "A" or
value in SET_ITEMNUMLIST or value == "B"):
if value not in g_opts.item_detail:
g_opts.item_detail.append(value)
else:
GaussLog.exitWithError(ErrorCode.GAUSS_500["GAUSS_50004"] % 'i')
def parseCommandLine():
"""
Parse command line and save to global variable
"""
global g_opts
g_opts = CmdOptions()
ParaObj = Parameter()
ParaDict = ParaObj.ParameterCommandLine("checkos")
if (ParaDict.__contains__("helpFlag")):
usage()
sys.exit(0)
if (ParaDict.__contains__("logFile")):
g_opts.logFile = ParaDict.get("logFile")
if (ParaDict.__contains__("confFile")):
g_opts.confFile = ParaDict.get("confFile")
if (ParaDict.__contains__("nodename")):
g_opts.hostnamestr = ParaDict.get("nodename")
if (ParaDict.__contains__("hostfile")):
g_opts.hostlistfile = ParaDict.get("hostfile")
if (ParaDict.__contains__("outFile")):
g_opts.outputfile = ParaDict.get("outFile")
if (ParaDict.__contains__("itemstr")):
g_opts.itemstr = ParaDict.get("itemstr")
if (ParaDict.__contains__("show_detail")):
g_opts.detail = ParaDict.get("show_detail")
def readHostFile(hostfile):
"""
read host file to hostlist
"""
try:
with open(hostfile, "r") as fp:
for readline in fp:
hostname = readline.strip().split("\n")[0]
if hostname != "" and hostname not in hostfile:
g_opts.hostnameList.append(hostname)
except Exception as e:
GaussLog.exitWithError(ErrorCode.GAUSS_502["GAUSS_50204"] %
hostfile + " Error: \n%s" % str(e))
def checkHostList():
"""
"""
if (g_opts.hostnamestr == "" and g_opts.hostlistfile == ""):
g_opts.hostnameList = [NetUtil.GetHostIpOrName()]
elif (g_opts.hostnamestr != "" and g_opts.hostlistfile != ""):
GaussLog.exitWithError(
ErrorCode.GAUSS_500["GAUSS_50005"] % ('h', 'f'))
elif (g_opts.hostnamestr == "" and g_opts.hostlistfile != ""):
if (not os.path.isfile(g_opts.hostlistfile)):
GaussLog.exitWithError(
ErrorCode.GAUSS_502["GAUSS_50201"] % g_opts.hostlistfile)
else:
readHostFile(g_opts.hostlistfile)
else:
parseHostnameOpts(g_opts.hostnamestr)
def checkConfigFile():
"""
"""
if (g_opts.confFile != ""):
if (not os.path.isfile(g_opts.confFile)):
GaussLog.exitWithError(
ErrorCode.GAUSS_502["GAUSS_50201"] % g_opts.confFile)
def setLogFile():
"""
"""
if (g_opts.logFile == ""):
cmd = "(if [ ! -d %s ]; then mkdir -p %s -m %s; fi)" % (
LOG_DIR, LOG_DIR, DefaultValue.KEY_DIRECTORY_MODE)
(status, output) = subprocess.getstatusoutput(cmd)
if (status != 0):
GaussLog.exitWithError(ErrorCode.GAUSS_502["GAUSS_50208"]
% "log of gs_checkos" + " Error: \n%s."
% output + "The cmd is %s" % cmd)
g_opts.logFile = os.path.join(LOG_DIR, "gs_checkos.log")
def checkItems():
"""
"""
if (g_opts.itemstr == ""):
GaussLog.exitWithError(ErrorCode.GAUSS_500["GAUSS_50001"] % "i" + ".")
def checkOutputFile():
"""
"""
try:
if (g_opts.outputfile != ""):
DefaultValue.checkOutputFile(g_opts.outputfile)
except Exception as e:
GaussLog.exitWithError(str(e))
def checkParameter():
"""
Check parameter from command line
"""
############################################
# check hostlist info
###########################################
checkHostList()
# check config file
checkConfigFile()
if (len(g_opts.hostnameList) == 0):
g_opts.hostnameList = [NetUtil.GetHostIpOrName()]
g_opts.hostnameList.sort()
checkHostnameList()
##########################################
# set logfile
############################################
setLogFile()
##########################################
# set items
############################################
checkItems()
parseItemOpts(g_opts.itemstr)
if (("B" in g_opts.item_detail)):
g_opts.set = True
else:
for i in SET_ITEMNUMLIST:
for j in g_opts.item_detail:
if (j == i):
g_opts.set = True
break
if (g_opts.set == True):
if ("A" in g_opts.item_detail):
GaussLog.exitWithError(ErrorCode.GAUSS_500["GAUSS_50004"] % 'i'
+ " Checking items and setting items"
" can't be used together.")
for i in CHECK_ITEMNUMLIST:
for j in g_opts.item_detail:
if (j == i):
GaussLog.exitWithError(ErrorCode.GAUSS_500["GAUSS_50004"]
% 'i' + " Checking items and "
"setting items can't be"
" used together.")
############################################
# check output file
############################################
checkOutputFile()
def doCheckOS(itemNumber):
"""
do the checing ation by item
"""
if (itemNumber == 'A1'):
checkOSVersion()
elif (itemNumber == 'A2'):
checkKernelVersion()
elif (itemNumber == 'A3'):
checkUnicode()
elif (itemNumber == 'A4'):
checkTimeZone()
elif (itemNumber == 'A5'):
checkMemoryUsage()
elif (itemNumber == 'A6'):
checkSysCtlParameter()
elif (itemNumber == 'A7'):
checkFileSystemConfigure()
elif (itemNumber == 'A8'):
checkDiskConfigure()
elif (itemNumber == 'A9'):
checkBlockDevConfigure()
checkLogicalBlock()
elif (itemNumber == 'A10'):
checkIOrequestqueue()
checkMaxAsyIOrequests()
checkIOConfigure()
elif (itemNumber == 'A11'):
checkNetworkConfigure()
elif (itemNumber == 'A12'):
checkTimeConsistency()
elif (itemNumber == 'A13'):
checkFirewallService()
elif (itemNumber == 'A14'):
checkTHPService()
def doSetOS(itemNumber):
"""
do the setting ation by item
"""
if (itemNumber == 'B1'):
setSysCtlParameter()
elif (itemNumber == 'B2'):
setFileSystemConfigure()
elif (itemNumber == 'B3'):
setLogicalBlock()
setBlockDevConfigure()
elif (itemNumber == 'B4'):
setIOrequestqueue()
setMaxAsyIOrequests()
setIOConfigure()
elif (itemNumber == 'B5'):
setNetworkConfigure()
elif (itemNumber == 'B6'):
setTHPService()
elif (itemNumber == 'B7'):
setRemoveIPCValue()
elif (itemNumber == 'B8'):
setSessionProcess()
def checkOSVersion():
"""
check OS version
make sure that the OS vesion is in SuSE11 sp1/2/3/4, SuSE12 sp0/1/2/3 or Redhat(centos) 6.4/6.5/6.5/6.7/6.8/6.9/7.0/7.1/7.2/7.3/7.4/7.5
If it is local, skipping. Else the OS version from all nodes are same
information type like this:
True SuSE11SP1 SuSE_11_SP1_64bit
False SuSE SuSE_10_SP4_64bit
"""
g_logger.debug("Checking OS version.")
try:
cmd = "%s -t %s -l %s" % (
Local_CheckOs, ACTION_CHECK_OS_VERSION, g_opts.localLog)
(status, output, outputMap) = getCmdOutput(cmd)
parRes = ""
detail_msg = ""
for node in list(status.keys()):
outputMap[node] = outputMap[node].strip().split("\n")[0].strip()
for node in list(status.keys()):
if ((status[node] != DefaultValue.SUCCESS)):
g_logger.logExit("[%s]: \n" % node +
ErrorCode.GAUSS_516["GAUSS_51632"] % cmd +
" Error: \n%s" % outputMap[node].strip())
if ((status[node] == DefaultValue.SUCCESS) and
(outputMap[node].strip().split(' ')[0].strip()
== str(False))):
g_OSCheckOpts['A1'][2] = 'Abnormal'
parRes += "[%s]\n%s\n" % (
node, outputMap[node].strip().split(' ')[2].strip())
detail_msg += "[%s]\n%s [Abnormal]\n" % (
node, outputMap[node].strip().split(' ')[2].strip())
if ((parRes == "") and (len(list(status.keys())) > 1)):
nodeValue = list(status.keys())[0].strip()
mixedType = outputMap[nodeValue].strip().split(' ')[1].strip()
platformStr = outputMap[nodeValue].strip().split(' ')[2].strip()
sshresult = ""
if (mixedType == ""):
g_OSCheckOpts['A1'][2] = 'Abnormal'
parRes += "[%s]\n%s\n" % (
nodeValue, "Failed to obtain platform information.")
detail_msg += "[%s]\n%s [Abnormal]\n" % (
nodeValue, "Failed to obtain platform information.")
else:
for node in list(status.keys()):
if ((status[node] == DefaultValue.SUCCESS) and (
outputMap[node].strip().split(' ')[
1].strip() != mixedType)):
g_OSCheckOpts['A1'][2] = 'Abnormal'
sshresult = "failed"
parRes += "[%s]\n%s\n" % (
node, outputMap[node].strip().split(' ')[2].strip())
detail_msg += "[%s]\n%s [Abnormal]\n" % (
node, outputMap[node].strip().split(' ')[2].strip())
if (sshresult == "failed"):
parRes = "[%s]\n%s\n%s" % (nodeValue, platformStr, parRes)
if (g_OSCheckOpts['A1'][2] == 'Abnormal'):
g_OSCheckOpts['A1'][3] = "\n%s" % parRes
else:
parRes = ""
for node in list(status.keys()):
parRes += " [%s]\n %s\n" % (
node, outputMap[node].strip().split(' ')[2].strip())
detail_msg += " [%s]\n %s [Normal]\n" % (
node, outputMap[node].strip().split(' ')[2].strip())
g_OSCheckOpts['A1'][3] = "\n%s" % parRes
g_OSCheckOpts['A1'][4] = "\n%s" % detail_msg
except Exception as e:
g_logger.debug(str(e))
g_logger.debug("Successfully checked OS version.")
def performEnvCheck(action_item, failed_mesg, success_mesg, item_num,
warning_level, configFile=""):
"""
action_item : action item
failed_mesg : failed message information
success_mesg : success message information
item_num : item number
warning_level : warning level, warning or Abnormal
"""
ssh_config_tmp = ""
outputMap = {}
try:
if (configFile != ""):
cmd = "%s -t %s -X '%s' -l '%s'" % (
Local_CheckOs, action_item, configFile, g_opts.localLog)
else:
cmd = "%s -t %s -l '%s'" % (
Local_CheckOs, action_item, g_opts.localLog)
if action_item == ACTION_CHECK_UNICODE:
try:
# Generate an empty file as a configuration file
ssh_config_tmp = getTmpFile()
FileUtil.createFile(ssh_config_tmp)
# Execute the ssh command with an empty configuration file when checking the encoding format
(status, output, outputMap) = getCmdOutput(cmd,
ssh_config_tmp)
# Clean up the generated empty configuration file
FileUtil.removeFile(ssh_config_tmp)
except Exception as e:
if os.path.exists(ssh_config_tmp):
FileUtil.removeFile(ssh_config_tmp)
g_logger.debug(
"Execute ssh cmd [%s] with ssh_config exception." % cmd)
raise Exception(str(e))
else:
(status, output, outputMap) = getCmdOutput(cmd)
parRes = ""
detail_msg = ""
for node in list(status.keys()):
if (status[node] != DefaultValue.SUCCESS):
g_logger.logExit("[%s]: \n" % node +
ErrorCode.GAUSS_516["GAUSS_51632"] % cmd +
" Error: \n%s" % outputMap[node].strip())
if (outputMap[node].strip() == ''):
raise Exception("[%s]\n%s\n" % (node, "The result is Null"))
if ("not same" in outputMap[node].strip()):
raise Exception(
"[%s]\n%s\n" % (node, outputMap[node].strip()))
if ((len(list(status.keys())) > 1)):
nodeValue = list(status.keys())[0].strip()
keystr = outputMap[nodeValue].strip().split()[1].strip()
sshresult = ""
if (keystr == ""):
g_OSCheckOpts[item_num][2] = '%s' % warning_level
parRes += " [%s]\n %s\n" % (
nodeValue, failed_mesg)
detail_msg += " [%s]\n %s\n" % (
nodeValue, failed_mesg)
else:
for node in list(status.keys()):
if ((status[node] == DefaultValue.SUCCESS)
and (outputMap[node].strip().split()[1].strip()
!= keystr)):
g_OSCheckOpts[item_num][2] = warning_level
sshresult = "failed"
parRes += " [%s]\n %s\n" % (
node, outputMap[node].strip().split()[1].strip())
detail_msg += " [%s]\n %s [%s]\n" % (
node, outputMap[node].strip().split()[1].strip(),
warning_level)
else:
detail_msg += " [%s]\n %s [%s]\n" % (
node, outputMap[node].strip().split()[1].strip(),
"Normal")
if (sshresult == "failed"):
parRes = " [%s]\n %s\n%s" % (
nodeValue, keystr, parRes)
if (g_OSCheckOpts[item_num][2] == warning_level):
g_OSCheckOpts[item_num][3] = "\n%s" % parRes
keystr = ""
else:
nodeValue = list(status.keys())[0].strip()
keystr = outputMap[nodeValue].strip().split()[1].strip()
g_OSCheckOpts[item_num][3] = "\n %s The value is \"%s\"."\
% (success_mesg, keystr)
if g_opts.detail_all:
if (item_num == "A11") and (keystr == "Null"):
g_OSCheckOpts[item_num][4] = "OK"
else:
g_OSCheckOpts[item_num][4] = "\n%s" % detail_msg
except Exception as e:
g_logger.debug(str(e))
g_logger.debug("Output: \n%s" % outputMap)
g_OSCheckOpts[item_num][2] = warning_level
g_OSCheckOpts[item_num][3] = "\n %s" % failed_mesg
g_OSCheckOpts[item_num][4] = "\n %s" % failed_mesg
def checkKernelVersion():
"""
Checking kernel version
"""
g_logger.debug("Checking kernel version.")
performEnvCheck(ACTION_CHECK_KERNEL_VERSION,
"Failed to obtain kernel version information.",
"The names about all kernel versions are same.", "A2",
"Warning")
g_logger.debug("Successfully checked kernel version.")
def checkUnicode():
"""
Checking unicode value
"""
g_logger.debug("Checking unicode value.")
performEnvCheck(ACTION_CHECK_UNICODE, "Failed to obtain unicode value.",
"The values of all unicode are same.", "A3", "Abnormal")
g_logger.debug("Successfully checked unicode value.")
def checkTimeZone():
"""
Checking timezone information
"""
g_logger.debug("Checking timezone information.")
performEnvCheck(ACTION_CHECK_TIMEZONE,
"Failed to obtain timezone information.",
"The informations about all timezones are same.", "A4",
"Abnormal")
g_logger.debug("Successfully checked timezone information.")
def performCheckorSetOS(action_item, flag_str, success_mesg, item_num,
warning_level, configFile="", command="",
parameters=""):
"""
action_item : action item
flag_str : failed flag string
success_mesg : success message information
item_num : item number
warning_level : warning level, warning or Abnormal
parameters : multiple strings of parameters
"""
try:
if command == "":
command = Local_CheckOs
if (configFile != ""):
cmd = "%s -t %s -X '%s' -l '%s' %s" % (
command, action_item, configFile, g_opts.localLog, parameters)
else:
cmd = "%s -t %s -l '%s' %s" % (
command, action_item, g_opts.localLog, parameters)
(status, output, outputMap) = getCmdOutput(cmd)
parRes = ""
detail_msg = ""
for node in list(status.keys()):
if (status[node] != DefaultValue.SUCCESS):
g_logger.logExit(" [%s]: \n" % node +
ErrorCode.GAUSS_516["GAUSS_51632"] % cmd
+ " Error: \n%s" % outputMap[node].strip())
if (outputMap[node].find(flag_str) >= 0):
g_OSCheckOpts[item_num][2] = warning_level
parRes += " [%s]\n%s\n" % (node, outputMap[node])
else:
detail_msg += " [%s]\n%s\n" % (node, outputMap[node])
if (outputMap[node].find("Warning reason") >= 0
and outputMap[node].find("Abnormal") < 0):
if (g_OSCheckOpts[item_num][2] != "Abnormal"):
g_OSCheckOpts[item_num][2] = "Warning"
parRes += " [%s]\n%s\n" % (node, outputMap[node])
if (parRes != ""):
raise Exception("%s" % parRes)
if (g_OSCheckOpts[item_num][2] != warning_level):
g_OSCheckOpts[item_num][3] = "\n %s" % success_mesg
if g_OSCheckOpts[item_num][4] != "OK":
g_OSCheckOpts[item_num][4] = formatResault(
detail_msg, g_OSCheckOpts[item_num][4])
else:
g_OSCheckOpts[item_num][4] = "\n%s" % detail_msg
except Exception as e:
g_logger.debug(str(e))
if (g_OSCheckOpts[item_num][2] == "Normal"):
g_OSCheckOpts[item_num][2] = '%s' % warning_level
g_OSCheckOpts[item_num][3] = "\n%s" % str(e)
g_OSCheckOpts[item_num][4] = "\n%s" % str(e)
def formatResault(result_Str1, result_Str2):
"""
get add result of to dict
"""
result = ""
result_list1 = result_Str1.strip("\n").split("\n\n")
result_list2 = result_Str2.strip("\n").split("\n\n")
for nodeInfo1 in result_list1:
result += ("\n" + nodeInfo1.split("\n")[0])
result += ("\n" + "\n".join(nodeInfo1.split("\n")[1:]))
for nodeInfo2 in result_list2:
if nodeInfo1.split("\n")[0].strip() == nodeInfo2.split("\n")[0].strip():
result += ("\n" + "\n".join(nodeInfo2.split("\n")[1:]) + "\n")
return result
def checkMemoryUsage():
"""
Checking swap memory value
"""
g_logger.debug("Checking swap memory value.")
performCheckorSetOS(ACTION_CHECK_SWAP_MEMORY_CONFIGURE, "SwapMemory",
"The value about swap memory is correct.", "A5",
"Warning")
g_logger.debug("Successfully checked swap memory value.")
def checkSysCtlParameter():
"""
Checking system control parameter value
"""
g_logger.debug("Checking system control parameter value.")
performCheckorSetOS(ACTION_CHECK_SYSCTL_PARAMETER, "Abnormal",
"All values about system control parameters are correct.",
"A6", "Abnormal", '', Local_Check)
g_logger.debug("Successfully checked system control parameter value.")
def checkFileSystemConfigure():
"""
Checking file system configuration information
"""
g_logger.debug("Checking file system configuration information.")
performCheckorSetOS(ACTION_CHECK_FILESYSTEM_CONFIGURE, "Abnormal",
"Both soft nofile and hard nofile are correct.", "A7",
"Abnormal", '', Local_Check)
g_logger.debug(
"Successfully checked file system configuration information.")
def checkDiskConfigure():
"""
Checking disk configuration value
"""
g_logger.debug("Checking disk configuration value.")
performCheckorSetOS(ACTION_CHECK_DISK_CONFIGURE, "filesystem",
"The value about XFS mount parameters is correct.",
"A8", "Warning")
g_logger.debug("Successfully checked disk configuration value.")
def checkBlockDevConfigure():
"""
Checking Pre-read block size value
"""
g_logger.debug("Checking Pre-read block size value.")
performCheckorSetOS(ACTION_CHECK_BLOCKDEV_CONFIGURE, "blockdev",
"The value about Pre-read block size is correct.",
"A9", "Abnormal")
g_logger.debug("Successfully checked Pre-read block size value.")
def checkLogicalBlock():
"""
Checking Logical Block size value
"""
g_logger.debug("Checking Logical Block size value.")
performCheckorSetOS(ACTION_CHECK_LOGICAL_BLOCK, "logical_block_size",
"The value about Logical block size is correct.",
"A9", "Abnormal")
g_logger.debug("Successfully checked Logical block size value.")
def checkIOrequestqueue():
"""
Checking IO request queue value
"""
g_logger.debug("Checking IO request queue value.")
performCheckorSetOS(ACTION_CHECK_IO_REQUEST, "request",
"The value of IO request queue is correct.", "A10",
"Abnormal")
g_logger.debug("Successfully checked IO request queue value.")
def checkMaxAsyIOrequests():
"""
Checking Asynchronous IO request queue value
"""
g_logger.debug("Checking Asynchronous IO request queue value.")
performCheckorSetOS(ACTION_CHECK_ASYNCHRONOUS_IO_REQUEST, "aio-max-nr",
"The value of Asynchronous IO request queue is correct.",
"A10", "Abnormal", g_opts.confFile)
g_logger.debug(
"Successfully checked Asynchronous IO request queue value.")
def checkIOConfigure():
"""
Checking IO scheduler value
"""
g_logger.debug("Checking IO scheduler value.")
performCheckorSetOS(ACTION_CHECK_IO_CONFIGURE, "scheduler",
"The value of IO scheduler is correct.", "A10",
"Abnormal")
g_logger.debug("Successfully checked IO scheduler value.")
def checkNetworkConfigure():
"""
Checking network card configuration
"""
g_logger.debug("Checking network card configuration.")
performEnvCheck(ACTION_CHECK_NETWORK_BOND_MODE,
"Failed to obtain the networks bond mode information.",
"The all networks bond mode are same.", "A11", "Warning",
g_opts.confFile)
if (g_OSCheckOpts["A11"][2] == "Warning"):
g_OSCheckOpts["A11"][3] += "\n Failed to check the network" \
" bond mode."
g_OSCheckOpts["A11"][4] = g_OSCheckOpts["A11"][3]
return
nodeIp = getLocalIPAddr()
localMTU = DefaultValue.checkNetWorkMTU(nodeIp, False)
if (str(localMTU).find("Abnormal") >= 0 or localMTU == ""):
return
cmdInfo = "--hostname=%s " % NetUtil.GetHostIpOrName()
if (not g_opts.localMode):
cmdInfo += "--MTUvalue=%s " % localMTU
if (g_opts.confFile != "" and g_opts.confFile != None):
cmdInfo += "--xmlfile=%s " % g_opts.confFile
performCheckorSetOS(ACTION_CHECK_NETWORK_CONFIGURE, "Abnormal",
"The configuration about network card is correct.",
"A11", "Abnormal", g_opts.confFile, "", cmdInfo)
g_logger.debug("Successfully checked network configuration.")
def getLocalIPAddr():
'''
function: get all ips from configuration file
input : NA
output: Ips
'''
Ips = ""
if (g_opts.confFile == ""):
localHostIp = DefaultValue.getIpByHostName()
Ips = localHostIp
else:
for node in g_clusterInfo.dbNodes:
if (node.name == NetUtil.GetHostIpOrName()):
Ips = node.backIps[0]
return Ips
def checkTimeConsistency():
"""
Checking system time consistency
"""
g_logger.debug("Checking system time consistency.")
try:
cmd = "%s -t %s -l %s" % (
Local_CheckOs, ACTION_CHECK_TIME_CONSISTENCY, g_opts.localLog)
(status, output, outputMap) = getCmdOutput(cmd)
parRes = ""
detail_msg = ""
for node in list(status.keys()):
outputMap[node] = outputMap[node].strip().split("\n")[0].strip()
for node in list(status.keys()):
if (status[node] != DefaultValue.SUCCESS):
g_logger.logExit("[%s]: \n" % node +
ErrorCode.GAUSS_516["GAUSS_51632"] % cmd +
" Error: \n%s" % outputMap[node].strip())
if ((status[node] == DefaultValue.SUCCESS)
and (outputMap[node].strip().split(',')[0].strip()
== str(False))):
g_OSCheckOpts['A12'][2] = 'Warning'
parRes += " [%s]\n The NTPD not detected" \
" on machine and local time is \"%s\".\n"\
% (node,
outputMap[node].strip().split(',')[1].strip())
if ((parRes == "") and (len(list(status.keys())) > 1)):
nodeValue = list(status.keys())[0].strip()
keystr = outputMap[nodeValue].strip().split(',')[1].strip()
if (keystr == ""):
g_OSCheckOpts['A12'][2] = 'Warning'
parRes += " [%s]\n %s\n" % (
nodeValue, "Failed to obtain localtime information.")
else:
baseTime = datetime.strptime(keystr, "%Y-%m-%d %H:%M:%S")
startTime = baseTime - timedelta(seconds=DEFAULT_INTERVAL)
endTime = baseTime + timedelta(seconds=DEFAULT_INTERVAL)
for node in list(status.keys()):
if (status[node] == DefaultValue.SUCCESS):
tmpstr = outputMap[node].strip().split(',')[1].strip()
tmpTime = datetime.strptime(tmpstr,
"%Y-%m-%d %H:%M:%S")
if (tmpTime < startTime or tmpTime > endTime):
g_OSCheckOpts['A12'][2] = 'Warning'
parRes += " [%s]\n " \
"The current system time = (%s)\n"\
% (node, tmpstr)
detail_msg += " [%s]\n Variable:" \
"'current system time' RealValue:" \
"'%s' ExpectedValue:'%s' " \
"[Warning]\n"\
% (node, tmpstr,
baseTime.strftime("%Y-%m-%d %H:%M:%S"))
if (g_OSCheckOpts['A12'][2] == 'Warning'):
g_OSCheckOpts['A12'][3] = "\n%s" % parRes
else:
nodeValue = list(status.keys())[0].strip()
keystr = outputMap[nodeValue].strip().split(',')[1].strip()
g_OSCheckOpts['A12'][3] = "\n The ntpd service is " \
"started, local time is \"%s\"." % keystr
g_OSCheckOpts['A12'][4] = "\n%s" % detail_msg
except Exception as e:
g_logger.debug(str(e))
g_logger.debug("Successfully checked system time consistency.")
def checkFirewallService():
"""
Checking firewall service
"""
g_logger.debug("Checking firewall service.")
performCheckorSetOS(ACTION_CHECK_FIREWALL_SERVICE, "firewall",
"The firewall service is stopped.", "A13", "Warning")
g_logger.debug("Successfully checked firewall service.")
def checkTHPService():
"""
Checking THP service
"""
g_logger.debug("Checking THP service.")
performCheckorSetOS(ACTION_CHECK_THP_SERVICE, "THP",
"The THP service is stopped.", "A14", "Abnormal")
g_logger.debug("Successfully checked THP service.")
def getSetRemoveIPCValue(action_item, flag_str, flag_error, success_mesg,
item_num, warning_level, configFile="", command=""):
"""
get the print information that is from setting removeipc value
"""
try:
if command == "":
command = Local_CheckOs
if (configFile != ""):
cmd = "%s -t %s -X '%s' -l '%s'"\
% (command, action_item, configFile, g_opts.localLog)
else:
cmd = "%s -t %s -l '%s'" % (command, action_item, g_opts.localLog)
(status, output, outputMap) = getCmdOutput(cmd)
message = ""
parRes = ""
for node in list(status.keys()):
if (status[node] != DefaultValue.SUCCESS):
g_logger.logExit("[%s]: \n" % node +
ErrorCode.GAUSS_516["GAUSS_51632"] % cmd +
" Error: \n%s" % outputMap[node].strip())
if (outputMap[node].find(flag_error) >= 0):
parRes += "[%s]\n%s\n" % (node, outputMap[node])
if (outputMap[node].find(flag_str) >= 0):
message += " [%s]\n%s\n" % (node, outputMap[node])
if (parRes != ""):
raise Exception("%s" % parRes)
if (g_OSCheckOpts[item_num][2] != warning_level):
if (message != ""):
g_OSCheckOpts[item_num][3] = "\n%s %s" % (
message, success_mesg)
else:
g_OSCheckOpts[item_num][3] = "\n %s" % success_mesg
except Exception as e:
g_logger.debug(str(e))
g_OSCheckOpts[item_num][2] = '%s' % warning_level
g_OSCheckOpts[item_num][3] = "\n %s" % str(e)
def getSetSessionProcess(action_item, flag_str, flag_error, success_mesg,
item_num, warning_level, configFile="", command=""):
"""
get the print information that is from setting session process
"""
try:
if command == "":
command = Local_CheckOs
if (configFile != ""):
cmd = "%s -t %s -X '%s' -l '%s'"\
% (command, action_item, configFile, g_opts.localLog)
else:
cmd = "%s -t %s -l '%s'" % (command, action_item, g_opts.localLog)
(status, output, outputMap) = getCmdOutput(cmd)
message = ""
parRes = ""
for node in list(status.keys()):
if (status[node] != DefaultValue.SUCCESS):
g_logger.logExit("[%s]: \n" % node +
ErrorCode.GAUSS_516["GAUSS_51632"] % cmd +
" Error: \n%s" % outputMap[node].strip())
if (outputMap[node].find(flag_error) >= 0):
parRes += "[%s]\n%s\n" % (node, outputMap[node])
if (outputMap[node].find(flag_str) >= 0):
message += " [%s]\n%s\n" % (node, outputMap[node])
if (parRes != ""):
raise Exception("%s" % parRes)
if (g_OSCheckOpts[item_num][2] != warning_level):
if (message != ""):
g_OSCheckOpts[item_num][3] = "\n%s %s" % (
message, success_mesg)
else:
g_OSCheckOpts[item_num][3] = "\n %s" % success_mesg
except Exception as e:
g_logger.debug(str(e))
g_OSCheckOpts[item_num][2] = '%s' % warning_level
g_OSCheckOpts[item_num][3] = "\n %s" % str(e)
def getSetOSPrintInfo(action_item, flag_str, flag_error, success_mesg,
item_num, warning_level, configFile="", command=""):
"""
get the print information that is from setting OS parameters
"""
try:
if command == "":
command = Local_CheckOs
if (configFile != ""):
cmd = "%s -t %s -X '%s' -l '%s'"\
% (command, action_item, configFile, g_opts.localLog)
else:
cmd = "%s -t %s -l '%s'" % (command, action_item, g_opts.localLog)
(status, output, outputMap) = getCmdOutput(cmd)
message = ""
parRes = ""
for node in list(status.keys()):
if (status[node] != DefaultValue.SUCCESS):
g_logger.logExit("[%s]: \n" % node +
ErrorCode.GAUSS_516["GAUSS_51632"] % cmd +
" Error: \n%s" % outputMap[node].strip())
if (outputMap[node].find(flag_error) >= 0):
parRes += "[%s]\n%s\n" % (node, outputMap[node])
if (outputMap[node].find(flag_str) >= 0):
message += " [%s]\n%s\n" % (node, outputMap[node])
if (parRes != ""):
raise Exception("%s" % parRes)
if (g_OSCheckOpts[item_num][2] != warning_level):
if (message != ""):
g_OSCheckOpts[item_num][3] = "\n%s %s" % (
message, success_mesg)
else:
g_OSCheckOpts[item_num][3] = "\n %s" % success_mesg
except Exception as e:
g_logger.debug(str(e))
g_OSCheckOpts[item_num][2] = '%s' % warning_level
g_OSCheckOpts[item_num][3] = "\n %s" % str(e)
def setSysCtlParameter():
"""
Setting sysctl parameter value
"""
g_logger.debug("Setting sysctl parameter value.")
getSetOSPrintInfo(ACTION_SET_SYSCTL_PARAMETER, "Set", "Failed", "Setting sysctl \
parameter values succeed.", "B1", "Abnormal", g_opts.confFile, Local_Check)
g_logger.debug("Successfully setted the sysctl configuration parameters.")
def setFileSystemConfigure():
"""
Setting file system configuration
"""
g_logger.debug("Setting file system configuration.")
getSetOSPrintInfo(ACTION_SET_FILESYSTEM_CONFIGURE, "Set", "Failed", "Setting soft file \
and hard file parameters succeed.", "B2", "Abnormal", g_opts.confFile,
Local_Check)
g_logger.debug("Successfully setted file system configuration.")
def setBlockDevConfigure():
"""
Setting Pre-read block size value
"""
g_logger.debug("Setting Pre-read block size value.")
getSetOSPrintInfo(ACTION_SET_BLOCKDEV_CONFIGURE, "blockdev", "Failed",
"Setting Pre-read block size value succeed.", "B3",
"Abnormal")
g_logger.debug("Successfully setted Pre-read block size value.")
def setLogicalBlock():
"""
Setting logical block size value
"""
g_logger.debug("Setting logical block size value.")
performCheckorSetOS(ACTION_SET_LOGICAL_BLOCK, "Failed",
"Setting logical block size value succeed.", "B3",
"Abnormal")
g_logger.debug("Successfully setted logical block size value.")
def setRemoveIPCValue():
"""
Setting removeipc value
"""
g_logger.debug("Setting RemoveIPC value.")
getSetRemoveIPCValue(ACTION_SET_REMOVEIPC_VALUE, "Set", "Failed", "Setting sysctl \
parameter values succeed.", "B7", "Abnormal", g_opts.confFile, Local_CheckOs)
g_logger.debug("Sucessfully setted RemoveIPC value.")
def setSessionProcess():
"""
Setting Session Process
"""
g_logger.debug("Setting Session Process.")
getSetSessionProcess(ACTION_SET_SESSION_PROCESS, "Set", "Failed", "Setting sysctl \
parameter values succeed.", "B8", "Abnormal", g_opts.confFile, Local_CheckOs)
g_logger.debug("Sucessfully Setted Session Process.")
def setIOConfigure():
"""
Setting IO scheduler value
"""
g_logger.debug("Setting IO scheduler value.")
getSetOSPrintInfo(ACTION_SET_IO_CONFIGURE, "scheduler", "Failed",
"Setting IO scheduler value succeed.", "B4", "Abnormal")
g_logger.debug("Successfully setted IO scheduler value.")
def setIOrequestqueue():
"""
Setting IO request queue value
"""
g_logger.debug("Setting IO request queue value.")
performCheckorSetOS(ACTION_SET_IO_REQUEST, "failed",
"Setting IO request queue value succeed.", "B4",
"Abnormal")
g_logger.debug("Successfully setted IO request queue value.")
def setMaxAsyIOrequests():
"""
Setting Maximumasynchronous IO request queue value
"""
g_logger.debug("Setting Maximumasynchronous IO request queue value.")
performCheckorSetOS(ACTION_SET_ASYNCHRONOUS_IO_REQUEST, "failed",
"Setting Maximumasynchronous IO request queue value succeed.",
"B4", "Abnormal", g_opts.confFile)
g_logger.debug(
"Successfully setted Maximumasynchronous IO request queue value.")
def setNetworkConfigure():
"""
Setting network card configuration
"""
g_logger.debug("Setting network card configuration.")
getSetOSPrintInfo(ACTION_SET_NETWORK_CONFIGURE, "Set", "Failed",
"Seting network card configuration succeed.", "B5",
"Warning", g_opts.confFile)
g_logger.debug("Successfully setted network card configuration.")
def setTHPService():
"""
Setting THP service
"""
g_logger.debug("Setting THP service.")
getSetOSPrintInfo(ACTION_SET_THP_SERVICE, "Set", "Failed",
"Setting THP server succeed.", "B6", "Abnormal")
g_logger.debug("Sucessfully setted THP service.")
def DisplayResultInformation(Item, output):
"""
display the result information
"""
if ("A" in g_opts.item_detail) or ("B" in g_opts.item_detail):
if (Item in ("A1", "B1")):
if (g_opts.detail):
print("%s:\n %s: %s %s" % (
g_OSCheckOpts[Item][0],
("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][3].ljust(DEFAULT_INTERVAL)),
file=output)
elif (g_opts.detail_all):
print("%s:\n %s: %s %s" %
(g_OSCheckOpts[Item][0],
("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][4].ljust(DEFAULT_INTERVAL)),
file=output)
else:
print("%s:\n %s: %s" %
(g_OSCheckOpts[Item][0],
("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2]), file=output)
else:
if (g_opts.detail):
print(" %s: %s %s" %
(("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][3].ljust(DEFAULT_INTERVAL)),
file=output)
elif (g_opts.detail_all):
print(" %s: %s %s" %
(("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][4].ljust(DEFAULT_INTERVAL)),
file=output)
else:
print(" %s: %s" %
(("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2]), file=output)
else:
orderItems = []
for i in [CHECK_ITEMNUMLIST, SET_ITEMNUMLIST]:
bb = []
for j in g_opts.item_detail:
if j in i:
bb.append(j)
tmp = sorted(bb)
bb = tmp
if (bb != []):
orderItems.append(bb[0])
if (Item in orderItems):
if (g_opts.detail):
print("%s\n %s: %s %s" %
(g_OSCheckOpts[Item][0],
("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][3].ljust(DEFAULT_INTERVAL)),
file=output)
elif (g_opts.detail_all):
print("%s\n %s: %s %s" %
(g_OSCheckOpts[Item][0],
("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][4].ljust(DEFAULT_INTERVAL)),
file=output)
else:
print("%s\n %s: %s" %
(g_OSCheckOpts[Item][0],
("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2]), file=output)
else:
if (g_opts.detail):
print(" %s: %s %s" %
(("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][3].ljust(DEFAULT_INTERVAL)),
file=output)
elif (g_opts.detail_all):
print(" %s: %s %s" %
(("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2].ljust(10),
g_OSCheckOpts[Item][4].ljust(DEFAULT_INTERVAL)),
file=output)
else:
print(" %s: %s" %
(("%s%s" %
(("%s." % Item).ljust(4),
g_OSCheckOpts[Item][1])).ljust(DEFAULT_INTERVAL),
g_OSCheckOpts[Item][2]), file=output)
def cmp_item(item1, item2):
"""
sort item
"""
if (item1[0] < item2[0]):
return -1
elif (item1[0] > item2[0]):
return 1
else:
if (int(item1[1:]) < int(item2[1:])):
return -1
elif (int(item1[1:]) > int(item2[1:])):
return 1
else:
return 0
def checkHostnameList():
"""
function: check the self.hostnameList is only local hostname
input: NA
output:NA
"""
# get the local hostname
global host
host = NetUtil.GetHostIpOrName()
# if g_opts.hostnameList have only one value,
# check it whether or not local hostname
if (len(g_opts.hostnameList) == 1):
if (g_opts.hostnameList[0] == NetUtil.GetHostIpOrName()):
g_opts.localMode = True
return
try:
# check the g_opts.hostnameList values are whether or not local IPs
# obtain the all local IPs
IPlist = NetUtil.getIpAddressList()
IPlist.append(host)
for ip in g_opts.hostnameList:
if ip not in IPlist:
return
g_opts.localMode = True
except Exception as ex:
GaussLog.exitWithError(str(ex))
def getCmdOutput(cmd, ssh_conf=""):
"""
function: execute the cmd and get the output
input: cmd
output:status, output, outputMap
"""
if (g_opts.localMode == True):
status = {}
outputMap = {}
outputCollect = []
(statusStr, output) = subprocess.getstatusoutput(cmd)
if (statusStr != 0):
status[host] = "Failure"
else:
status[host] = "Success"
outputMap[host] = output
else:
gp_path = os.path.dirname(os.path.realpath(__file__))
(status, output) = g_sshTool.getSshStatusOutput(cmd, [], "",
"%s/../" % gp_path,
ssh_config=ssh_conf)
outputMap = g_sshTool.parseSshOutput(g_sshTool.hostNames)
return (status, output, outputMap)
def getTmpFile():
'''
function : generate the check ID which is unique for once checking
input : NA
output : checkID
'''
# Get Time
while True:
t = time.localtime(time.time())
dateString = time.strftime("%Y%m%d", t)
seconds = timedelta(hours=t.tm_hour, minutes=t.tm_min,
seconds=t.tm_sec).seconds
pidString = str(os.getpid())
tmpFileName = "ssh_config" + "_" + dateString + "_"\
+ str(seconds) + "_" + pidString
tmpFile = os.path.join("/tmp", tmpFileName)
if os.path.exists(tmpFile):
time.sleep(1)
else:
return tmpFile
def main():
"""
main function
"""
if (os.getuid() != 0):
GaussLog.exitWithError(ErrorCode.GAUSS_501["GAUSS_50104"])
global Local_CheckOs
global Local_Check
try:
parseCommandLine()
checkParameter()
initGlobals()
gpHome = os.path.dirname(os.path.realpath(__file__))
Local_CheckOs = OMCommand.getLocalScript("Local_CheckOS")
Local_Check = OMCommand.getLocalScript("Local_Check")
except Exception as e:
GaussLog.exitWithError(str(e))
if ("A" in g_opts.item_detail):
itemList = CHECK_ITEMNUMLIST
elif ("B" in g_opts.item_detail):
itemList = SET_ITEMNUMLIST
else:
sortList = sorted(g_opts.item_detail)
itemList = sortList
fp = None
dirName = "%s/gspylib/etc/conf" % os.path.dirname(
os.path.realpath(__file__))
configFile = "%s/check_list.conf" % dirName
try:
if (DefaultValue.checkInList(['A6', 'A7', 'A11', 'B1', 'B2', 'B5'],
itemList) and
(os.path.isfile(configFile) != True)):
g_logger.logExit(ErrorCode.GAUSS_502["GAUSS_50201"] % configFile)
if ((g_opts.localMode != True) and
DefaultValue.checkInList(['A6', 'A7', 'A11', 'B1', 'B2', 'B5'],
itemList)):
g_sshTool.scpFiles(configFile, dirName, [], "", "%s/../" % gpHome)
except Exception as ex:
g_logger.logExit(str(ex))
try:
output = sys.stdout
if (g_opts.outputfile != ""):
basepath = os.path.dirname(g_opts.outputfile)
if (not os.path.isdir(basepath)):
os.makedirs(basepath, ConstantsBase.KEY_DIRECTORY_PERMISSION)
FileUtil.createFileInSafeMode(g_opts.outputfile)
fp = open(g_opts.outputfile, "w")
output = fp
g_logger.log("Performing operation system check/set."
" Output the result to the file %s."
% g_opts.outputfile)
for item in itemList:
if (g_opts.set == False):
doCheckOS(item)
else:
doSetOS(item)
DisplayResultInformation(item, output)
if (fp):
fp.flush()
fp.close()
if g_opts.outputfile != "":
os.chmod(g_opts.outputfile, ConstantsBase.KEY_FILE_PERMISSION)
g_logger.log("Operation system check/set is completed.")
except Exception as ex:
if fp:
fp.flush()
fp.close()
g_logger.logExit(ErrorCode.GAUSS_502["GAUSS_50205"] %
g_opts.outputfile + "Error: %s" % str(ex))
totalNum = 0
abnormalNum = 0
warningNum = 0
for key in itemList:
totalNum += 1
if (g_OSCheckOpts[key][2] == "Abnormal"):
abnormalNum += 1
elif (g_OSCheckOpts[key][2] == "Warning"):
warningNum += 1
if (g_opts.set):
g_logger.log("NOTICE: MTU value and some warning items can NOT be set."
" Please do it manually.")
g_logger.log("Total numbers:%d. Abnormal numbers:%d. Warning numbers:%d."
% (totalNum, abnormalNum, warningNum))
if (abnormalNum > 0):
if (g_opts.set == False):
g_logger.log("Do checking operation finished. Result: Abnormal.")
else:
g_logger.log("Do setting operation finished. Result: Abnormal.")
g_logger.closeLog()
sys.exit(0)
# the main entry for this script
if __name__ == '__main__':
main()