42 lines
1019 B
Go
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)
|
|
}
|