Expand env vars in Values/StringValues [#34]
This commit is contained in:
20
internal/env/config.go
vendored
20
internal/env/config.go
vendored
@@ -93,11 +93,31 @@ func NewConfig(stdout, stderr io.Writer) (*Config, error) {
|
||||
cfg.logDebug()
|
||||
}
|
||||
|
||||
cfg.loadValuesSecrets()
|
||||
|
||||
cfg.deprecationWarn()
|
||||
|
||||
return &cfg, nil
|
||||
}
|
||||
|
||||
func (cfg *Config) loadValuesSecrets() {
|
||||
findVar := regexp.MustCompile(`\$\{?(\w+)\}?`)
|
||||
|
||||
replacer := func(varName string) string {
|
||||
sigils := regexp.MustCompile(`[${}]`)
|
||||
varName = sigils.ReplaceAllString(varName, "")
|
||||
|
||||
if value, ok := os.LookupEnv(varName); ok {
|
||||
return value
|
||||
}
|
||||
|
||||
return ""
|
||||
}
|
||||
|
||||
cfg.Values = findVar.ReplaceAllStringFunc(cfg.Values, replacer)
|
||||
cfg.StringValues = findVar.ReplaceAllStringFunc(cfg.StringValues, replacer)
|
||||
}
|
||||
|
||||
func (cfg Config) logDebug() {
|
||||
if cfg.KubeToken != "" {
|
||||
cfg.KubeToken = "(redacted)"
|
||||
|
||||
15
internal/env/config_test.go
vendored
15
internal/env/config_test.go
vendored
@@ -183,6 +183,21 @@ func (suite *ConfigTestSuite) TestLogDebugCensorsKubeToken() {
|
||||
suite.Equal(kubeToken, cfg.KubeToken) // The actual config value should be left unchanged
|
||||
}
|
||||
|
||||
func (suite *ConfigTestSuite) TestNewConfigWithValuesSecrets() {
|
||||
suite.unsetenv("VALUES")
|
||||
suite.unsetenv("STRING_VALUES")
|
||||
suite.setenv("SECRET_FIRE", "Eru_Ilúvatar")
|
||||
suite.setenv("SECRET_RINGS", "1")
|
||||
suite.setenv("PLUGIN_VALUES", "fire=$SECRET_FIRE,water=${SECRET_WATER}")
|
||||
suite.setenv("PLUGIN_STRING_VALUES", "rings=${SECRET_RINGS}")
|
||||
|
||||
cfg, err := NewConfig(&strings.Builder{}, &strings.Builder{})
|
||||
suite.Require().NoError(err)
|
||||
|
||||
suite.Equal("fire=Eru_Ilúvatar,water=", cfg.Values)
|
||||
suite.Equal("rings=1", cfg.StringValues)
|
||||
}
|
||||
|
||||
func (suite *ConfigTestSuite) setenv(key, val string) {
|
||||
orig, ok := os.LookupEnv(key)
|
||||
if ok {
|
||||
|
||||
Reference in New Issue
Block a user