From 8f6619bc219e545801505f89f1ae85a1fa0f5ef9 Mon Sep 17 00:00:00 2001 From: "Dr. Stefan Schimanski" Date: Fri, 10 May 2019 09:37:54 +0200 Subject: [PATCH] apiextensions: always sort structural schema violations, not only in condition --- .../pkg/apiserver/schema/validation.go | 7 +++++++ .../nonstructuralschema/nonstructuralschema_controller.go | 7 ------- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/validation.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/validation.go index 1e59ee18303..c6af544ebbc 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/validation.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/validation.go @@ -18,6 +18,7 @@ package schema import ( "reflect" + "sort" "k8s.io/apimachinery/pkg/util/validation/field" ) @@ -62,6 +63,12 @@ func ValidateStructural(s *Structural, fldPath *field.Path) field.ErrorList { allErrs = append(allErrs, validateStructuralInvariants(s, rootLevel, fldPath)...) allErrs = append(allErrs, validateStructuralCompleteness(s, fldPath)...) + // sort error messages. Otherwise, the errors slice will change every time due to + // maps in the types and randomized iteration. + sort.Slice(allErrs, func(i, j int) bool { + return allErrs[i].Error() < allErrs[j].Error() + }) + return allErrs } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go index 1986cedd2cc..e12bd20bfd1 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/controller/nonstructuralschema/nonstructuralschema_controller.go @@ -18,7 +18,6 @@ package nonstructuralschema import ( "fmt" - "sort" "time" apierrors "k8s.io/apimachinery/pkg/api/errors" @@ -115,12 +114,6 @@ func calculateCondition(in *apiextensions.CustomResourceDefinition) *apiextensio return nil } - // sort error messages. Otherwise, the condition message will change every sync due to - // randomized map iteration. - sort.Slice(allErrs, func(i, j int) bool { - return allErrs[i].Error() < allErrs[j].Error() - }) - cond.Status = apiextensions.ConditionTrue cond.Reason = "Violations" cond.Message = allErrs.ToAggregate().Error()