Files
kubesphere/vendor/openpitrix.io/openpitrix/pkg/config/config.go
2020-06-10 21:28:07 +08:00

114 lines
2.6 KiB
Go

// Copyright 2018 The OpenPitrix Authors. All rights reserved.
// Use of this source code is governed by a Apache license
// that can be found in the LICENSE file.
package config
import (
"flag"
"fmt"
"os"
"time"
"github.com/koding/multiconfig"
"openpitrix.io/openpitrix/pkg/logger"
)
type Config struct {
Log LogConfig
Grpc GrpcConfig
Mysql MysqlConfig
Etcd EtcdConfig
IAM IAMConfig
Attachment AttachmentConfig
DisableGops bool `default:"false"`
}
type IAMConfig struct {
SecretKey string `default:"OpenPitrix-lC4LipAXPYsuqw5F"`
ExpireTime time.Duration `default:"2h"`
RefreshTokenExpireTime time.Duration `default:"336h"` // default is 2 week
}
type AttachmentConfig struct {
AccessKey string `default:"openpitrixminioaccesskey"`
SecretKey string `default:"openpitrixminiosecretkey"`
Endpoint string `default:"http://openpitrix-minio:9000"`
BucketName string `default:"openpitrix-attachment"`
}
type LogConfig struct {
Level string `default:"info"` // debug, info, warn, error, fatal
}
type GrpcConfig struct {
ShowErrorCause bool `default:"false"` // show grpc error cause to frontend
}
type EtcdConfig struct {
Endpoints string `default:"openpitrix-etcd:2379"` // Example: "localhost:2379,localhost:22379,localhost:32379"
}
type MysqlConfig struct {
Host string `default:"openpitrix-db"`
Port string `default:"3306"`
User string `default:"root"`
Password string `default:"password"`
Database string `default:"openpitrix"`
Disable bool `default:"false"`
}
func (m *MysqlConfig) GetUrl() string {
return fmt.Sprintf("%s:%s@tcp(%s:%s)/%s", m.User, m.Password, m.Host, m.Port, m.Database)
}
func PrintUsage() {
fmt.Fprintf(os.Stdout, "Usage of %s:\n", os.Args[0])
flag.PrintDefaults()
fmt.Fprint(os.Stdout, "\nSupported environment variables:\n")
e := newLoader("openpitrix")
e.PrintEnvs(new(Config))
fmt.Println("")
}
func GetFlagSet() *flag.FlagSet {
flag.CommandLine.Usage = PrintUsage
return flag.CommandLine
}
func ParseFlag() {
GetFlagSet().Parse(os.Args[1:])
}
var conf Config
func loadConf() *Config {
config := new(Config)
m := &multiconfig.DefaultLoader{}
m.Loader = multiconfig.MultiLoader(newLoader("openpitrix"))
m.Validator = multiconfig.MultiValidator(
&multiconfig.RequiredValidator{},
)
err := m.Load(config)
if err != nil {
logger.Critical(nil, "Failed to load config: %+v", err)
panic(err)
}
logger.SetLevelByString(config.Log.Level)
logger.Debug(nil, "GetConf: %+v", config)
return config
}
func init() {
conf = *loadConf()
}
func GetConf() *Config {
ParseFlag()
var c = new(Config)
*c = conf
return c
}