summaryrefslogtreecommitdiff
path: root/internal/config
diff options
context:
space:
mode:
Diffstat (limited to 'internal/config')
-rw-r--r--internal/config/global.go6
-rw-r--r--internal/config/state.go48
2 files changed, 35 insertions, 19 deletions
diff --git a/internal/config/global.go b/internal/config/global.go
index 4bc5ac3d2..57af89d05 100644
--- a/internal/config/global.go
+++ b/internal/config/global.go
@@ -52,3 +52,9 @@ func LoadEarlyFlags(cmd *cobra.Command) error {
func BindFlags(cmd *cobra.Command) error {
return global.BindFlags(cmd)
}
+
+// Reset will totally clear global
+// ConfigState{}, loading defaults.
+func Reset() {
+ global.Reset()
+}
diff --git a/internal/config/state.go b/internal/config/state.go
index c55f7b2ec..d01e853a5 100644
--- a/internal/config/state.go
+++ b/internal/config/state.go
@@ -37,25 +37,9 @@ type ConfigState struct { //nolint
// NewState returns a new initialized ConfigState instance.
func NewState() *ConfigState {
- viper := viper.New()
-
- // Flag 'some-flag-name' becomes env var 'GTS_SOME_FLAG_NAME'
- viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
- viper.SetEnvPrefix("gts")
-
- // Load appropriate named vals from env
- viper.AutomaticEnv()
-
- // Create new ConfigState with defaults
- state := &ConfigState{
- viper: viper,
- config: Defaults,
- }
-
- // Perform initial load into viper
- state.reloadToViper()
-
- return state
+ st := new(ConfigState)
+ st.Reset()
+ return st
}
// Config provides safe access to the ConfigState's contained Configuration,
@@ -116,6 +100,32 @@ func (st *ConfigState) Reload() (err error) {
return
}
+// Reset will totally clear
+// ConfigState{}, loading defaults.
+func (st *ConfigState) Reset() {
+ // Do within lock.
+ st.mutex.Lock()
+ defer st.mutex.Unlock()
+
+ // Create new viper.
+ viper := viper.New()
+
+ // Flag 'some-flag-name' becomes env var 'GTS_SOME_FLAG_NAME'
+ viper.SetEnvKeyReplacer(strings.NewReplacer("-", "_"))
+ viper.SetEnvPrefix("gts")
+
+ // Load appropriate
+ // named vals from env.
+ viper.AutomaticEnv()
+
+ // Reset variables.
+ st.viper = viper
+ st.config = Defaults
+
+ // Load into viper.
+ st.reloadToViper()
+}
+
// reloadToViper will reload Configuration{} values into viper.
func (st *ConfigState) reloadToViper() {
raw, err := st.config.MarshalMap()