mirror of
https://github.com/goharbor/harbor.git
synced 2024-09-12 05:58:23 +02:00
76 lines
2.3 KiB
Python
76 lines
2.3 KiB
Python
#!/usr/bin/env python
|
|
# -*- coding: utf-8 -*-
|
|
import sys
|
|
import os
|
|
import yaml
|
|
from string import Template
|
|
|
|
if sys.version_info[:3][0] == 2:
|
|
import ConfigParser as ConfigParser
|
|
import StringIO as StringIO
|
|
|
|
if sys.version_info[:3][0] == 3:
|
|
import configparser as ConfigParser
|
|
import io as StringIO
|
|
|
|
def read_conf(path):
|
|
with open(path) as f:
|
|
try:
|
|
d = yaml.safe_load(f)
|
|
except yaml.error.YAMLError:
|
|
f.seek(0)
|
|
temp_section = "configuration"
|
|
conf = StringIO.StringIO()
|
|
conf.write("[%s]\n" % temp_section)
|
|
conf.write(f.read())
|
|
conf.seek(0, os.SEEK_SET)
|
|
rcp = ConfigParser.RawConfigParser()
|
|
rcp.readfp(conf)
|
|
d = {}
|
|
for op in rcp.options(temp_section):
|
|
d[op] = rcp.get(temp_section, op)
|
|
else:
|
|
if "_version" not in d:
|
|
raise Exception("Bad format configuration file: %s" % path)
|
|
return d
|
|
|
|
def get_conf_version(path):
|
|
d = read_conf(path)
|
|
# print json.dumps(d,indent=4)
|
|
if "_version" in d: # >=1.5.0
|
|
return d["_version"]
|
|
if not "clair_db_password" in d:
|
|
return "unsupported"
|
|
if "registry_storage_provider_name" in d:
|
|
return "1.4.0"
|
|
if "uaa_endpoint" in d:
|
|
return "1.3.0"
|
|
return "1.2.0"
|
|
|
|
def render(src, dest, **kw):
|
|
t = Template(open(src, 'r').read())
|
|
with open(dest, 'w') as f:
|
|
f.write(t.substitute(**kw))
|
|
|
|
def get_storage_provider_info(provider_name, provider_config):
|
|
provider_config = provider_config.strip('" ')
|
|
if not provider_config.strip(" "):
|
|
return ''
|
|
|
|
storage_provider_cfg_map = {}
|
|
for k_v in provider_config.split(","):
|
|
if k_v > 0:
|
|
kvs = k_v.split(": ") # add space suffix to avoid existing ":" in the value
|
|
if len(kvs) == 2:
|
|
#key must not be empty
|
|
if kvs[0].strip() != "":
|
|
storage_provider_cfg_map[kvs[0].strip()] = kvs[1].strip()
|
|
|
|
# generate storage configuration section in yaml format
|
|
|
|
storage_provider_conf_list = [provider_name + ':']
|
|
for config in storage_provider_cfg_map.items():
|
|
storage_provider_conf_list.append('{}: {}'.format(*config))
|
|
storage_provider_info = ('\n' + ' ' * 4).join(storage_provider_conf_list)
|
|
return storage_provider_info
|