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

support cgroup

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

190 lines
6.2 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_uninstall is a utility to uninstall a Gauss200 server.
#############################################################################
import os
import sys
import pwd
sys.path.append(sys.path[0] + "/../")
from gspylib.common.GaussLog import GaussLog
from gspylib.common.Common import DefaultValue
from gspylib.common.ErrorCode import ErrorCode
from gspylib.common.ParallelBaseOM import ParallelBaseOM
from gspylib.common.ParameterParsecheck import Parameter
from impl.uninstall.OLAP.UninstallImplOLAP import UninstallImplOLAP
from domain_utils.cluster_file.cluster_dir import ClusterDir
from domain_utils.cluster_file.cluster_log import ClusterLog
from base_utils.os.env_util import EnvUtil
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 domain_utils.cluster_os.cluster_user import ClusterUser
#####################################################
# Ation type
#####################################################
ACTION_CLEAN_TEMP_DIR = "clean_tmp_dir"
class Uninstall(ParallelBaseOM):
"""
class about cmd options
"""
def __init__(self):
"""
function: init function
"""
ParallelBaseOM.__init__(self)
self.cleanInstance = False
def usage(self):
"""
gs_uninstall is a utility to uninstall a cluster.
Usage:
gs_uninstall -? | --help
gs_uninstall -V | --version
gs_uninstall [--delete-data] [-L] [-l LOGFILE]
General options:
--delete-data Clean up instance data files.
-L Only uninstall local nodes.
-l Path of log file.
-?, --help Show help information for this utility,
and exit the command line mode.
-V, --version Show version information.
"""
print(self.usage.__doc__)
def parseCommandLine(self):
"""
function: Parse command line and save to global variable
"""
ParaObj = Parameter()
# Parse the parameter with uninstall
ParaDict = ParaObj.ParameterCommandLine("uninstall")
# check if helpFlag exists
if (ParaDict.__contains__("helpFlag")):
self.usage()
sys.exit(0)
# check if -l parameter exists
if (ParaDict.__contains__("logFile")):
self.logFile = ParaDict.get("logFile")
# check if -L parameter exists
if (ParaDict.__contains__("localMode")):
self.localMode = ParaDict.get("localMode")
# check if need clean instances
if (ParaDict.__contains__("cleanInstance")):
self.cleanInstance = True
def checkParameter(self):
"""
function: Check parameter from command line
"""
# check user
self.user = pwd.getpwuid(os.getuid()).pw_name
# if no user info, throw error
if (self.user == ""):
GaussLog.exitWithError(ErrorCode.GAUSS_503["GAUSS_50308"])
# else check user
try:
ClusterUser.checkUser(self.user, False)
except Exception as e:
GaussLog.exitWithError(str(e))
# check log file
if (self.logFile == ""):
self.logFile = ClusterLog.getOMLogPath(
ClusterConstants.UNINSTALL_LOG_FILE, self.user, "")
if (not os.path.isabs(self.logFile)):
GaussLog.exitWithError(ErrorCode.GAUSS_502["GAUSS_50213"] % "log")
# get user env info
self.mpprcFile = EnvUtil.getMpprcFile()
def initGlobals(self):
"""
function: init global parameters
"""
# init log file for uninstall
self.initLogger("gs_uninstall")
try:
# OLAP
self.initClusterInfoFromStaticFile(self.user)
# Initialize the self.sshTool variable
self.initSshTool(self.clusterInfo.getClusterNodeNames(),
DefaultValue.TIMEOUT_PSSH_UNINSTALL)
except Exception as e:
self.logger.logExit(str(e))
def checkLogFilePath(self):
"""
function: Check log file path
"""
clusterPath = []
try:
# get tool path
clusterPath.append(ClusterDir.getClusterToolPath(self.user))
# get tmp path
tmpDir = EnvUtil.getTmpDirFromEnv()
clusterPath.append(tmpDir)
# get cluster path
hostName = NetUtil.GetHostIpOrName()
dirs = self.clusterInfo.getClusterDirectorys(hostName, False)
# loop all cluster path
for checkdir in dirs.values():
clusterPath.extend(checkdir)
self.logger.debug("Cluster paths %s." % clusterPath)
# check directory
FileUtil.checkIsInDirectory(self.logFile, clusterPath)
except Exception as e:
self.logger.logExit(str(e))
if __name__ == '__main__':
"""
main function
"""
# check if user is root
if (os.getuid() == 0):
GaussLog.exitWithError(ErrorCode.GAUSS_501["GAUSS_50105"])
try:
# Objectize class
uninstall = Uninstall()
uninstall.parseCommandLine()
uninstall.checkParameter()
uninstall.initGlobals()
if (uninstall.xmlFile):
pass
impl = UninstallImplOLAP(uninstall)
# Perform the whole extand process
impl.run()
except Exception as e:
GaussLog.exitWithError(str(e))