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

support cgroup

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

174 lines
5.9 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.
#############################################################################
"""
This file is for Gauss version things.
"""
import os
import re
import subprocess
from base_diff.comm_constants import CommConstants
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.os.user_util import UserUtil
class VersionInfo(object):
"""
Info about current version
"""
def __init__(self):
pass
# package version
__PACKAGE_VERSION = ""
# OM version string
COMMON_VERSION = "Gauss200 OM VERSION"
# It will be replaced with the product version, such as "Gauss200",
# while being packaged by mpp_package.sh
PRODUCT_NAME = "__GAUSS_PRODUCT_STRING__"
PRODUCT_NAME_PACKAGE = "-".join(PRODUCT_NAME.split())
COMMITID = ""
@staticmethod
def getPackageVersion():
"""
function: Get the current version from version.cfg
input : NA
output: String
"""
if VersionInfo.__PACKAGE_VERSION != "":
return VersionInfo.__PACKAGE_VERSION
# obtain version file
version_file = VersionInfo.get_version_file()
version, _, _ = VersionInfo.get_version_info(version_file)
# the 2 value is package version
VersionInfo.__PACKAGE_VERSION = version
return VersionInfo.__PACKAGE_VERSION
@staticmethod
def getCommitid():
"""
function: Get the current commit id from version.cfg
input : NA
output: String
"""
if VersionInfo.COMMITID != "":
return VersionInfo.COMMITID
versionFile = VersionInfo.get_version_file()
_, _, commit_id = VersionInfo.get_version_info(versionFile)
# the 2 value is package version
VersionInfo.COMMITID = commit_id
return VersionInfo.COMMITID
@staticmethod
def get_version_file():
"""
function: Get version.cfg file
input : NA
output: String
"""
# obtain version file
dir_name = os.path.dirname(os.path.realpath(__file__))
version_file = os.path.join(dir_name, "./../../../", "version.cfg")
version_file = os.path.realpath(version_file)
if not os.path.exists(version_file):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50201"] % version_file)
if not os.path.isfile(version_file):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50210"] % version_file)
return version_file
@staticmethod
def get_version_info(version_file):
"""
function: the infomation of version_file format
:param version_file:
:return: version info
"""
if not os.path.exists(version_file):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50201"] % version_file)
if not os.path.isfile(version_file):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50210"] % version_file)
with open(version_file, 'r') as file_p:
ret_lines = file_p.readlines()
if len(ret_lines) < 3:
raise Exception(ErrorCode.GAUSS_502["GAUSS_50222"] % version_file)
version = re.compile(CommConstants.VERSION_PATTERN).search(
ret_lines[0].strip()).group()
number = ret_lines[1].strip()
commit_id = ret_lines[2].strip()
if version is None:
raise Exception(ErrorCode.GAUSS_502["GAUSS_50222"] %
"version.cfg" + "Does not have version "
"such as " + CommConstants.VERSION_EXAMPLE)
try:
float(number)
except Exception as excep:
raise Exception(str(excep) + ErrorCode.GAUSS_516["GAUSS_51628"]
% number)
if float(number) < CommConstants.FIRST_GREY_UPGRADE_NUM:
raise Exception(ErrorCode.GAUSS_516["GAUSS_51629"] % number)
if not (commit_id.isalnum() and len(commit_id) == 8):
raise Exception(ErrorCode.GAUSS_502["GAUSS_50222"] % version_file
+ " Commit id is wrong.")
return version, number, commit_id
@staticmethod
def getAppVersion(appPath=""):
"""
function : Get the version of application by $GAUSS_VERSION
input : String
output : String
"""
# get user and group
(user, group) = UserUtil.getPathOwner(appPath)
if user == "" or group == "":
return ""
# build shell command
# get the version of application by $GAUSS_VERSION
return EnvUtil.getEnvironmentParameterValue("GAUSS_VERSION", user)
@staticmethod
def getAppBVersion(appPath=""):
"""
function :Get the version of application by $GAUSS_VERSION
input : String
output : String
"""
# get user and group
(user, group) = UserUtil.getPathOwner(appPath)
if user == "" or group == "":
return ""
# build shell command
user_profile = EnvUtil.getMpprcFile()
execute_cmd = "gaussdb -V"
cmd = CmdUtil.getExecuteCmdWithUserProfile(user, user_profile, execute_cmd, False)
(status, output) = subprocess.getstatusoutput(cmd)
if status != 0:
return ""
return output.replace('gaussdb ', '').strip()