Files
grafana/pkg/services/apiserver/clientgenerator.go
T
2025-10-24 08:09:26 -04:00

42 lines
1019 B
Go

package apiserver
import (
"context"
"sync"
"github.com/grafana/grafana-app-sdk/k8s"
"github.com/grafana/grafana-app-sdk/resource"
)
// ProvideClientGenerator creates a lazy-initialized ClientGenerator.
func ProvideClientGenerator(restConfigProvider RestConfigProvider) resource.ClientGenerator {
return &lazyClientGenerator{
restConfigProvider: restConfigProvider,
}
}
type lazyClientGenerator struct {
restConfigProvider RestConfigProvider
clientGenerator resource.ClientGenerator
initOnce sync.Once
initError error
}
func (g *lazyClientGenerator) ClientFor(kind resource.Kind) (resource.Client, error) {
g.initOnce.Do(func() {
restConfig, err := g.restConfigProvider.GetRestConfig(context.Background())
if err != nil {
g.initError = err
return
}
restConfig.APIPath = "apis"
g.clientGenerator = k8s.NewClientRegistry(*restConfig, k8s.DefaultClientConfig())
})
if g.initError != nil {
return nil, g.initError
}
return g.clientGenerator.ClientFor(kind)
}