fix: merge environment values by ovewriting with empty values (#1162)
Fixes #1154
This commit is contained in:
parent
35e5454994
commit
6643a41ea3
2
go.mod
2
go.mod
|
|
@ -19,7 +19,7 @@ require (
|
||||||
github.com/hashicorp/go-version v1.2.0
|
github.com/hashicorp/go-version v1.2.0
|
||||||
github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c // indirect
|
github.com/howeyc/gopass v0.0.0-20190910152052-7cb4b85ec19c // indirect
|
||||||
github.com/huandu/xstrings v1.2.0 // indirect
|
github.com/huandu/xstrings v1.2.0 // indirect
|
||||||
github.com/imdario/mergo v0.3.8
|
github.com/imdario/mergo v0.3.9
|
||||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
|
github.com/konsorten/go-windows-terminal-sequences v1.0.2 // indirect
|
||||||
github.com/mattn/go-colorable v0.1.4 // indirect
|
github.com/mattn/go-colorable v0.1.4 // indirect
|
||||||
github.com/mattn/go-isatty v0.0.10 // indirect
|
github.com/mattn/go-isatty v0.0.10 // indirect
|
||||||
|
|
|
||||||
2
go.sum
2
go.sum
|
|
@ -473,6 +473,8 @@ github.com/imdario/mergo v0.3.6 h1:xTNEAn+kxVO7dTZGu0CegyqKZmoWFI0rF8UxjlB2d28=
|
||||||
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||||
github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ=
|
github.com/imdario/mergo v0.3.8 h1:CGgOkSJeqMRmt0D9XLWExdT4m4F1vd3FV3VPt+0VxkQ=
|
||||||
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
github.com/imdario/mergo v0.3.8/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||||
|
github.com/imdario/mergo v0.3.9 h1:UauaLniWCFHWd+Jp9oCEkTBj8VO/9DKg3PV3VCNMDIg=
|
||||||
|
github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA=
|
||||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||||
github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4 h1:3K3KcD4S6/Y2hevi70EzUTNKOS3cryQyhUnkjE6Tz0w=
|
github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4 h1:3K3KcD4S6/Y2hevi70EzUTNKOS3cryQyhUnkjE6Tz0w=
|
||||||
github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY=
|
github.com/influxdata/influxdb v0.0.0-20190411212539-d24b7ba8c4c4/go.mod h1:qZna6X/4elxqT3yI9iZYdZrWWdeFOOprn86kgg4+IzY=
|
||||||
|
|
|
||||||
|
|
@ -58,7 +58,7 @@ func (e *Environment) Merge(other *Environment) (*Environment, error) {
|
||||||
}
|
}
|
||||||
copy := e.DeepCopy()
|
copy := e.DeepCopy()
|
||||||
if other != nil {
|
if other != nil {
|
||||||
if err := mergo.Merge(©, other, mergo.WithOverride); err != nil {
|
if err := mergo.Merge(©, other, mergo.WithOverride, mergo.WithOverwriteWithEmptyValue); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,98 @@
|
||||||
|
package environment
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/google/go-cmp/cmp"
|
||||||
|
"testing"
|
||||||
|
)
|
||||||
|
|
||||||
|
// See https://github.com/roboll/helmfile/issues/1150
|
||||||
|
func TestMerge_OverwriteNilValue_Issue1150(t *testing.T) {
|
||||||
|
dst := &Environment{
|
||||||
|
Name: "dst",
|
||||||
|
Values: map[string]interface{}{
|
||||||
|
"components": map[string]interface{}{
|
||||||
|
"etcd-operator": nil,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Defaults: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
src := &Environment{
|
||||||
|
Name: "src",
|
||||||
|
Values: map[string]interface{}{
|
||||||
|
"components": map[string]interface{}{
|
||||||
|
"etcd-operator": map[string]interface{}{
|
||||||
|
"version": "0.10.3",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Defaults: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
merged, err := dst.Merge(src)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
actual := merged.Values
|
||||||
|
|
||||||
|
expected := map[string]interface{}{
|
||||||
|
"components": map[string]interface{}{
|
||||||
|
"etcd-operator": map[string]interface{}{
|
||||||
|
"version": "0.10.3",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if diff := cmp.Diff(expected, actual); diff != "" {
|
||||||
|
t.Errorf(diff)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// See https://github.com/roboll/helmfile/issues/1154
|
||||||
|
func TestMerge_OverwriteWithNilValue_Issue1154(t *testing.T) {
|
||||||
|
dst := &Environment{
|
||||||
|
Name: "dst",
|
||||||
|
Values: map[string]interface{}{
|
||||||
|
"components": map[string]interface{}{
|
||||||
|
"etcd-operator": map[string]interface{}{
|
||||||
|
"version": "0.10.0",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Defaults: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
src := &Environment{
|
||||||
|
Name: "src",
|
||||||
|
Values: map[string]interface{}{
|
||||||
|
"components": map[string]interface{}{
|
||||||
|
"etcd-operator": map[string]interface{}{
|
||||||
|
"version": "0.10.3",
|
||||||
|
},
|
||||||
|
"prometheus": nil,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
Defaults: nil,
|
||||||
|
}
|
||||||
|
|
||||||
|
merged, err := dst.Merge(src)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
|
actual := merged.Values
|
||||||
|
|
||||||
|
expected := map[string]interface{}{
|
||||||
|
"components": map[string]interface{}{
|
||||||
|
"etcd-operator": map[string]interface{}{
|
||||||
|
"version": "0.10.3",
|
||||||
|
},
|
||||||
|
"prometheus": nil,
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
if diff := cmp.Diff(expected, actual); diff != "" {
|
||||||
|
t.Errorf(diff)
|
||||||
|
}
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue