diff options
author | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2023-07-16 10:42:13 +0200 |
---|---|---|
committer | Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com> | 2023-07-16 18:08:23 +0200 |
commit | c406fd3a0e0efa17f69095ca6317ba1036fc8964 (patch) | |
tree | 1041f90b035a4918dec3d458eb551dcb93990694 /config | |
parent | 286821e360e13b3a174854914c9cedd437bdd25e (diff) |
Fix setting config from env with complex (e.g. YAML) strings
So you can do
```
HUGO_OUTPUTS="home: [rss]" hugo
```
And similar.
Fixes #11249
Diffstat (limited to 'config')
-rw-r--r-- | config/allconfig/alldecoders.go | 2 | ||||
-rw-r--r-- | config/allconfig/load.go | 16 |
2 files changed, 13 insertions, 5 deletions
diff --git a/config/allconfig/alldecoders.go b/config/allconfig/alldecoders.go index a40a02372..6b8a4568c 100644 --- a/config/allconfig/alldecoders.go +++ b/config/allconfig/alldecoders.go @@ -150,7 +150,7 @@ var allDecoderSetups = map[string]decodeWeight{ key: "outputs", decode: func(d decodeWeight, p decodeConfig) error { defaults := createDefaultOutputFormats(p.c.OutputFormats.Config) - m := p.p.GetStringMap("outputs") + m := maps.CleanConfigStringMap(p.p.GetStringMap("outputs")) p.c.Outputs = make(map[string][]string) for k, v := range m { s := types.ToStringSlicePreserveString(v) diff --git a/config/allconfig/load.go b/config/allconfig/load.go index b9bb38aaf..8551039a0 100644 --- a/config/allconfig/load.go +++ b/config/allconfig/load.go @@ -293,11 +293,19 @@ func (l configLoader) applyOsEnvOverrides(environ []string) error { } else { l.cfg.Set(env.Key, val) } - } else if nestedKey != "" { - owner[nestedKey] = env.Value } else { - // The container does not exist yet. - l.cfg.Set(strings.ReplaceAll(env.Key, delim, "."), env.Value) + if nestedKey != "" { + owner[nestedKey] = env.Value + } else { + var val any = env.Value + if _, ok := allDecoderSetups[env.Key]; ok { + // A map. + val, err = metadecoders.Default.UnmarshalStringTo(env.Value, map[string]interface{}{}) + } + if err == nil { + l.cfg.Set(strings.ReplaceAll(env.Key, delim, "."), val) + } + } } } |