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

support cgroup

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

160 lines
5.4 KiB
Python

# -*- 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 : cluster_dir.py is a utility for handling cluster dir.
#############################################################################
import os
import pwd
import subprocess
from gspylib.common.ErrorCode import ErrorCode
from base_utils.os.cmd_util import CmdUtil
from base_utils.os.env_util import EnvUtil
from base_utils.security.security_checker import SecurityChecker
from domain_utils.cluster_file.cluster_config_file import ClusterConfigFile
from domain_utils.domain_common.cluster_constants import ClusterConstants
class ClusterDir:
@staticmethod
def getInstallDir(user):
"""
function : Get the installation directory for user
input : NA
output : String
"""
# get the installation directory for user by $GAUSSHOME
return EnvUtil.getEnvironmentParameterValue("GAUSSHOME", user)
@staticmethod
def getLogDirFromEnv(user):
"""
function : Get the GAUSSLOG directory for user
input : NA
output : String
"""
# get the GAUSSLOG for user
return EnvUtil.getEnvironmentParameterValue("GAUSSLOG", user)
@staticmethod
def getClusterToolPath(user=""):
"""
function : Get the value of cluster's tool path. The value can't be None or null
input : NA
output : String
"""
mpprc_file = EnvUtil.getEnv(EnvUtil.MPPRC_FILE_ENV)
echo_env_cmd = "echo $%s" % ClusterConstants.TOOL_PATH_ENV
if not mpprc_file:
if user != "":
userpath = pwd.getpwnam(user).pw_dir
mpprc_file = os.path.join(userpath, ".bashrc")
else:
mpprc_file = ClusterConstants.BASHRC
cmd = CmdUtil.getExecuteCmdWithUserProfile(user, mpprc_file, echo_env_cmd)
(status, output) = subprocess.getstatusoutput(cmd)
if status != 0:
raise Exception(ErrorCode.GAUSS_518["GAUSS_51802"] % ClusterConstants.TOOL_PATH_ENV
+ " Error: \n%s" % output)
cluster_tool_path = output.split("\n")[0]
if not cluster_tool_path:
raise Exception(ErrorCode.GAUSS_518["GAUSS_51800"] % ClusterConstants.TOOL_PATH_ENV
+ "Value: %s." % cluster_tool_path)
#Check if the path contains illegal characters
SecurityChecker.check_injection_char(cluster_tool_path)
return cluster_tool_path
@staticmethod
def getPreClusterToolPath(xml):
"""
function: get the cluster tool path
input : NA
output: NA
"""
try:
configed_tool_path = ClusterConfigFile.getOneClusterConfigItem("gaussdbToolPath",
xml)
if configed_tool_path == "":
configed_tool_path = ClusterConstants.CLUSTER_TOOL_PATH
SecurityChecker.check_injection_char(configed_tool_path)
return configed_tool_path
except Exception as exception:
raise Exception(str(exception))
@staticmethod
def getUserLogDirWithUser(user):
"""
function : Get the log directory from user
input : String
output : String
"""
try:
return EnvUtil.getEnvironmentParameterValue("GAUSSLOG", user)
except Exception:
return "%s/%s" % (ClusterConstants.GAUSSDB_DIR, user)
@staticmethod
def getBackupDir(subDir="", user=""):
"""
function : Get the cluster's default backup directory for upgrade
input : String
output : String
"""
bak_dir = "%s/backup" % ClusterDir.getClusterToolPath(user)
if subDir != "":
bak_dir = os.path.join(bak_dir, subDir)
return bak_dir
@staticmethod
def get_pg_host():
"""
get_pg_host
"""
pg_host = os.environ.get("PGHOST")
if not pg_host:
_, pg_host = ClusterDir.get_env("PGHOST")
return pg_host
SecurityChecker.check_injection_char(pg_host)
return pg_host
@staticmethod
def get_gauss_home():
"""
get_gauss_home
"""
gauss_home = os.environ.get("GAUSSHOME")
if not gauss_home:
_, gauss_home = ClusterDir.get_env("GAUSSHOME")
return gauss_home
SecurityChecker.check_injection_char(gauss_home)
return gauss_home
@staticmethod
def get_env(env_param):
user = pwd.getpwuid(os.getuid()).pw_name
cmd = "source %s; echo $%s" % (ClusterConstants.HOME_USER_BASHRC % user, env_param)
status, result = CmdUtil.exec_by_popen(cmd)
SecurityChecker.check_injection_char(result)
return status, result