From 7413c6a5fbaa1964e4b2e769d1e2644826aa4b29 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Fri, 14 Apr 2023 15:14:12 +0100 Subject: [PATCH 1/2] Regression test --- api/krusty/namespaces_test.go | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/api/krusty/namespaces_test.go b/api/krusty/namespaces_test.go index b8d971a722..7c2de0173e 100644 --- a/api/krusty/namespaces_test.go +++ b/api/krusty/namespaces_test.go @@ -801,3 +801,31 @@ metadata: namespace: iter8-monitoring `) } + +// Demonstrates that metadata.name is only overridden for a kind: Namespace with apiVersion: v1 +// Test for issue #5072 +func TestNameNotOveriddenForNonCoreApiVersionOnANamespaceKind(t *testing.T) { + th := kusttest_test.MakeHarness(t) + + th.WriteF("azure-servicebus.yaml", ` +apiVersion: servicebus.azure.com/v1beta20210101preview +kind: Namespace +metadata: + name: core-sb-99 + namespace: without-podinfo +`) + th.WriteK(".", ` +namespace: podinfo +resources: + - azure-servicebus.yaml +`) + + m := th.Run(".", th.MakeDefaultOptions()) + th.AssertActualEqualsExpected(m, ` +apiVersion: servicebus.azure.com/v1beta20210101preview +kind: Namespace +metadata: + name: core-sb-99 + namespace: podinfo +`) +} From 75fa235498e6e2fdf4acf52d7807d39ce8f901b9 Mon Sep 17 00:00:00 2001 From: Tim Jacomb Date: Fri, 14 Apr 2023 15:49:19 +0100 Subject: [PATCH 2/2] Only override name of core api version --- api/filters/namespace/namespace.go | 11 ++++++++--- api/types/kustomization.go | 12 +++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/api/filters/namespace/namespace.go b/api/filters/namespace/namespace.go index 7214f07602..9279abb9d4 100644 --- a/api/filters/namespace/namespace.go +++ b/api/filters/namespace/namespace.go @@ -56,9 +56,11 @@ func (ns Filter) Filter(nodes []*yaml.RNode) ([]*yaml.RNode, error) { // Run runs the filter on a single node rather than a slice func (ns Filter) run(node *yaml.RNode) (*yaml.RNode, error) { - // Special handling for metadata.namespace -- :( + // Special handling for metadata.namespace and metadata.name -- :( // never let SetEntry handle metadata.namespace--it will incorrectly include cluster-scoped resources - ns.FsSlice = ns.removeMetaNamespaceFieldSpecs(ns.FsSlice) + // only update metadata.name if api version is expected one--so-as it leaves other resources of kind namespace alone + apiVersion := node.GetApiVersion() + ns.FsSlice = ns.removeUnneededMetaFieldSpecs(apiVersion, ns.FsSlice) gvk := resid.GvkFromNode(node) if err := ns.metaNamespaceHack(node, gvk); err != nil { return nil, err @@ -186,12 +188,15 @@ func (ns Filter) removeRoleBindingSubjectFieldSpecs(fs types.FsSlice) types.FsSl return val } -func (ns Filter) removeMetaNamespaceFieldSpecs(fs types.FsSlice) types.FsSlice { +func (ns Filter) removeUnneededMetaFieldSpecs(apiVersion string, fs types.FsSlice) types.FsSlice { var val types.FsSlice for i := range fs { if fs[i].Path == types.MetadataNamespacePath { continue } + if apiVersion != types.MetadataNamespaceApiVersion && fs[i].Path == types.MetadataNamePath { + continue + } val = append(val, fs[i]) } return val diff --git a/api/types/kustomization.go b/api/types/kustomization.go index add70dc011..a7f68fc88b 100644 --- a/api/types/kustomization.go +++ b/api/types/kustomization.go @@ -14,11 +14,13 @@ import ( ) const ( - KustomizationVersion = "kustomize.config.k8s.io/v1beta1" - KustomizationKind = "Kustomization" - ComponentVersion = "kustomize.config.k8s.io/v1alpha1" - ComponentKind = "Component" - MetadataNamespacePath = "metadata/namespace" + KustomizationVersion = "kustomize.config.k8s.io/v1beta1" + KustomizationKind = "Kustomization" + ComponentVersion = "kustomize.config.k8s.io/v1alpha1" + ComponentKind = "Component" + MetadataNamespacePath = "metadata/namespace" + MetadataNamespaceApiVersion = "v1" + MetadataNamePath = "metadata/name" OriginAnnotations = "originAnnotations" TransformerAnnotations = "transformerAnnotations"