Files
openGauss-OM/script/upgrade_checker/dev/standard_vmap_gen.py
2023-06-01 14:57:15 +08:00

127 lines
4.4 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.
#############################################################################
"""
批量生成基准校验地图
用法:
1、下载openGauss bz2安装包,保存至任意位置,可放多个包。
- 举例 /data/pkg/openGauss-5.0.0-openEuler-64bit.tar.gz
/data/pkg/openGauss-5.1.0-openEuler-64bit.tar.gz
2、执行本脚本: python StandardVmapGen.py path port [ no-clean ]
- path: 安装包所在路径:/data/pkg
- port: 为提供临时安装运行openGauss所用,如 16666
- no-clean: 不清理临时安装环境,此时port会+5以间隔
基准vmap会自动生成到安装包所在路径。
"""
import os
import sys
import time
sys.path.append(sys.path[0] + '/../..')
from upgrade_checker.utils.version import UPGRADE_CHECKER_VERSION
from upgrade_checker.utils.param import Param
from upgrade_checker.project import ExportProj
from upgrade_checker.rules.vmap import VerifyMap
from upgrade_checker.dev.og_controller import OGController
class FakeParam(Param):
"""
运行一个导出操作所需要的参数
"""
def __init__(self, port):
fake_root = sys.path[0] + '/..'
super(FakeParam, self).__init__(fake_root, ['', 'export', '-p', str(port)])
class FakeExportProj(ExportProj):
"""
导出工程,将导出位置、文件名称进行修改,改成我们想要的位置和名称格式
"""
def __init__(self, port, og_version, export_dir):
super(FakeExportProj, self).__init__(FakeParam(port))
self.export_dir = export_dir
standard_vmap_name = VerifyMap.standard_name(UPGRADE_CHECKER_VERSION, og_version)
self.vmap = '{0}/{1}'.format(self.export_dir, standard_vmap_name)
class VmapGen(object):
"""
Vmap生成器。批量安装openGauss包,并生成vmap
"""
def __init__(self, package_path, port, clean):
"""
:param package_path: 存放了openGauss bz2安装包的路径
:param port: 用于临时安装运行openGauss的端口
:param clean: 清理临时安装环境
"""
self.package_path = package_path
self.port = port
self.clean = clean
def run(self):
files = os.listdir(self.package_path)
vmaps = []
for f in files:
pkg = self.package_path + '/' + f
support, msg = OGController.is_support_package(pkg)
if not support:
print('\n[跳过文件或文件夹]:', msg)
continue
print('\n[开始执行第{}个任务]'.format(len(vmaps) + 1))
og = OGController(pkg)
og.install()
og.initdb()
og.guc('port = {0}'.format(self.port))
og.guc('enable_wdr_snapshot = on')
og.start()
time.sleep(2)
proj = FakeExportProj(self.port, og.version, self.package_path)
proj.init()
proj.run()
vmap = proj.close()
vmaps.append(vmap)
if self.clean:
og.stop()
og.uninstall()
else:
self.port += 5
print('{0}个任务执行完成,输出vmap: {1}'.format(len(vmaps), vmap))
print('\n批量共生成{0}个vmap'.format(len(vmaps)))
print('\n'.join(vmaps))
if __name__ == '__main__':
argv_pkg_path = sys.argv[1]
argv_port = int(sys.argv[2])
argv_clean = False if len(sys.argv) > 3 and sys.argv[3].lower() == 'no-clean' else True
VmapGen(argv_pkg_path, argv_port, argv_clean).run()