diff --git a/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent/kustomization.yaml b/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent/kustomization.yaml index a1dafe5fb..8b9f791b6 100644 --- a/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent/kustomization.yaml +++ b/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent/kustomization.yaml @@ -1,4 +1,4 @@ -namePrefix: com1- +namePrefix: p1- configMapGenerator: - name: com1 behavior: create diff --git a/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent2/kustomization.yaml b/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent2/kustomization.yaml index 2228e5053..da1615aad 100644 --- a/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent2/kustomization.yaml +++ b/pkg/commands/testdata/testcase-configmaps/base/myapp/mycomponent2/kustomization.yaml @@ -1,6 +1,6 @@ -namePrefix: com2- +namePrefix: p2- configMapGenerator: - name: com2 behavior: create literals: - - from=base \ No newline at end of file + - from=base diff --git a/pkg/commands/testdata/testcase-configmaps/expected.diff b/pkg/commands/testdata/testcase-configmaps/expected.diff index d47a3ee21..7803718cb 100644 --- a/pkg/commands/testdata/testcase-configmaps/expected.diff +++ b/pkg/commands/testdata/testcase-configmaps/expected.diff @@ -12,5 +12,5 @@ diff -u -N /tmp/noop/v1_ConfigMap_com1.yaml /tmp/transformed/v1_ConfigMap_com1.y annotations: {} creationTimestamp: null labels: {} -- name: com1-com1-8mk424df76 -+ name: com1-com1-687g9gmkdf +- name: p1-com1-cmdb776d5b ++ name: p1-com1-dhbbm922gd diff --git a/pkg/commands/testdata/testcase-configmaps/expected.yaml b/pkg/commands/testdata/testcase-configmaps/expected.yaml index ed24ea891..be56db9c2 100644 --- a/pkg/commands/testdata/testcase-configmaps/expected.yaml +++ b/pkg/commands/testdata/testcase-configmaps/expected.yaml @@ -8,7 +8,7 @@ metadata: annotations: {} creationTimestamp: null labels: {} - name: com1-com1-687g9gmkdf + name: p1-com1-dhbbm922gd --- apiVersion: v1 data: @@ -18,4 +18,4 @@ metadata: annotations: {} creationTimestamp: null labels: {} - name: com2-com2-bcd85m642t + name: p2-com2-c4b8md75k9 diff --git a/pkg/resmap/resmap.go b/pkg/resmap/resmap.go index c282ac1d6..81c597a2f 100644 --- a/pkg/resmap/resmap.go +++ b/pkg/resmap/resmap.go @@ -222,13 +222,13 @@ func MergeWithOverride(maps ...ResMap) (ResMap, error) { glog.V(4).Infof("Replace %v with %v", result[id].Object, r.Object) r.Replace(result[id]) result[id] = r - result[id].ChangeBehavior(resource.BehaviorCreate) + result[id].SetBehavior(resource.BehaviorCreate) case resource.BehaviorMerge: glog.V(4).Infof("Merging %v with %v", result[id].Object, r.Object) r.Merge(result[id]) result[id] = r glog.V(4).Infof("Merged object is %v", result[id].Object) - result[id].ChangeBehavior(resource.BehaviorCreate) + result[id].SetBehavior(resource.BehaviorCreate) default: return nil, fmt.Errorf("Id %#v exists; must merge or replace.", id) } diff --git a/pkg/resmap/resmap_test.go b/pkg/resmap/resmap_test.go index 187a7c21c..19849000a 100644 --- a/pkg/resmap/resmap_test.go +++ b/pkg/resmap/resmap_test.go @@ -151,7 +151,7 @@ metadata: } } -func TestMerge(t *testing.T) { +func TestMergeWithoutOverride(t *testing.T) { input1 := ResMap{ resource.NewResId(deploy, "deploy1"): resource.NewResourceFromMap( map[string]interface{}{ @@ -199,3 +199,63 @@ func TestMerge(t *testing.T) { t.Fatalf("%#v doesn't equal expected %#v", merged, expected) } } + +func TestMergeWithOverride(t *testing.T) { + input1 := ResMap{ + resource.NewResId(cmap, "cmap"): resource.NewResourceFromMap( + map[string]interface{}{ + "apiVersion": "apps/v1", + "kind": "ConfigMap", + "metadata": map[string]interface{}{ + "name": "cmap", + }, + "data": map[string]interface{}{ + "a": "x", + "b": "y", + }, + }), + } + input2 := ResMap{ + resource.NewResId(cmap, "cmap"): resource.NewResourceFromMap( + map[string]interface{}{ + "apiVersion": "apps/v1", + "kind": "ConfigMap", + "metadata": map[string]interface{}{ + "name": "cmap", + }, + "data": map[string]interface{}{ + "a": "u", + "b": "v", + "c": "w", + }, + }), + } + input1[resource.NewResId(cmap, "cmap")].SetBehavior(resource.BehaviorCreate) + input2[resource.NewResId(cmap, "cmap")].SetBehavior(resource.BehaviorMerge) + input := []ResMap{input1, input2} + expected := ResMap{ + resource.NewResId(cmap, "cmap"): resource.NewResourceFromMap( + map[string]interface{}{ + "apiVersion": "apps/v1", + "kind": "ConfigMap", + "metadata": map[string]interface{}{ + "annotations": map[string]interface{}{}, + "labels": map[string]interface{}{}, + "name": "cmap", + }, + "data": map[string]interface{}{ + "a": "u", + "b": "v", + "c": "w", + }, + }), + } + expected[resource.NewResId(cmap, "cmap")].SetBehavior(resource.BehaviorCreate) + merged, err := MergeWithOverride(input...) + if err != nil { + t.Fatalf("unexpected error: %v", err) + } + if !reflect.DeepEqual(merged, expected) { + t.Fatalf("%#v doesn't equal expected %#v", merged, expected) + } +} diff --git a/pkg/resource/resource.go b/pkg/resource/resource.go index 869470617..cdd8ec622 100644 --- a/pkg/resource/resource.go +++ b/pkg/resource/resource.go @@ -61,8 +61,8 @@ func (r *Resource) Behavior() GenerationBehavior { return r.b } -// ChangeBehavior changes the resource to the new behavior -func (r *Resource) ChangeBehavior(b GenerationBehavior) { +// SetBehavior changes the resource to the new behavior +func (r *Resource) SetBehavior(b GenerationBehavior) { r.b = b }