diff --git a/pkg/crds/crds.go b/pkg/crds/crds.go index 4b523e4c5..9a59bce71 100644 --- a/pkg/crds/crds.go +++ b/pkg/crds/crds.go @@ -52,14 +52,11 @@ func registerCRD(loader ifc.Loader, path string) (*transformerconfig.Transformer var types map[string]common.OpenAPIDefinition if content[0] == '{' { err = json.Unmarshal(content, &types) - if err != nil { - return nil, err - } } else { err = yaml.Unmarshal(content, &types) - if err != nil { - return nil, err - } + } + if err != nil { + return nil, err } crds := getCRDs(types) diff --git a/pkg/crds/crds_test.go b/pkg/crds/crds_test.go index 9d9cc9a73..354f1fa71 100644 --- a/pkg/crds/crds_test.go +++ b/pkg/crds/crds_test.go @@ -18,7 +18,6 @@ package crds import ( "reflect" - "sort" "testing" "sigs.k8s.io/kustomize/pkg/gvk" @@ -178,17 +177,7 @@ func TestRegisterCRD(t *testing.T) { NameReference: refpathconfigs, } - ldr := makeLoader(t) - - pathconfig, _ := registerCRD(ldr, "/testpath/crd.json") - - sort.Slice(expected.NameReference[:], func(i, j int) bool { - return expected.NameReference[i].Gvk.String() < expected.NameReference[j].Gvk.String() - }) - - sort.Slice(pathconfig.NameReference[:], func(i, j int) bool { - return pathconfig.NameReference[i].Gvk.String() < pathconfig.NameReference[j].Gvk.String() - }) + pathconfig, _ := registerCRD(makeLoader(t), "/testpath/crd.json") if !reflect.DeepEqual(pathconfig, expected) { t.Fatalf("expected\n %v\n but got\n %v\n", expected, pathconfig) diff --git a/pkg/transformerconfig/transformerconfig.go b/pkg/transformerconfig/transformerconfig.go index dcb7b2b8f..66722de80 100644 --- a/pkg/transformerconfig/transformerconfig.go +++ b/pkg/transformerconfig/transformerconfig.go @@ -20,20 +20,47 @@ package transformerconfig import ( "log" + "sort" "github.com/ghodss/yaml" "sigs.k8s.io/kustomize/pkg/ifc" "sigs.k8s.io/kustomize/pkg/transformerconfig/defaultconfig" ) +type rpcSlice []ReferencePathConfig + +func (s rpcSlice) Len() int { return len(s) } +func (s rpcSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s rpcSlice) Less(i, j int) bool { + return s[i].Gvk.IsLessThan(s[j].Gvk) +} + +type pcSlice []PathConfig + +func (s pcSlice) Len() int { return len(s) } +func (s pcSlice) Swap(i, j int) { s[i], s[j] = s[j], s[i] } +func (s pcSlice) Less(i, j int) bool { + return s[i].Gvk.IsLessThan(s[j].Gvk) +} + // TransformerConfig represents the path configurations for different transformations type TransformerConfig struct { - NamePrefix []PathConfig `json:"namePrefix,omitempty" yaml:"namePrefix,omitempty"` - NameSpace []PathConfig `json:"namespace,omitempty" yaml:"namespace,omitempty"` - CommonLabels []PathConfig `json:"commonLabels,omitempty" yaml:"commonLabels,omitempty"` - CommonAnnotations []PathConfig `json:"commonAnnotations,omitempty" yaml:"commonAnnotations,omitempty"` - NameReference []ReferencePathConfig `json:"nameReference,omitempty" yaml:"nameReference,omitempty"` - VarReference []PathConfig `json:"varReference,omitempty" yaml:"varReference,omitempty"` + NamePrefix pcSlice `json:"namePrefix,omitempty" yaml:"namePrefix,omitempty"` + NameSpace pcSlice `json:"namespace,omitempty" yaml:"namespace,omitempty"` + CommonLabels pcSlice `json:"commonLabels,omitempty" yaml:"commonLabels,omitempty"` + CommonAnnotations pcSlice `json:"commonAnnotations,omitempty" yaml:"commonAnnotations,omitempty"` + NameReference rpcSlice `json:"nameReference,omitempty" yaml:"nameReference,omitempty"` + VarReference pcSlice `json:"varReference,omitempty" yaml:"varReference,omitempty"` +} + +// sortFields provides determinism in logging, tests, etc. +func (t *TransformerConfig) sortFields() { + sort.Sort(t.NamePrefix) + sort.Sort(t.NameSpace) + sort.Sort(t.CommonLabels) + sort.Sort(t.CommonAnnotations) + sort.Sort(t.NameReference) + sort.Sort(t.VarReference) } // AddPrefixPathConfig adds a PathConfig to NamePrefix @@ -65,6 +92,7 @@ func (t *TransformerConfig) Merge(input *TransformerConfig) *TransformerConfig { merged.CommonLabels = append(t.CommonLabels, input.CommonLabels...) merged.VarReference = append(t.VarReference, input.VarReference...) merged.NameReference = mergeNameReferencePathConfigs(t.NameReference, input.NameReference) + merged.sortFields() return merged } @@ -92,6 +120,7 @@ func MakeTransformerConfigFromBytes(data []byte) (*TransformerConfig, error) { if err != nil { return nil, err } + t.sortFields() return &t, nil }