diff --git a/controllers/helmrelease_controller.go b/controllers/helmrelease_controller.go index a39713df1..5115ac054 100644 --- a/controllers/helmrelease_controller.go +++ b/controllers/helmrelease_controller.go @@ -52,6 +52,7 @@ import ( "github.com/fluxcd/pkg/runtime/events" "github.com/fluxcd/pkg/runtime/metrics" "github.com/fluxcd/pkg/runtime/predicates" + "github.com/fluxcd/pkg/runtime/transform" sourcev1 "github.com/fluxcd/source-controller/api/v1beta1" v2 "github.com/fluxcd/helm-controller/api/v2beta1" @@ -588,7 +589,7 @@ func (r *HelmReleaseReconciler) composeValues(ctx context.Context, hr v2.HelmRel if err != nil { return nil, fmt.Errorf("unable to read values from key '%s' in %s '%s': %w", v.GetValuesKey(), v.Kind, namespacedName, err) } - result = util.MergeMaps(result, values) + result = transform.MergeMaps(result, values) default: // TODO(hidde): this is a bit of hack, as it mimics the way the option string is passed // to Helm from a CLI perspective. Given the parser is however not publicly accessible @@ -599,7 +600,7 @@ func (r *HelmReleaseReconciler) composeValues(ctx context.Context, hr v2.HelmRel } } } - return util.MergeMaps(result, hr.GetValues()), nil + return transform.MergeMaps(result, hr.GetValues()), nil } // reconcileDelete deletes the v1beta1.HelmChart of the v2beta1.HelmRelease, diff --git a/go.mod b/go.mod index 29e2ae664..7f1a43948 100644 --- a/go.mod +++ b/go.mod @@ -8,7 +8,7 @@ require ( github.com/fluxcd/helm-controller/api v0.7.0 github.com/fluxcd/pkg/apis/kustomize v0.0.1 github.com/fluxcd/pkg/apis/meta v0.8.0 - github.com/fluxcd/pkg/runtime v0.8.1 + github.com/fluxcd/pkg/runtime v0.8.2 github.com/fluxcd/source-controller/api v0.8.0 github.com/go-logr/logr v0.3.0 github.com/onsi/ginkgo v1.14.1 diff --git a/go.sum b/go.sum index f1a904ad3..c2ff1a7e3 100644 --- a/go.sum +++ b/go.sum @@ -248,8 +248,8 @@ github.com/fluxcd/pkg/apis/meta v0.7.0/go.mod h1:yHuY8kyGHYz22I0jQzqMMGCcHViuzC/ github.com/fluxcd/pkg/apis/meta v0.8.0 h1:wqWpUsxhKHB1ZztcvOz+vnyhdKW9cWmjFp8Vci/XOdk= github.com/fluxcd/pkg/apis/meta v0.8.0/go.mod h1:yHuY8kyGHYz22I0jQzqMMGCcHViuzC/WPdo9Gisk8Po= github.com/fluxcd/pkg/runtime v0.6.2/go.mod h1:RuqYOYCvBJwo4rg83d28WOt2vfSaemuZCVpUagAjWQc= -github.com/fluxcd/pkg/runtime v0.8.1 h1:8UxNz7GeI/HC3U5tpNCfrjRx2V7UjUegQOwCsd+EWxk= -github.com/fluxcd/pkg/runtime v0.8.1/go.mod h1:tQwEN+RESjJmtwSSv7I+6bkNM9raIXpGsCjruaIVX6A= +github.com/fluxcd/pkg/runtime v0.8.2 h1:NeQPw9srRH4zmu2eM+NJ9QdJMd0RcyOr4j5WiWQU8as= +github.com/fluxcd/pkg/runtime v0.8.2/go.mod h1:tQwEN+RESjJmtwSSv7I+6bkNM9raIXpGsCjruaIVX6A= github.com/fluxcd/source-controller/api v0.8.0 h1:jOgeOwCLXzmjinRiDT7e/IuSB7WNZMgrUwMLJm09K/o= github.com/fluxcd/source-controller/api v0.8.0/go.mod h1:u2sdc/QDm0tzXHL7mZVj928hc3MMU+4mKCuAQg+94Bk= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= diff --git a/internal/util/util.go b/internal/util/util.go index 24ec80ba2..b15c1b185 100644 --- a/internal/util/util.go +++ b/internal/util/util.go @@ -26,30 +26,6 @@ import ( "sigs.k8s.io/controller-runtime/pkg/client" ) -// MergeMaps merges map b into given map a and returns the result. -// It allows overwrites of map values with flat values, and vice versa. -// This is copied from https://github.com/helm/helm/blob/v3.3.0/pkg/cli/values/options.go#L88, -// as the public chartutil.CoalesceTables function does not allow -// overwriting maps with flat values. -func MergeMaps(a, b map[string]interface{}) map[string]interface{} { - out := make(map[string]interface{}, len(a)) - for k, v := range a { - out[k] = v - } - for k, v := range b { - if v, ok := v.(map[string]interface{}); ok { - if bv, ok := out[k]; ok { - if bv, ok := bv.(map[string]interface{}); ok { - out[k] = MergeMaps(bv, v) - continue - } - } - } - out[k] = v - } - return out -} - // ValuesChecksum calculates and returns the SHA1 checksum for the // given chartutil.Values. func ValuesChecksum(values chartutil.Values) string { diff --git a/internal/util/util_test.go b/internal/util/util_test.go index 062002ed5..1dabf4fe4 100644 --- a/internal/util/util_test.go +++ b/internal/util/util_test.go @@ -17,68 +17,12 @@ limitations under the License. package util import ( - "reflect" "testing" "helm.sh/helm/v3/pkg/chartutil" "helm.sh/helm/v3/pkg/release" ) -func TestMergeMaps(t *testing.T) { - nestedMap := map[string]interface{}{ - "foo": "bar", - "baz": map[string]string{ - "cool": "stuff", - }, - } - anotherNestedMap := map[string]interface{}{ - "foo": "bar", - "baz": map[string]string{ - "cool": "things", - "awesome": "stuff", - }, - } - flatMap := map[string]interface{}{ - "foo": "bar", - "baz": "stuff", - } - anotherFlatMap := map[string]interface{}{ - "testing": "fun", - } - - testMap := MergeMaps(flatMap, nestedMap) - equal := reflect.DeepEqual(testMap, nestedMap) - if !equal { - t.Errorf("Expected a nested map to overwrite a flat value. Expected: %v, got %v", nestedMap, testMap) - } - - testMap = MergeMaps(nestedMap, flatMap) - equal = reflect.DeepEqual(testMap, flatMap) - if !equal { - t.Errorf("Expected a flat value to overwrite a map. Expected: %v, got %v", flatMap, testMap) - } - - testMap = MergeMaps(nestedMap, anotherNestedMap) - equal = reflect.DeepEqual(testMap, anotherNestedMap) - if !equal { - t.Errorf("Expected a nested map to overwrite another nested map. Expected: %v, got %v", anotherNestedMap, testMap) - } - - testMap = MergeMaps(anotherFlatMap, anotherNestedMap) - expectedMap := map[string]interface{}{ - "testing": "fun", - "foo": "bar", - "baz": map[string]string{ - "cool": "things", - "awesome": "stuff", - }, - } - equal = reflect.DeepEqual(testMap, expectedMap) - if !equal { - t.Errorf("Expected a map with different keys to merge properly with another map. Expected: %v, got %v", expectedMap, testMap) - } -} - func TestValuesChecksum(t *testing.T) { tests := []struct { name string