2024-11-01 08:28:56 -04:00
|
|
|
package appregistry
|
|
|
|
|
|
|
|
|
|
import (
|
|
|
|
|
"context"
|
|
|
|
|
|
|
|
|
|
"github.com/grafana/grafana/pkg/registry"
|
2024-11-04 14:18:49 -05:00
|
|
|
"github.com/grafana/grafana/pkg/registry/apps/playlist"
|
2024-11-01 08:28:56 -04:00
|
|
|
"github.com/grafana/grafana/pkg/services/apiserver"
|
|
|
|
|
"github.com/grafana/grafana/pkg/services/apiserver/builder"
|
|
|
|
|
"github.com/grafana/grafana/pkg/services/apiserver/builder/runner"
|
|
|
|
|
"k8s.io/client-go/rest"
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
var (
|
|
|
|
|
_ registry.BackgroundService = (*Service)(nil)
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
type Service struct {
|
|
|
|
|
runner *runner.APIGroupRunner
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// ProvideRegistryServiceSink is an entry point for each service that will force initialization
|
|
|
|
|
func ProvideRegistryServiceSink(
|
|
|
|
|
registrar builder.APIRegistrar,
|
|
|
|
|
restConfigProvider apiserver.RestConfigProvider,
|
2024-11-04 14:18:49 -05:00
|
|
|
playlistAppProvider *playlist.PlaylistAppProvider,
|
2024-11-01 08:28:56 -04:00
|
|
|
) (*Service, error) {
|
|
|
|
|
cfgWrapper := func(ctx context.Context) *rest.Config {
|
|
|
|
|
cfg := restConfigProvider.GetRestConfig(ctx)
|
|
|
|
|
if cfg == nil {
|
|
|
|
|
return nil
|
|
|
|
|
}
|
|
|
|
|
cfg.APIPath = "/apis"
|
|
|
|
|
return cfg
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
cfg := runner.RunnerConfig{
|
|
|
|
|
RestConfigGetter: cfgWrapper,
|
|
|
|
|
APIRegistrar: registrar,
|
|
|
|
|
}
|
2024-11-04 14:18:49 -05:00
|
|
|
runner, err := runner.NewAPIGroupRunner(cfg, playlistAppProvider)
|
2024-11-01 08:28:56 -04:00
|
|
|
if err != nil {
|
|
|
|
|
return nil, err
|
|
|
|
|
}
|
|
|
|
|
return &Service{runner: runner}, nil
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func (s *Service) Run(ctx context.Context) error {
|
|
|
|
|
if err := s.runner.Init(ctx); err != nil {
|
|
|
|
|
return err
|
|
|
|
|
}
|
|
|
|
|
return s.runner.Run(ctx)
|
|
|
|
|
}
|