Plugins: Make renderer service load renderer plugin (#77854)
* rendering service loads renderer plugin * update naming * tidy * apply PR feedback * fix missing feature manager * fix step * set plugin
This commit is contained in:
@@ -21,7 +21,7 @@ type Service struct {
|
||||
|
||||
func New(providers ...PluginBackendProvider) *Service {
|
||||
if len(providers) == 0 {
|
||||
return New(RendererProvider, SecretsManagerProvider, DefaultProvider)
|
||||
return New(SecretsManagerProvider, DefaultProvider)
|
||||
}
|
||||
return &Service{
|
||||
providerChain: providers,
|
||||
@@ -29,7 +29,7 @@ func New(providers ...PluginBackendProvider) *Service {
|
||||
}
|
||||
|
||||
func ProvideService(coreRegistry *coreplugin.Registry) *Service {
|
||||
return New(coreRegistry.BackendFactoryProvider(), RendererProvider, SecretsManagerProvider, DefaultProvider)
|
||||
return New(coreRegistry.BackendFactoryProvider(), SecretsManagerProvider, DefaultProvider)
|
||||
}
|
||||
|
||||
func (s *Service) BackendFactory(ctx context.Context, p *plugins.Plugin) backendplugin.PluginFactoryFunc {
|
||||
|
||||
@@ -99,11 +99,6 @@ type BackendFactoryProvider interface {
|
||||
BackendFactory(ctx context.Context, p *Plugin) backendplugin.PluginFactoryFunc
|
||||
}
|
||||
|
||||
type RendererManager interface {
|
||||
// Renderer returns a renderer plugin.
|
||||
Renderer(ctx context.Context) *Plugin
|
||||
}
|
||||
|
||||
type SecretsPluginManager interface {
|
||||
// SecretsManager returns a secretsmanager plugin
|
||||
SecretsManager(ctx context.Context) *Plugin
|
||||
|
||||
@@ -2,6 +2,7 @@ package discovery
|
||||
|
||||
import (
|
||||
"context"
|
||||
"slices"
|
||||
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
"github.com/grafana/grafana/pkg/plugins/config"
|
||||
@@ -53,3 +54,39 @@ func (d *DuplicatePluginValidation) Filter(ctx context.Context, bundles []*plugi
|
||||
|
||||
return res, nil
|
||||
}
|
||||
|
||||
// PermittedPluginTypesFilter is a filter step that will filter out any plugins that are not of a permitted type.
|
||||
type PermittedPluginTypesFilter struct {
|
||||
permittedTypes []plugins.Type
|
||||
}
|
||||
|
||||
// NewPermittedPluginTypesFilterStep returns a new FindFilterFunc for filtering out any plugins that are not of a
|
||||
// permitted type. This includes both the primary plugin and any child plugins.
|
||||
func NewPermittedPluginTypesFilterStep(permittedTypes []plugins.Type) FindFilterFunc {
|
||||
f := &PermittedPluginTypesFilter{
|
||||
permittedTypes: permittedTypes,
|
||||
}
|
||||
return f.Filter
|
||||
}
|
||||
|
||||
// Filter will filter out any plugins that are not of a permitted type.
|
||||
func (n *PermittedPluginTypesFilter) Filter(_ context.Context, _ plugins.Class, bundles []*plugins.FoundBundle) ([]*plugins.FoundBundle, error) {
|
||||
var r []*plugins.FoundBundle
|
||||
for _, b := range bundles {
|
||||
if !slices.Contains(n.permittedTypes, b.Primary.JSONData.Type) {
|
||||
continue
|
||||
}
|
||||
|
||||
prohibitedType := false
|
||||
for _, child := range b.Children {
|
||||
if !slices.Contains(n.permittedTypes, child.JSONData.Type) {
|
||||
prohibitedType = true
|
||||
break
|
||||
}
|
||||
}
|
||||
if !prohibitedType {
|
||||
r = append(r, b)
|
||||
}
|
||||
}
|
||||
return r, nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user