🐛 Load config env before paraing cli
This commit is contained in:
		
					parent
					
						
							
								85f666cbc2
							
						
					
				
			
			
				commit
				
					
						a6f3cf39a0
					
				
			
		
					 3 changed files with 37 additions and 8 deletions
				
			
		|  | @ -31,7 +31,7 @@ func Load() (Config, error) { | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| 	env.Parse(&c) | 	env.Parse(&c) | ||||||
| 	// @todo how to handle env on options so cli args aren't overwrittem? | 	c.Outputs["stdout"] = loadStdout(c.Outputs["stdout"]) | ||||||
| 
 | 
 | ||||||
| 	l := "" | 	l := "" | ||||||
| 	for k, v := range Overrides { | 	for k, v := range Overrides { | ||||||
|  | @ -55,18 +55,25 @@ func Load() (Config, error) { | ||||||
| 	return c, err | 	return c, err | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | func loadStdout(stdout Output) Output { | ||||||
|  | 	st := stdoutEnabled{stdout.Enabled} | ||||||
|  | 	env.Parse(&st) | ||||||
|  | 	stdout.Enabled = st.Enabled | ||||||
|  | 	var std Stdout | ||||||
|  | 	mapst.Decode(stdout.Config, &std) | ||||||
|  | 	env.Parse(&std) | ||||||
|  | 	mapst.Decode(std, &stdout.Config) | ||||||
|  | 	return stdout | ||||||
|  | } | ||||||
|  | 
 | ||||||
| func (oo Outputs) Stdout() (s Stdout, enabled bool) { | func (oo Outputs) Stdout() (s Stdout, enabled bool) { | ||||||
| 	o, ok := oo["stdout"] | 	o, ok := oo["stdout"] | ||||||
| 	if !ok { | 	if !ok { | ||||||
| 		return s, false | 		return s, false | ||||||
| 	} | 	} | ||||||
| 	st := struct { |  | ||||||
| 		Enabled bool `env:"LOG_STDOUT_ENABLED"` |  | ||||||
| 	}{o.Enabled} |  | ||||||
| 	env.Parse(&st) |  | ||||||
| 
 | 
 | ||||||
| 	enabled = st.Enabled | 	enabled = o.Enabled | ||||||
| 	mapst.Decode(o.Config, &s) | 	mapst.Decode(o.Config, &s) | ||||||
| 	env.Parse(&s) | 
 | ||||||
| 	return | 	return | ||||||
| } | } | ||||||
|  |  | ||||||
|  | @ -57,3 +57,21 @@ func TestOverrideJson(t *testing.T) { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| // @todo test time | // @todo test time | ||||||
|  | 
 | ||||||
|  | func TestStdoutMissing(t *testing.T) { | ||||||
|  | 	var oo Outputs = map[string]Output{} | ||||||
|  | 	std, en := oo.Stdout() | ||||||
|  | 	assert.False(t, en) | ||||||
|  | 	assert.Equal(t, Stdout{}, std) | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | func TestStdoutLoad(t *testing.T) { | ||||||
|  | 	os.Setenv("LOG_STDOUT_JSON", "true") | ||||||
|  | 	defer os.Unsetenv("LOG_STDOUT_JSON") | ||||||
|  | 	os.Setenv("LOG_STDOUT_ENABLED", "true") | ||||||
|  | 	defer os.Unsetenv("LOG_STDOUT_ENABLED") | ||||||
|  | 	c, _ := Load() | ||||||
|  | 	std, en := c.Outputs.Stdout() | ||||||
|  | 	assert.True(t, en) | ||||||
|  | 	assert.True(t, std.Json) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | @ -19,5 +19,9 @@ type Output struct { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| type Stdout struct { | type Stdout struct { | ||||||
| 	Json bool `env:"LOG_STDOUT_JSON"` | 	Json bool `env:"LOG_STDOUT_JSON" mapstructure:"json"` | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | type stdoutEnabled struct { | ||||||
|  | 	Enabled bool `env:"LOG_STDOUT_ENABLED"` | ||||||
| } | } | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue