Files
openGauss-OM/script/upgrade_checker/dev/og_controller.py
2024-08-20 11:37:55 +08:00

127 lines
4.3 KiB
Python

#!/usr/bin/env python3
# -*- coding:utf-8 -*-
#############################################################################
# Copyright (c) 2023 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_upgradechk is a utility to check meta data in gaussdb after upgrade.
#############################################################################
"""
快速安装openGauss的bz2
"""
import os
import sys
import time
sys.path.append(sys.path[0] + '/../..')
from upgrade_checker.utils.version import is_support_version
from upgrade_checker.utils.command import Shell
from upgrade_checker.utils.exception import ShellExecException
class OGController(object):
@staticmethod
def is_support_package(pkg):
# openGauss server:openGauss-Server-7.0.0-RC1-openEuler20.03-x86_64.tar.gz
parts = os.path.basename(pkg).split('-')
if len(parts) < 5 or parts[0] != 'openGauss' or parts[1] != 'Server':
return False, '非openGauss server压缩安装包:' + pkg
if not is_support_version(parts[2]):
return False, '工具不支持的OG版本:' + parts[1]
return True, ''
def __init__(self, package):
self.package = package
self.gausshome = ''
self.version = ''
self.dn = ''
self.port = ''
def _generate_env(self):
env = {
'GAUSSHOME': self.gausshome,
'PATH': '{0}/bin:{1}'.format(self.gausshome, os.getenv('PATH')),
'LD_LIBRARY_PATH': '{0}/lib:{1}'.format(self.gausshome, os.getenv('LD_LIBRARY_PATH'))
}
env_text = ''
for name, val in env.items():
os.environ[name] = val
env_text += 'export {0}={1}\n'.format(name, val)
env_file = '{0}/env.source'.format(self.gausshome)
with open(env_file, 'w') as f:
f.write(env_text)
print('生成环境变量', env_file)
return env, env_file
def install(self):
pkg_path = os.path.dirname(self.package)
pkg_name = os.path.basename(self.package)
self.version = pkg_name.split('-')[1]
self.gausshome = pkg_path + '/' + self.version
if os.access(self.gausshome, os.F_OK):
self.dn = self.gausshome + '/dn'
try:
self.stop()
except ShellExecException as e:
pass
try:
self.uninstall()
except ShellExecException as e:
pass
os.mkdir(self.gausshome, 0o700)
cmd = 'tar -jxf {0} -C {1}'.format(self.package, self.gausshome)
Shell.run(cmd, print_desc='解压安装包', check=True)
return self._generate_env()
def initdb(self):
self.dn = self.gausshome + '/dn'
cmd = "gs_initdb -D {0} -w Test@123 --nodename='sgnode' >/dev/null 2>&1 ".format(self.dn)
Shell.run(cmd, print_desc='初始化数据库', check=True)
def guc(self, setting):
cmd = 'gs_guc reload -D {0} -c "{1}" >/dev/null 2>&1'.format(self.dn, setting)
Shell.run(cmd, print_desc='设置GUC参数')
def start(self):
cmd = "gs_ctl start -D {0} >/dev/null 2>&1".format(self.dn)
Shell.run(cmd, print_desc='启动数据库', check=True)
def stop(self):
cmd = "gs_ctl stop -D {0} >/dev/null 2>&1 ".format(self.dn)
Shell.run(cmd, print_desc='关闭数据库', check=True)
def uninstall(self):
cmd = "rm {0} {1} -fr".format(self.dn, self.gausshome)
Shell.run(cmd, print_desc='卸载数据库', check=True)
if __name__ == "__main__":
og = OGController('/data/pkg/openGauss-Server-7.0.0-RC1-openEuler20.03-x86_64.tar.bz2')
og.install()
og.initdb()
og.start(16666)