From c2b513a2b34d82ae572367d856e65c607b536fa2 Mon Sep 17 00:00:00 2001 From: Stephanie Hingtgen Date: Tue, 23 Sep 2025 15:54:52 -0600 Subject: [PATCH] Dashboards: Cleanup folder client (#111510) --- pkg/registry/apis/dashboard/register.go | 51 ++++++++++++------------- 1 file changed, 24 insertions(+), 27 deletions(-) diff --git a/pkg/registry/apis/dashboard/register.go b/pkg/registry/apis/dashboard/register.go index 54e0df09431..0bd80b9c4b7 100644 --- a/pkg/registry/apis/dashboard/register.go +++ b/pkg/registry/apis/dashboard/register.go @@ -73,6 +73,18 @@ const ( dashboardSpecRefreshInterval = "refresh" ) +type simpleFolderClientProvider struct { + handler client.K8sHandler +} + +func newSimpleFolderClientProvider(handler client.K8sHandler) client.K8sHandlerProvider { + return &simpleFolderClientProvider{handler: handler} +} + +func (p *simpleFolderClientProvider) GetOrCreateHandler(namespace string) client.K8sHandler { + return p.handler +} + // This is used just so wire has something unique to return type DashboardsAPIBuilder struct { dashboardService dashboards.DashboardService @@ -93,10 +105,7 @@ type DashboardsAPIBuilder struct { ProvisioningService provisioning.ProvisioningService cfg *setting.Cfg dualWriter dualwrite.Service - - // only one of the two is required to be set, folderClientProvider is used when isStandalone is true - folderClient client.K8sHandler - folderClientProvider client.K8sHandlerProvider + folderClientProvider client.K8sHandlerProvider log log.Logger reg prometheus.Registerer @@ -151,7 +160,7 @@ func RegisterAPIService( ProvisioningService: provisioning, cfg: cfg, dualWriter: dual, - folderClient: folderClient, + folderClientProvider: newSimpleFolderClientProvider(folderClient), legacy: &DashboardStorage{ Access: legacy.NewDashboardAccess(dbp, namespacer, dashStore, provisioning, libraryPanelSvc, sorter, dashboardPermissionsSvc, accessControl, features), @@ -422,18 +431,12 @@ func (b *DashboardsAPIBuilder) validateUpdate(ctx context.Context, a admission.A // validateFolderExists checks if a folder exists func (b *DashboardsAPIBuilder) validateFolderExists(ctx context.Context, folderUID string, orgID int64) error { - // Check if folder exists using the folder store - var folderClient client.K8sHandler - if b.isStandalone { - ns, err := request.NamespaceInfoFrom(ctx, false) - if err != nil { - return err - } - folderClient = b.folderClientProvider.GetOrCreateHandler(ns.Value) - } else { - folderClient = b.folderClient + ns, err := request.NamespaceInfoFrom(ctx, false) + if err != nil { + return err } - _, err := folderClient.Get(ctx, folderUID, orgID, metav1.GetOptions{}) + folderClient := b.folderClientProvider.GetOrCreateHandler(ns.Value) + _, err = folderClient.Get(ctx, folderUID, orgID, metav1.GetOptions{}) // Check if the error is a context deadline exceeded error if err != nil { // historically, we returned a more verbose error with folder name when its not found, below just keeps that behavior @@ -675,20 +678,14 @@ func (b *DashboardsAPIBuilder) GetAuthorizer() authorizer.Authorizer { } func (b *DashboardsAPIBuilder) verifyFolderAccessPermissions(ctx context.Context, user identity.Requester, folderIds ...string) error { - folderClient := b.folderClient - orgID := user.GetOrgID() - - if b.folderClient == nil && b.folderClientProvider != nil { - ns, err := request.NamespaceInfoFrom(ctx, false) - if err != nil { - return err - } - folderClient = b.folderClientProvider.GetOrCreateHandler(ns.Value) - orgID = ns.OrgID + ns, err := request.NamespaceInfoFrom(ctx, false) + if err != nil { + return err } + folderClient := b.folderClientProvider.GetOrCreateHandler(ns.Value) for _, folderId := range folderIds { - resp, err := folderClient.Get(ctx, folderId, orgID, metav1.GetOptions{}, "access") + resp, err := folderClient.Get(ctx, folderId, ns.OrgID, metav1.GetOptions{}, "access") if err != nil { return dashboards.ErrFolderAccessDenied }