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

support cgroup

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

249 lines
7.8 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 : InitInstance.py is a utility to init instance.
#############################################################################
import getopt
import sys
import os
sys.path.append(sys.path[0] + "/../")
from gspylib.common.GaussLog import GaussLog
from gspylib.common.ParameterParsecheck import Parameter
from gspylib.common.ErrorCode import ErrorCode
from gspylib.common.LocalBaseOM import LocalBaseOM
from gspylib.threads.parallelTool import parallelTool
from domain_utils.cluster_file.cluster_log import ClusterLog
from domain_utils.domain_common.cluster_constants import ClusterConstants
from domain_utils.cluster_os.cluster_user import ClusterUser
########################################################################
# Global variables define
########################################################################
g_opts = None
########################################################################
INSTANCE_TYPE_UNDEFINED = -1
MASTER_INSTANCE = 0
STANDBY_INSTANCE = 1
DUMMY_STANDBY_INSTANCE = 2
########################################################################
class CmdOptions():
"""
"""
def __init__(self):
"""
constructor
"""
self.clusterUser = ""
self.dbInitParams = []
self.logFile = ""
self.dws_mode = False
self.vc_mode = False
self.paxos_mode = False
def usage():
"""
Usage:
python3 InitInstance.py -U user [-P "-PARAMETER VALUE" [...]] [-G
"-PARAMETER VALUE" [...]] [-l logfile]
"""
print(usage.__doc__)
def parseCommandLine():
"""
"""
try:
opts, args = getopt.getopt(sys.argv[1:], "U:P:G:l:?",
["help", "dws_mode", "vc_mode", "paxos_mode"])
except Exception as e:
usage()
GaussLog.exitWithError(ErrorCode.GAUSS_500["GAUSS_50000"] % str(e))
if len(args) > 0:
GaussLog.exitWithError(
ErrorCode.GAUSS_500["GAUSS_50000"] % str(args[0]))
global g_opts
g_opts = CmdOptions()
for (key, value) in opts:
if key == "-?" or key == "--help":
usage()
sys.exit(0)
elif key == "-U":
g_opts.clusterUser = value
elif key == "-P":
g_opts.dbInitParams.append(value)
elif key == "-l":
g_opts.logFile = os.path.realpath(value)
elif key == "--dws_mode":
g_opts.dws_mode = True
elif key == "--vc_mode":
g_opts.vc_mode = True
elif key == "--paxos_mode":
g_opts.paxos_mode = True
Parameter.checkParaVaild(key, value)
def __checkInitdbParams(param):
"""
function : Check parameter for initdb
-D, --pgdata : this has been specified in configuration file
-W, --pwprompt: this will block the script
--pwfile: it is not safe to read password from file
-A, --auth,--auth-local,--auth-host: They will be used with '--pwfile'
-c, --enpasswd: this will confuse the default password in script
with the password user specified
-Z: this has been designated internal
-U --username: use the user specified during install step
input : String
output : Number
"""
shortInvalidArgs = ("-D", "-W", "-C", "-A", "-Z", "-U", "-X", "-s")
longInvalidArgs = (
"--pgdata", "--pwprompt", "--enpasswd", "--pwfile", "--auth",
"--auth-host", "--auth-local", "--username", "--xlogdir", "--show")
argList = param.split()
for arg in shortInvalidArgs:
if (arg in argList):
return 1
argList = param.split("=")
for arg in longInvalidArgs:
if (arg in argList):
return 1
return 0
def checkParameter():
"""
"""
# check if user exist and is the right user
if (g_opts.clusterUser == ""):
GaussLog.exitWithError(ErrorCode.GAUSS_500["GAUSS_50001"] % 'U' + ".")
try:
ClusterUser.checkUser(g_opts.clusterUser, False)
except Exception as e:
GaussLog.exitWithError(str(e))
if (g_opts.logFile == ""):
g_opts.logFile = ClusterLog.getOMLogPath(ClusterConstants.LOCAL_LOG_FILE,
g_opts.clusterUser, "")
for param in g_opts.dbInitParams:
if (__checkInitdbParams(param.strip()) != 0):
GaussLog.exitWithError(ErrorCode.GAUSS_500["GAUSS_50000"] % param)
class initDbNode(LocalBaseOM):
'''
classdocs
'''
def __init__(self, logFile, user, dwsMode=False, dbInitParams=None, paxos_mode=False):
"""
function: init instance
input : logFile, user, clusterConf, dbInitParams
output: NA
"""
if dbInitParams is None:
dbInitParams = []
LocalBaseOM.__init__(self, logFile, user, "", dwsMode, dbInitParams, paxos_mode)
if self.clusterConfig == "":
# Read config from static config file
self.readConfigInfo()
else:
self.readConfigInfoByXML()
# get user info
self.getUserInfo()
if user != "" and self.user != user.strip():
self.logger.debug("User parameter : %s." % user)
self.logger.logExit(ErrorCode.GAUSS_503["GAUSS_50315"] % (
self.user, self.clusterInfo.appPath))
# init every component
self.initComponent(paxos_mode)
def initNodeInst(self, vc_mode=False):
"""
function : Init all instance on local node
input : NA
output : NA
"""
self.logger.log("Initializing instance.")
if not vc_mode:
components = self.etcdCons + self.cmCons + self.gtmCons\
+ self.cnCons + self.dnCons
else:
# just init dn instance
components = self.dnCons
try:
# config instance in paralle
parallelTool.parallelExecute(self.initInstance, components)
except Exception as e:
self.logger.logExit(str(e))
self.logger.log("Successfully init instance information.")
def initInstance(self, component):
"""
function: Check instance port and IP for per component
input : NA
output: NA
"""
component.initInstance()
if __name__ == '__main__':
##########################################################################
# init instance
##########################################################################
"""
function: init instance
1.check dbInitParams
2.init instance
3.save initdb parameters into initdbParamFile
input : NA
output: NA
"""
try:
# parse and check input parameters
parseCommandLine()
checkParameter()
# Initialize globals parameters
# add g_opts.vc_mode parameter :
# indicates whether it is a virtual cluster mode
dbInit = initDbNode(g_opts.logFile, g_opts.clusterUser,
g_opts.dws_mode, g_opts.dbInitParams, g_opts.paxos_mode)
dbInit.initNodeInst(g_opts.vc_mode)
except Exception as e:
GaussLog.exitWithError(str(e))
sys.exit(0)