mirror of https://github.com/goharbor/harbor.git
140 lines
3.5 KiB
Go
140 lines
3.5 KiB
Go
// Copyright Project Harbor Authors
|
|
//
|
|
// Licensed under the Apache License, Version 2.0 (the "License");
|
|
// you may not use this file except in compliance with the License.
|
|
// You may obtain a copy of the License at
|
|
//
|
|
// http://www.apache.org/licenses/LICENSE-2.0
|
|
//
|
|
// Unless required by applicable law or agreed to in writing, software
|
|
// distributed under the License is distributed on an "AS IS" BASIS,
|
|
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
// See the License for the specific language governing permissions and
|
|
// limitations under the License.
|
|
|
|
package config
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
|
|
"github.com/distribution/distribution/v3/configuration"
|
|
storagedriver "github.com/distribution/distribution/v3/registry/storage/driver"
|
|
"github.com/distribution/distribution/v3/registry/storage/driver/factory"
|
|
yaml "gopkg.in/yaml.v2"
|
|
|
|
"github.com/goharbor/harbor/src/lib/log"
|
|
)
|
|
|
|
// DefaultConfig ...
|
|
var DefaultConfig = &Configuration{}
|
|
|
|
// Configuration loads the configuration of registry controller.
|
|
type Configuration struct {
|
|
Protocol string `yaml:"protocol"`
|
|
Port string `yaml:"port"`
|
|
LogLevel string `yaml:"log_level"`
|
|
HTTPSConfig struct {
|
|
Cert string `yaml:"cert"`
|
|
Key string `yaml:"key"`
|
|
} `yaml:"https_config,omitempty"`
|
|
RegistryConfig string `yaml:"registry_config"`
|
|
StorageDriver storagedriver.StorageDriver `yaml:"-"`
|
|
}
|
|
|
|
// Load the configuration options from the specified yaml file.
|
|
func (c *Configuration) Load(yamlFilePath string, detectEnv bool) error {
|
|
if len(yamlFilePath) != 0 {
|
|
// Try to load from file first
|
|
data, err := os.ReadFile(yamlFilePath)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if err = yaml.Unmarshal(data, c); err != nil {
|
|
return err
|
|
}
|
|
}
|
|
|
|
if detectEnv {
|
|
c.loadEnvs()
|
|
}
|
|
|
|
if err := c.setStorageDriver(); err != nil {
|
|
log.Errorf("failed to load storage driver, err:%v", err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
// setStorageDriver set the storage driver according the registry's configuration.
|
|
func (c *Configuration) setStorageDriver() error {
|
|
fp, err := os.Open(c.RegistryConfig)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer fp.Close()
|
|
rConf, err := configuration.Parse(fp)
|
|
if err != nil {
|
|
return fmt.Errorf("error parsing registry configuration %s: %v", c.RegistryConfig, err)
|
|
}
|
|
storageDriver, err := factory.Create(context.TODO(), rConf.Storage.Type(), rConf.Storage.Parameters())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
c.StorageDriver = storageDriver
|
|
return nil
|
|
}
|
|
|
|
// GetLogLevel returns the log level
|
|
func GetLogLevel() string {
|
|
return DefaultConfig.LogLevel
|
|
}
|
|
|
|
// GetJobAuthSecret get the auth secret from the env
|
|
func GetJobAuthSecret() string {
|
|
return os.Getenv("JOBSERVICE_SECRET")
|
|
}
|
|
|
|
// GetUIAuthSecret get the auth secret of UI side
|
|
func GetUIAuthSecret() string {
|
|
return os.Getenv("CORE_SECRET")
|
|
}
|
|
|
|
// loadEnvs Load env variables
|
|
func (c *Configuration) loadEnvs() {
|
|
prot := os.Getenv("REGISTRYCTL_PROTOCOL")
|
|
if len(prot) != 0 {
|
|
c.Protocol = prot
|
|
}
|
|
|
|
p := os.Getenv("PORT")
|
|
if len(p) != 0 {
|
|
c.Port = p
|
|
}
|
|
|
|
// Only when protocol is https
|
|
if c.Protocol == "HTTPS" {
|
|
cert := os.Getenv("REGISTRYCTL_HTTPS_CERT")
|
|
if len(cert) != 0 {
|
|
c.HTTPSConfig.Cert = cert
|
|
}
|
|
|
|
certKey := os.Getenv("REGISTRYCTL_HTTPS_KEY")
|
|
if len(certKey) != 0 {
|
|
c.HTTPSConfig.Key = certKey
|
|
}
|
|
}
|
|
|
|
loggerLevel := os.Getenv("LOG_LEVEL")
|
|
if len(loggerLevel) != 0 {
|
|
c.LogLevel = loggerLevel
|
|
}
|
|
|
|
registryConf := os.Getenv("REGISTRY_CONFIG")
|
|
if len(registryConf) != 0 {
|
|
c.RegistryConfig = registryConf
|
|
}
|
|
}
|