From 809d5b1fe23166dbc73570c757604e11b38aa13e Mon Sep 17 00:00:00 2001 From: Jingfang Liu Date: Tue, 19 Jun 2018 14:51:36 -0700 Subject: [PATCH] put namespace objects first in the output --- pkg/resmap/idslice.go | 13 ++++++++++- pkg/resmap/idslice_test.go | 45 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 57 insertions(+), 1 deletion(-) create mode 100644 pkg/resmap/idslice_test.go diff --git a/pkg/resmap/idslice.go b/pkg/resmap/idslice.go index 7eebfd9a1..04623d284 100644 --- a/pkg/resmap/idslice.go +++ b/pkg/resmap/idslice.go @@ -20,6 +20,7 @@ import ( "sort" "github.com/kubernetes-sigs/kustomize/pkg/resource" + "k8s.io/apimachinery/pkg/runtime/schema" ) // IdSlice implements the sort interface. @@ -31,7 +32,17 @@ func (a IdSlice) Len() int { return len(a) } func (a IdSlice) Swap(i, j int) { a[i], a[j] = a[j], a[i] } func (a IdSlice) Less(i, j int) bool { if a[i].Gvk().String() != a[j].Gvk().String() { - return a[i].Gvk().String() < a[j].Gvk().String() + return gvkLess(a[i].Gvk(), a[j].Gvk()) } return a[i].Name() < a[j].Name() } + +func gvkLess(i, j schema.GroupVersionKind) bool { + if i.Kind == "Namespace" { + return true + } else if j.Kind == "Namespace" { + return false + } else { + return i.String() < j.String() + } +} diff --git a/pkg/resmap/idslice_test.go b/pkg/resmap/idslice_test.go new file mode 100644 index 000000000..b60b92772 --- /dev/null +++ b/pkg/resmap/idslice_test.go @@ -0,0 +1,45 @@ +/* +Copyright 2018 The Kubernetes Authors. + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package resmap + +import ( + "reflect" + "sort" + "testing" + + "github.com/kubernetes-sigs/kustomize/pkg/resource" + "k8s.io/apimachinery/pkg/runtime/schema" +) + +func TestLess(t *testing.T) { + ids := IdSlice{ + resource.NewResId(schema.GroupVersionKind{Kind: "ConfigMap"}, "cm"), + resource.NewResId(schema.GroupVersionKind{Kind: "Pod"}, "pod"), + resource.NewResId(schema.GroupVersionKind{Kind: "Namespace"}, "ns1"), + resource.NewResId(schema.GroupVersionKind{Kind: "Namespace"}, "ns2"), + } + expected := IdSlice{ + resource.NewResId(schema.GroupVersionKind{Kind: "Namespace"}, "ns1"), + resource.NewResId(schema.GroupVersionKind{Kind: "Namespace"}, "ns2"), + resource.NewResId(schema.GroupVersionKind{Kind: "ConfigMap"}, "cm"), + resource.NewResId(schema.GroupVersionKind{Kind: "Pod"}, "pod"), + } + sort.Sort(ids) + if !reflect.DeepEqual(ids, expected) { + t.Fatalf("expected %+v but got %+v", expected, ids) + } +}