From d469a32491950e91207e2089aa8347e88d37ef61 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Thu, 31 Jul 2025 14:55:02 +0200 Subject: [PATCH] K8s/DataQuery: Register explicit equality function (#108907) --- pkg/services/apiserver/builder/openapi.go | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/pkg/services/apiserver/builder/openapi.go b/pkg/services/apiserver/builder/openapi.go index 9489ac38b95..cde3548a136 100644 --- a/pkg/services/apiserver/builder/openapi.go +++ b/pkg/services/apiserver/builder/openapi.go @@ -1,21 +1,42 @@ package builder import ( + "bytes" + "encoding/json" "maps" "strings" + "sync" + apiequality "k8s.io/apimachinery/pkg/api/equality" "k8s.io/apimachinery/pkg/runtime/schema" openapi "k8s.io/kube-openapi/pkg/common" "k8s.io/kube-openapi/pkg/spec3" spec "k8s.io/kube-openapi/pkg/validation/spec" + "github.com/grafana/grafana-app-sdk/logging" data "github.com/grafana/grafana-plugin-sdk-go/experimental/apis/data/v0alpha1" secret "github.com/grafana/grafana/apps/secret/pkg/apis/secret/v1beta1" common "github.com/grafana/grafana/pkg/apimachinery/apis/common/v0alpha1" ) +var ( + equalityInit sync.Once +) + // This should eventually live in grafana-app-sdk func GetOpenAPIDefinitions(builders []APIGroupBuilder, additionalGetters ...openapi.GetOpenAPIDefinitions) openapi.GetOpenAPIDefinitions { + equalityInit.Do(func() { + // DataQuery has private variables, so it needs an explicit equality helper + err := apiequality.Semantic.AddFunc( + func(a, b data.DataQuery) bool { + aa, _ := json.Marshal(a) + bb, _ := json.Marshal(b) + return bytes.Equal(aa, bb) + }, + ) + logging.DefaultLogger.Error("error initializing DataQuery apiequality", "err", err) + }) + return func(ref openapi.ReferenceCallback) map[string]openapi.OpenAPIDefinition { defs := common.GetOpenAPIDefinitions(ref) // common grafana apis maps.Copy(defs, data.GetOpenAPIDefinitions(ref))