Add ApplyEnvVars() to ComponentConfig interface
* cluster and restapi configs can also get values from environment variables * other config components don't read any values from the environment License: MIT Signed-off-by: Robert Ignat <robert.ignat91@gmail.com>
This commit is contained in:
parent
fcea4f41cf
commit
ed30ac1ab4
|
@ -154,6 +154,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have sensible values,
|
||||
// at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
|
@ -181,6 +181,19 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
jcfg := &jsonConfig{}
|
||||
|
||||
err := envconfig.Process(envConfigKey, jcfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return cfg.applyJSONConfig(jcfg)
|
||||
}
|
||||
|
||||
// Validate makes sure that all fields in this Config have
|
||||
// working values, at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
@ -236,7 +249,11 @@ func (cfg *Config) LoadJSON(raw []byte) error {
|
|||
return err
|
||||
}
|
||||
|
||||
err = cfg.loadHTTPOptions(jcfg)
|
||||
return cfg.applyJSONConfig(jcfg)
|
||||
}
|
||||
|
||||
func (cfg *Config) applyJSONConfig(jcfg *jsonConfig) error {
|
||||
err := cfg.loadHTTPOptions(jcfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
@ -186,6 +186,19 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
jcfg := &configJSON{}
|
||||
|
||||
err := envconfig.Process(cfg.ConfigKey(), jcfg)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
return cfg.applyConfigJSON(jcfg)
|
||||
}
|
||||
|
||||
// Validate will check that the values of this config
|
||||
// seem to be working ones.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
@ -311,6 +324,10 @@ for more information.`)
|
|||
return err
|
||||
}
|
||||
|
||||
return cfg.applyConfigJSON(jcfg)
|
||||
}
|
||||
|
||||
func (cfg *Config) applyConfigJSON(jcfg *configJSON) error {
|
||||
parseDuration := func(txt string) time.Duration {
|
||||
d, _ := time.ParseDuration(txt)
|
||||
if txt != "" && d == 0 {
|
||||
|
|
|
@ -240,6 +240,9 @@ configuration.
|
|||
err := cfgMgr.Default()
|
||||
checkErr("generating default configuration", err)
|
||||
|
||||
err = cfgMgr.ApplyEnvVars()
|
||||
checkErr("applying environment variables to configuration", err)
|
||||
|
||||
// Set user secret
|
||||
if userSecretDefined {
|
||||
cfgs.clusterCfg.Secret = userSecret
|
||||
|
@ -501,18 +504,14 @@ func setupDebug() {
|
|||
}
|
||||
|
||||
func userProvidedSecret(enterSecret bool) ([]byte, bool) {
|
||||
var secret string
|
||||
if enterSecret {
|
||||
secret = promptUser("Enter cluster secret (32-byte hex string): ")
|
||||
} else if envSecret, envSecretDefined := os.LookupEnv("CLUSTER_SECRET"); envSecretDefined {
|
||||
secret = envSecret
|
||||
} else {
|
||||
return nil, false
|
||||
secret := promptUser("Enter cluster secret (32-byte hex string): ")
|
||||
decodedSecret, err := ipfscluster.DecodeClusterSecret(secret)
|
||||
checkErr("parsing user-provided secret", err)
|
||||
return decodedSecret, true
|
||||
}
|
||||
|
||||
decodedSecret, err := ipfscluster.DecodeClusterSecret(secret)
|
||||
checkErr("parsing user-provided secret", err)
|
||||
return decodedSecret, true
|
||||
return nil, false
|
||||
}
|
||||
|
||||
func promptUser(msg string) string {
|
||||
|
|
|
@ -34,6 +34,8 @@ type ComponentConfig interface {
|
|||
ToJSON() ([]byte, error)
|
||||
// Sets default working values
|
||||
Default() error
|
||||
// Sets values from environment variables
|
||||
ApplyEnvVars() error
|
||||
// Allows this component to work under a subfolder
|
||||
SetBaseDir(string)
|
||||
// Checks that the configuration is valid
|
||||
|
@ -225,6 +227,30 @@ func (cfg *Manager) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars overrides configuration fields with any values found
|
||||
// in environment variables.
|
||||
func (cfg *Manager) ApplyEnvVars() error {
|
||||
for _, section := range cfg.sections {
|
||||
for k, compcfg := range section {
|
||||
logger.Debugf("applying environment variables conf for %s", k)
|
||||
err := compcfg.ApplyEnvVars()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if cfg.clusterConfig != nil {
|
||||
logger.Debugf("applying environment variables conf for cluster")
|
||||
err := cfg.clusterConfig.ApplyEnvVars()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// RegisterComponent lets the Manager load and save component configurations
|
||||
func (cfg *Manager) RegisterComponent(t SectionType, ccfg ComponentConfig) {
|
||||
cfg.wg.Add(1)
|
||||
|
|
|
@ -272,6 +272,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// GetDataFolder returns the Raft data folder that we are using.
|
||||
func (cfg *Config) GetDataFolder() string {
|
||||
if cfg.DataFolder == "" {
|
||||
|
|
|
@ -53,6 +53,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have working values,
|
||||
// at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
|
@ -38,6 +38,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this configuration have
|
||||
// sensible values.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
|
@ -89,6 +89,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have sensible values,
|
||||
// at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
|
@ -37,6 +37,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have working values,
|
||||
// at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
|
@ -37,6 +37,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have working values,
|
||||
// at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
|
@ -58,6 +58,13 @@ func (cfg *MetricsConfig) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *MetricsConfig) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have working values,
|
||||
// at least in appearance.
|
||||
func (cfg *MetricsConfig) Validate() error {
|
||||
|
@ -159,6 +166,13 @@ func (cfg *TracingConfig) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *TracingConfig) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have working values,
|
||||
// at least in appearance.
|
||||
func (cfg *TracingConfig) Validate() error {
|
||||
|
|
|
@ -44,6 +44,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have working values,
|
||||
// at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
|
@ -44,6 +44,13 @@ func (cfg *Config) Default() error {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ApplyEnvVars fills in any Config fields found
|
||||
// as environment variables.
|
||||
func (cfg *Config) ApplyEnvVars() error {
|
||||
// doesn't read any config from env
|
||||
return nil
|
||||
}
|
||||
|
||||
// Validate checks that the fields of this Config have working values,
|
||||
// at least in appearance.
|
||||
func (cfg *Config) Validate() error {
|
||||
|
|
Loading…
Reference in New Issue
Block a user