mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-11 17:12:51 +00:00
@@ -57,7 +57,7 @@ func (rmF *Factory) FromFiles(
|
|||||||
}
|
}
|
||||||
result = append(result, res)
|
result = append(result, res)
|
||||||
}
|
}
|
||||||
return MergeWithoutOverride(result...)
|
return MergeWithErrorOnIdCollision(result...)
|
||||||
}
|
}
|
||||||
|
|
||||||
// newResMapFromBytes decodes a list of objects in byte array format.
|
// newResMapFromBytes decodes a list of objects in byte array format.
|
||||||
|
|||||||
@@ -20,7 +20,6 @@ package resmap
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"fmt"
|
"fmt"
|
||||||
"log"
|
|
||||||
"reflect"
|
"reflect"
|
||||||
"sort"
|
"sort"
|
||||||
|
|
||||||
@@ -140,9 +139,10 @@ func (m ResMap) FilterBy(inputId resid.ResId) ResMap {
|
|||||||
return result
|
return result
|
||||||
}
|
}
|
||||||
|
|
||||||
// MergeWithoutOverride combines multiple ResMap instances, failing on key collision
|
// MergeWithErrorOnIdCollision combines multiple ResMap instances, failing on
|
||||||
// and skipping nil maps. In case if all of the maps are nil, an empty ResMap is returned.
|
// key collision and skipping nil maps.
|
||||||
func MergeWithoutOverride(maps ...ResMap) (ResMap, error) {
|
// If all of the maps are nil, an empty ResMap is returned.
|
||||||
|
func MergeWithErrorOnIdCollision(maps ...ResMap) (ResMap, error) {
|
||||||
result := ResMap{}
|
result := ResMap{}
|
||||||
for _, m := range maps {
|
for _, m := range maps {
|
||||||
if m == nil {
|
if m == nil {
|
||||||
@@ -164,10 +164,10 @@ func MergeWithoutOverride(maps ...ResMap) (ResMap, error) {
|
|||||||
// "replace" option in its generation instructions, meaning it is supposed
|
// "replace" option in its generation instructions, meaning it is supposed
|
||||||
// to replace something from the raw resources list.
|
// to replace something from the raw resources list.
|
||||||
// If all of the maps are nil, an empty ResMap is returned.
|
// If all of the maps are nil, an empty ResMap is returned.
|
||||||
// When looping over the instances to combine them, if a resource id for resource X
|
// When looping over the instances to combine them, if a resource id for
|
||||||
// is found to be already in the combined map, then the behavior field for X
|
// resource X is found to be already in the combined map, then the behavior
|
||||||
// must be BehaviorMerge or BehaviorReplace. If X is not in the map, then it's
|
// field for X must be BehaviorMerge or BehaviorReplace. If X is not in the
|
||||||
// behavior cannot be merge or replace.
|
// map, then it's behavior cannot be merge or replace.
|
||||||
func MergeWithOverride(maps ...ResMap) (ResMap, error) {
|
func MergeWithOverride(maps ...ResMap) (ResMap, error) {
|
||||||
result := maps[0]
|
result := maps[0]
|
||||||
if result == nil {
|
if result == nil {
|
||||||
@@ -183,18 +183,12 @@ func MergeWithOverride(maps ...ResMap) (ResMap, error) {
|
|||||||
id = matchedId[0]
|
id = matchedId[0]
|
||||||
switch r.Behavior() {
|
switch r.Behavior() {
|
||||||
case ifc.BehaviorReplace:
|
case ifc.BehaviorReplace:
|
||||||
log.Printf(
|
|
||||||
"Replace %v with %v", result[id].Map(), r.Map())
|
|
||||||
r.Replace(result[id])
|
r.Replace(result[id])
|
||||||
result[id] = r
|
result[id] = r
|
||||||
result[id].SetBehavior(ifc.BehaviorCreate)
|
result[id].SetBehavior(ifc.BehaviorCreate)
|
||||||
case ifc.BehaviorMerge:
|
case ifc.BehaviorMerge:
|
||||||
log.Printf(
|
|
||||||
"Merging %v with %v", result[id].Map(), r.Map())
|
|
||||||
r.Merge(result[id])
|
r.Merge(result[id])
|
||||||
result[id] = r
|
result[id] = r
|
||||||
log.Printf(
|
|
||||||
"Merged object is %v", result[id].Map())
|
|
||||||
result[id].SetBehavior(ifc.BehaviorCreate)
|
result[id].SetBehavior(ifc.BehaviorCreate)
|
||||||
default:
|
default:
|
||||||
return nil, fmt.Errorf("id %#v exists; must merge or replace", id)
|
return nil, fmt.Errorf("id %#v exists; must merge or replace", id)
|
||||||
|
|||||||
@@ -410,7 +410,7 @@ func TestMergeWithoutOverride(t *testing.T) {
|
|||||||
},
|
},
|
||||||
}),
|
}),
|
||||||
}
|
}
|
||||||
merged, err := MergeWithoutOverride(input...)
|
merged, err := MergeWithErrorOnIdCollision(input...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
@@ -418,7 +418,7 @@ func TestMergeWithoutOverride(t *testing.T) {
|
|||||||
t.Fatalf("%#v doesn't equal expected %#v", merged, expected)
|
t.Fatalf("%#v doesn't equal expected %#v", merged, expected)
|
||||||
}
|
}
|
||||||
input3 := []ResMap{merged, nil}
|
input3 := []ResMap{merged, nil}
|
||||||
merged1, err := MergeWithoutOverride(input3...)
|
merged1, err := MergeWithErrorOnIdCollision(input3...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
@@ -426,7 +426,7 @@ func TestMergeWithoutOverride(t *testing.T) {
|
|||||||
t.Fatalf("%#v doesn't equal expected %#v", merged1, expected)
|
t.Fatalf("%#v doesn't equal expected %#v", merged1, expected)
|
||||||
}
|
}
|
||||||
input4 := []ResMap{nil, merged}
|
input4 := []ResMap{nil, merged}
|
||||||
merged2, err := MergeWithoutOverride(input4...)
|
merged2, err := MergeWithErrorOnIdCollision(input4...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("unexpected error: %v", err)
|
t.Fatalf("unexpected error: %v", err)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ func (kt *KustTarget) generateConfigMapsAndSecrets(
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
errs.Append(errors.Wrap(err, "NewResMapFromSecretArgs"))
|
errs.Append(errors.Wrap(err, "NewResMapFromSecretArgs"))
|
||||||
}
|
}
|
||||||
return resmap.MergeWithoutOverride(cms, secrets)
|
return resmap.MergeWithErrorOnIdCollision(cms, secrets)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Gets Bases and Resources as advertised.
|
// Gets Bases and Resources as advertised.
|
||||||
@@ -232,7 +232,7 @@ func (kt *KustTarget) loadResMapFromBasesAndResources() (resmap.ResMap, error) {
|
|||||||
if len(errs.Get()) > 0 {
|
if len(errs.Get()) > 0 {
|
||||||
return nil, errs
|
return nil, errs
|
||||||
}
|
}
|
||||||
return resmap.MergeWithoutOverride(resources, bases)
|
return resmap.MergeWithErrorOnIdCollision(resources, bases)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Loop through the Bases of this kustomization recursively loading resources.
|
// Loop through the Bases of this kustomization recursively loading resources.
|
||||||
@@ -261,7 +261,7 @@ func (kt *KustTarget) loadCustomizedBases() (resmap.ResMap, *interror.Kustomizat
|
|||||||
ldr.Cleanup()
|
ldr.Cleanup()
|
||||||
list = append(list, resMap)
|
list = append(list, resMap)
|
||||||
}
|
}
|
||||||
result, err := resmap.MergeWithoutOverride(list...)
|
result, err := resmap.MergeWithErrorOnIdCollision(list...)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
errs.Append(errors.Wrap(err, "Merge failed"))
|
errs.Append(errors.Wrap(err, "Merge failed"))
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user