mirror of
https://github.com/helmfile/helmfile.git
synced 2026-10-03 17:47:36 +02:00
* feat: specify env values from the parent to the nested state
Adds the `helmfiles[].environment.values` that accepts a mix of file pathes and inline dictes:
```yaml
helmfiles:
- path: path/to/nested/helmfile.yaml
environment:
values:
- key1: val1
- values.yaml
```
The values files are loaded in the context of the parent state file. For example, in case the above state file is located at `/path/to/helmfile.yaml`,
`values.yaml` is located at `/path/to/values.yaml` instead of `/path/to/nested/values.yaml`.
Resolves #523
* fix: multiple "bases" declarations yields duplicate releases
Fixes #615
* fix regression in double-rendering with env value overrides
The latest commit broke any state files like the below to NOT pass env value overrides at all:
```
helmfiles:
- path: nested/state.yaml
environment:
values:
- overrides.yaml
```
This fixes the issue.
46 lines
815 B
Go
46 lines
815 B
Go
package environment
|
|
|
|
import (
|
|
"encoding/json"
|
|
"github.com/imdario/mergo"
|
|
)
|
|
|
|
type Environment struct {
|
|
Name string
|
|
Values map[string]interface{}
|
|
}
|
|
|
|
var EmptyEnvironment Environment
|
|
|
|
func (e Environment) DeepCopy() Environment {
|
|
bytes, err := json.Marshal(e.Values)
|
|
if err != nil {
|
|
panic(err)
|
|
}
|
|
var values map[string]interface{}
|
|
if err := json.Unmarshal(bytes, &values); err != nil {
|
|
panic(err)
|
|
}
|
|
return Environment{
|
|
Name: e.Name,
|
|
Values: values,
|
|
}
|
|
}
|
|
|
|
func (e *Environment) Merge(other *Environment) (*Environment, error) {
|
|
if e == nil {
|
|
if other != nil {
|
|
copy := other.DeepCopy()
|
|
return ©, nil
|
|
}
|
|
return nil, nil
|
|
}
|
|
copy := e.DeepCopy()
|
|
if other != nil {
|
|
if err := mergo.Merge(©, other, mergo.WithOverride); err != nil {
|
|
return nil, err
|
|
}
|
|
}
|
|
return ©, nil
|
|
}
|