mirror of
https://github.com/goharbor/harbor.git
synced 2024-11-17 15:55:26 +01:00
Merge pull request #7738 from reasonerjt/cfg-yml-migrator
Require output path for harbor.cfg->harbor.yml migration
This commit is contained in:
commit
4b6e2946c3
@ -19,16 +19,20 @@ def main():
|
||||
parser.add_argument('--output','-o', action="store", dest='output_path', required=False, help='The path of the migrated harbor.cfg, if not set the input file will be overwritten')
|
||||
parser.add_argument('--target', action="store", dest='target_version', help='The target version that the harbor.cfg will be migrated to.')
|
||||
args = parser.parse_args()
|
||||
if args.output_path is None:
|
||||
args.output_path = args.input_path
|
||||
if args.target_version is not None:
|
||||
target_version = args.target_version
|
||||
input_version = utils.get_conf_version(args.input_path)
|
||||
curr_dir = os.path.dirname(__file__)
|
||||
chain = []
|
||||
if input_version == target_version:
|
||||
print ("Version of input harbor.cfg is identical to target %s, no need to upgrade" % input_version)
|
||||
sys.exit(0)
|
||||
if args.output_path is None:
|
||||
if float(input_version[:input_version.rfind('.')]) < 1.8 and \
|
||||
float(target_version[:target_version.rfind('.')]) >= 1.8:
|
||||
print("Migrating config file from < 1.8.0 to >= 1.8.0, the output path cannot be empty")
|
||||
sys.exit(1)
|
||||
args.output_path = args.input_path
|
||||
chain = []
|
||||
if not search(curr_dir, input_version, target_version, chain):
|
||||
print ("No migrator for version: %s" % input_version)
|
||||
sys.exit(1)
|
||||
@ -36,7 +40,6 @@ def main():
|
||||
print ("input version: %s, migrator chain: %s" % (input_version, chain))
|
||||
curr_input_path = args.input_path
|
||||
for c in chain:
|
||||
#TODO: more real-world testing needed for chained-migration.
|
||||
m = importlib.import_module(to_module_path(c))
|
||||
curr_output_path = "harbor.cfg.%s.tmp" % c
|
||||
print("migrating to version %s" % c)
|
||||
|
@ -1,6 +1,3 @@
|
||||
import abc
|
||||
import subprocess
|
||||
from optparse import OptionParser
|
||||
from shutil import copyfile
|
||||
import os
|
||||
import sys
|
||||
@ -60,15 +57,38 @@ class DBMigrator():
|
||||
class CfgMigrator():
|
||||
|
||||
def __init__(self, target, output):
|
||||
cfg_dir = "/harbor-migration/harbor-cfg"
|
||||
cfg_out_dir = "/harbor-migration/harbor-cfg-out"
|
||||
|
||||
self.target = target
|
||||
self.output = output
|
||||
self.cfg_path = "/harbor-migration/harbor-cfg/harbor.cfg"
|
||||
self.cfg_path = self.__config_filepath(cfg_dir)
|
||||
if not self.cfg_path:
|
||||
self.cfg_path = os.path.join(cfg_dir, "harbor.cfg")
|
||||
|
||||
if output:
|
||||
self.output = output
|
||||
elif self.__config_filepath(cfg_out_dir):
|
||||
self.output = self.__config_filepath(cfg_out_dir)
|
||||
elif os.path.isdir(cfg_out_dir):
|
||||
self.output = os.path.join(cfg_out_dir, os.path.basename(self.cfg_path))
|
||||
else:
|
||||
self.output = ""
|
||||
|
||||
self.backup_path = "/harbor-migration/backup"
|
||||
self.output_path = "/harbor-migration/output"
|
||||
self.restore_src = self.__config_filepath(self.backup_path)
|
||||
self.restore_tgt = os.path.join(os.path.dirname(self.cfg_path), os.path.basename(self.restore_src))
|
||||
|
||||
@staticmethod
|
||||
def __config_filepath(d):
|
||||
if os.path.isfile(os.path.join(d, "harbor.yml")):
|
||||
return os.path.join(d, "harbor.yml")
|
||||
elif os.path.isfile(os.path.join(d, "harbor.cfg")):
|
||||
return os.path.join(d, "harbor.cfg")
|
||||
return ""
|
||||
|
||||
def backup(self):
|
||||
try:
|
||||
copyfile(self.cfg_path, self.backup_path+"/harbor.cfg")
|
||||
copyfile(self.cfg_path, os.path.join(self.backup_path, os.path.basename(self.cfg_path)))
|
||||
print ("Success to backup harbor.cfg.")
|
||||
return True
|
||||
except Exception as e:
|
||||
@ -76,11 +96,12 @@ class CfgMigrator():
|
||||
return False
|
||||
|
||||
def restore(self):
|
||||
if not os.path.exists(self.backup_path+"/harbor.cfg"):
|
||||
print ("Unable to restore as there is no harbor.cfg")
|
||||
if not self.restore_src:
|
||||
print("unable to locate harbor config file in directory: %s" % self.backup_path)
|
||||
return False
|
||||
|
||||
try:
|
||||
copyfile(self.backup_path+"/harbor.cfg", self.cfg_path)
|
||||
copyfile(self.restore_src, self.restore_tgt)
|
||||
print ("Success to restore harbor.cfg.")
|
||||
return True
|
||||
except Exception as e:
|
||||
@ -92,21 +113,23 @@ class CfgMigrator():
|
||||
print ("Skip cfg up as no harbor.cfg in the path.")
|
||||
return True
|
||||
|
||||
if self.output and os.path.isdir(self.output_path):
|
||||
cmd = "python ./cfg/run.py --input " + self.cfg_path + " --output " + self.output_path + "/harbor.cfg"
|
||||
if self.output and os.path.isdir(self.output):
|
||||
cmd = "python ./cfg/run.py --input " + self.cfg_path + " --output " + os.path.join(self.output, os.path.basename(self.cfg_path))
|
||||
elif self.output and os.path.isfile(self.output):
|
||||
cmd = "python ./cfg/run.py --input " + self.cfg_path + " --output " + self.output
|
||||
else:
|
||||
print ("The path of the migrated harbor.cfg is not set, the input file will be overwritten.")
|
||||
cmd = "python ./cfg/run.py --input " + self.cfg_path
|
||||
|
||||
if self.target != '':
|
||||
cmd = cmd + " --target " + self.target
|
||||
print("Command for config file migration: %s" % cmd)
|
||||
return run_cmd(cmd) == 0
|
||||
|
||||
def validate(self):
|
||||
if not os.path.exists(self.cfg_path):
|
||||
print ("Unable to loacte the harbor.cfg, please check.")
|
||||
print ("Unable to locate the input harbor configuration file: %s, please check." % self.cfg_path)
|
||||
return False
|
||||
print ("Success to validate harbor.cfg.")
|
||||
return True
|
||||
|
||||
class Parameters(object):
|
||||
|
Loading…
Reference in New Issue
Block a user