127 lines
4.4 KiB
Python
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()
|
|
|