Detect ID conflicts in namespace transformer

This commit is contained in:
Richard Marshall
2019-08-18 07:33:44 -07:00
parent be1d5478dc
commit 24c173a49b
3 changed files with 56 additions and 1 deletions

View File

@@ -2,6 +2,8 @@
package builtin
import (
"fmt"
"sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap"
@@ -51,6 +53,11 @@ func (p *NamespaceTransformerPlugin) Transform(m resmap.ResMap) error {
return err
}
}
matches := m.GetMatchingResourcesByCurrentId(r.CurId().Equals)
if len(matches) != 1 {
return fmt.Errorf("namespace tranformation produces ID conflict: %#v", matches)
}
}
return nil
}

View File

@@ -5,6 +5,8 @@
package main
import (
"fmt"
"sigs.k8s.io/kustomize/v3/pkg/ifc"
"sigs.k8s.io/kustomize/v3/pkg/resid"
"sigs.k8s.io/kustomize/v3/pkg/resmap"
@@ -52,6 +54,11 @@ func (p *plugin) Transform(m resmap.ResMap) error {
return err
}
}
matches := m.GetMatchingResourcesByCurrentId(r.CurId().Equals)
if len(matches) != 1 {
return fmt.Errorf("namespace tranformation produces ID conflict: %#v", matches)
}
}
return nil
}

View File

@@ -4,9 +4,10 @@
package main_test
import (
"strings"
"testing"
"sigs.k8s.io/kustomize/v3/pkg/kusttest"
kusttest_test "sigs.k8s.io/kustomize/v3/pkg/kusttest"
plugins_test "sigs.k8s.io/kustomize/v3/pkg/plugins/test"
)
@@ -238,3 +239,43 @@ fieldSpecs:
th.AssertActualEqualsExpected(rm, noChangeExpected)
}
func TestNamespaceTransformerObjectConflict(t *testing.T) {
tc := plugins_test.NewEnvForTest(t).Set()
defer tc.Reset()
tc.BuildGoPlugin(
"builtin", "", "NamespaceTransformer")
th := kusttest_test.NewKustTestPluginHarness(t, "/app")
err := th.ErrorFromLoadAndRunTransformer(`
apiVersion: builtin
kind: NamespaceTransformer
metadata:
name: notImportantHere
namespace: test
fieldSpecs:
- path: metadata/namespace
create: true
`, `
apiVersion: v1
kind: ConfigMap
metadata:
name: cm
namespace: foo
---
apiVersion: v1
kind: ConfigMap
metadata:
name: cm
namespace: bar
`)
if err == nil {
t.Fatal("expected error")
}
if !strings.Contains(err.Error(), "ID conflict") {
t.Fatalf("unexpected error: %s", err.Error())
}
}