Plugins: API sync (#112452)
This commit is contained in:
@@ -0,0 +1,41 @@
|
||||
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)
|
||||
}
|
||||
@@ -15,4 +15,5 @@ var WireSet = wire.NewSet(
|
||||
ProvideService,
|
||||
wire.Bind(new(Service), new(*service)),
|
||||
wire.Bind(new(builder.APIRegistrar), new(*service)),
|
||||
ProvideClientGenerator,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user