mirror of
https://github.com/kubernetes-sigs/kustomize.git
synced 2026-06-14 10:30:59 +00:00
add conflict check
This commit is contained in:
@@ -6,6 +6,7 @@ package types
|
|||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
"sigs.k8s.io/yaml"
|
"sigs.k8s.io/yaml"
|
||||||
)
|
)
|
||||||
@@ -189,15 +190,28 @@ func (k *Kustomization) FixKustomizationPostUnmarshalling() {
|
|||||||
// FixKustomizationPreMarshalling fixes things
|
// FixKustomizationPreMarshalling fixes things
|
||||||
// that should occur after the kustomization file
|
// that should occur after the kustomization file
|
||||||
// has been processed.
|
// has been processed.
|
||||||
func (k *Kustomization) FixKustomizationPreMarshalling() {
|
func (k *Kustomization) FixKustomizationPreMarshalling() error {
|
||||||
// PatchesJson6902 should be under the Patches field.
|
// PatchesJson6902 should be under the Patches field.
|
||||||
k.Patches = append(k.Patches, k.PatchesJson6902...)
|
k.Patches = append(k.Patches, k.PatchesJson6902...)
|
||||||
k.PatchesJson6902 = nil
|
k.PatchesJson6902 = nil
|
||||||
|
|
||||||
if l := labelFromCommonLabels(k.CommonLabels); l != nil {
|
// this fix is not in FixKustomizationPostUnmarshalling because
|
||||||
k.Labels = append(k.Labels, *l)
|
// it will break some commands like `create` and `add`. those
|
||||||
|
// commands depend on 'commonLabels' field
|
||||||
|
if cl := labelFromCommonLabels(k.CommonLabels); cl != nil {
|
||||||
|
// check conflicts between commonLabels and labels
|
||||||
|
for _, l := range k.Labels {
|
||||||
|
for k := range l.Pairs {
|
||||||
|
if _, exist := cl.Pairs[k]; exist {
|
||||||
|
return fmt.Errorf("label name '%s' exists in both commonLabels and labels", k)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
k.Labels = append(k.Labels, *cl)
|
||||||
k.CommonLabels = nil
|
k.CommonLabels = nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (k *Kustomization) EnforceFields() []string {
|
func (k *Kustomization) EnforceFields() []string {
|
||||||
|
|||||||
@@ -39,6 +39,9 @@ func RunFix(fSys filesys.FileSystem) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
m.FixKustomizationPreMarshalling()
|
err = m.FixKustomizationPreMarshalling()
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
return mf.Write(m)
|
return mf.Write(m)
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -175,3 +175,26 @@ kind: Kustomization
|
|||||||
t.Errorf("Mismatch (-expected, +actual):\n%s", diff)
|
t.Errorf("Mismatch (-expected, +actual):\n%s", diff)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestFixOutdatedCommonLabelsDuplicate(t *testing.T) {
|
||||||
|
kustomizationContentWithOutdatedCommonLabels := []byte(`
|
||||||
|
commonLabels:
|
||||||
|
foo: bar
|
||||||
|
labels:
|
||||||
|
- pairs:
|
||||||
|
foo: baz
|
||||||
|
a: b
|
||||||
|
`)
|
||||||
|
|
||||||
|
fSys := filesys.MakeFsInMemory()
|
||||||
|
testutils_test.WriteTestKustomizationWith(fSys, kustomizationContentWithOutdatedCommonLabels)
|
||||||
|
cmd := NewCmdFix(fSys)
|
||||||
|
err := cmd.RunE(cmd, nil)
|
||||||
|
if err == nil {
|
||||||
|
t.Fatalf("expect error")
|
||||||
|
}
|
||||||
|
expectedErr := "label name 'foo' exists in both commonLabels and labels"
|
||||||
|
if err.Error() != expectedErr {
|
||||||
|
t.Fatalf("error message '%s' doesn't match expected", err.Error())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user