From a705ff789269b1369af4e2161e877f4294343444 Mon Sep 17 00:00:00 2001 From: Andres Martinez Gotor Date: Wed, 20 Mar 2024 13:49:19 +0100 Subject: [PATCH] API Server: refactor plugin ID handling (#84753) --- pkg/registry/apis/datasource/connections.go | 5 ++--- pkg/registry/apis/datasource/plugincontext.go | 22 ++++++++++++------- pkg/registry/apis/datasource/register.go | 3 +-- pkg/services/apiserver/standalone/factory.go | 8 +++---- 4 files changed, 21 insertions(+), 17 deletions(-) diff --git a/pkg/registry/apis/datasource/connections.go b/pkg/registry/apis/datasource/connections.go index 3e701f59d5a..cd880596328 100644 --- a/pkg/registry/apis/datasource/connections.go +++ b/pkg/registry/apis/datasource/connections.go @@ -20,7 +20,6 @@ var ( ) type connectionAccess struct { - pluginID string resourceInfo common.ResourceInfo tableConverter rest.TableConvertor datasources PluginDatasourceProvider @@ -53,9 +52,9 @@ func (s *connectionAccess) ConvertToTable(ctx context.Context, object runtime.Ob } func (s *connectionAccess) Get(ctx context.Context, name string, options *metav1.GetOptions) (runtime.Object, error) { - return s.datasources.Get(ctx, s.pluginID, name) + return s.datasources.Get(ctx, name) } func (s *connectionAccess) List(ctx context.Context, options *internalversion.ListOptions) (runtime.Object, error) { - return s.datasources.List(ctx, s.pluginID) + return s.datasources.List(ctx) } diff --git a/pkg/registry/apis/datasource/plugincontext.go b/pkg/registry/apis/datasource/plugincontext.go index 1c39aaa9e26..d5fa696052a 100644 --- a/pkg/registry/apis/datasource/plugincontext.go +++ b/pkg/registry/apis/datasource/plugincontext.go @@ -9,6 +9,7 @@ import ( "github.com/grafana/grafana/pkg/apis/datasource/v0alpha1" "github.com/grafana/grafana/pkg/infra/appcontext" + "github.com/grafana/grafana/pkg/plugins" "github.com/grafana/grafana/pkg/services/apiserver/endpoints/request" "github.com/grafana/grafana/pkg/services/apiserver/utils" "github.com/grafana/grafana/pkg/services/datasources" @@ -20,14 +21,14 @@ import ( // limit which namespace/tenant/org we are talking to type PluginDatasourceProvider interface { // Get gets a specific datasource (that the user in context can see) - Get(ctx context.Context, pluginID, uid string) (*v0alpha1.DataSourceConnection, error) + Get(ctx context.Context, uid string) (*v0alpha1.DataSourceConnection, error) // List lists all data sources the user in context can see - List(ctx context.Context, pluginID string) (*v0alpha1.DataSourceConnectionList, error) + List(ctx context.Context) (*v0alpha1.DataSourceConnectionList, error) // Return settings (decrypted!) for a specific plugin // This will require "query" permission for the user in context - GetInstanceSettings(ctx context.Context, pluginID, uid string) (*backend.DataSourceInstanceSettings, error) + GetInstanceSettings(ctx context.Context, uid string) (*backend.DataSourceInstanceSettings, error) } // PluginContext requires adding system settings (feature flags, etc) to the datasource config @@ -40,6 +41,9 @@ func ProvideDefaultPluginConfigs( dsCache datasources.CacheService, contextProvider *plugincontext.Provider) PluginDatasourceProvider { return &defaultPluginDatasourceProvider{ + plugin: plugins.JSONData{ + ID: datasources.DS_TESTDATA, + }, dsService: dsService, dsCache: dsCache, contextProvider: contextProvider, @@ -47,6 +51,7 @@ func ProvideDefaultPluginConfigs( } type defaultPluginDatasourceProvider struct { + plugin plugins.JSONData dsService datasources.DataSourceService dsCache datasources.CacheService contextProvider *plugincontext.Provider @@ -56,7 +61,7 @@ var ( _ PluginDatasourceProvider = (*defaultPluginDatasourceProvider)(nil) ) -func (q *defaultPluginDatasourceProvider) Get(ctx context.Context, pluginID, uid string) (*v0alpha1.DataSourceConnection, error) { +func (q *defaultPluginDatasourceProvider) Get(ctx context.Context, uid string) (*v0alpha1.DataSourceConnection, error) { info, err := request.NamespaceInfoFrom(ctx, true) if err != nil { return nil, err @@ -72,15 +77,16 @@ func (q *defaultPluginDatasourceProvider) Get(ctx context.Context, pluginID, uid return asConnection(ds, info.Value) } -func (q *defaultPluginDatasourceProvider) List(ctx context.Context, pluginID string) (*v0alpha1.DataSourceConnectionList, error) { +func (q *defaultPluginDatasourceProvider) List(ctx context.Context) (*v0alpha1.DataSourceConnectionList, error) { info, err := request.NamespaceInfoFrom(ctx, true) if err != nil { return nil, err } dss, err := q.dsService.GetDataSourcesByType(ctx, &datasources.GetDataSourcesByTypeQuery{ - OrgID: info.OrgID, - Type: pluginID, + OrgID: info.OrgID, + Type: q.plugin.ID, + AliasIDs: q.plugin.AliasIDs, }) if err != nil { return nil, err @@ -95,7 +101,7 @@ func (q *defaultPluginDatasourceProvider) List(ctx context.Context, pluginID str return result, nil } -func (q *defaultPluginDatasourceProvider) GetInstanceSettings(ctx context.Context, pluginID, uid string) (*backend.DataSourceInstanceSettings, error) { +func (q *defaultPluginDatasourceProvider) GetInstanceSettings(ctx context.Context, uid string) (*backend.DataSourceInstanceSettings, error) { if q.contextProvider == nil { // NOTE!!! this is only here for the standalone example // if we cleanup imports this can throw an error diff --git a/pkg/registry/apis/datasource/register.go b/pkg/registry/apis/datasource/register.go index 066e552dd6f..aa8267e8cb2 100644 --- a/pkg/registry/apis/datasource/register.go +++ b/pkg/registry/apis/datasource/register.go @@ -175,7 +175,6 @@ func (b *DataSourceAPIBuilder) GetAPIGroupInfo( conn := b.connectionResourceInfo storage[conn.StoragePath()] = &connectionAccess{ - pluginID: b.pluginJSON.ID, datasources: b.datasources, resourceInfo: conn, tableConverter: utils.NewTableConverter( @@ -220,7 +219,7 @@ func (b *DataSourceAPIBuilder) GetAPIGroupInfo( } func (b *DataSourceAPIBuilder) getPluginContext(ctx context.Context, uid string) (backend.PluginContext, error) { - instance, err := b.datasources.GetInstanceSettings(ctx, b.pluginJSON.ID, uid) + instance, err := b.datasources.GetInstanceSettings(ctx, uid) if err != nil { return backend.PluginContext{}, err } diff --git a/pkg/services/apiserver/standalone/factory.go b/pkg/services/apiserver/standalone/factory.go index 0ebfb2c3b9f..9979c5d39db 100644 --- a/pkg/services/apiserver/standalone/factory.go +++ b/pkg/services/apiserver/standalone/factory.go @@ -118,8 +118,8 @@ var ( ) // Get implements PluginDatasourceProvider. -func (p *pluginDatasourceImpl) Get(ctx context.Context, pluginID string, uid string) (*v0alpha1.DataSourceConnection, error) { - all, err := p.List(ctx, pluginID) +func (p *pluginDatasourceImpl) Get(ctx context.Context, uid string) (*v0alpha1.DataSourceConnection, error) { + all, err := p.List(ctx) if err != nil { return nil, err } @@ -132,7 +132,7 @@ func (p *pluginDatasourceImpl) Get(ctx context.Context, pluginID string, uid str } // List implements PluginConfigProvider. -func (p *pluginDatasourceImpl) List(ctx context.Context, pluginID string) (*v0alpha1.DataSourceConnectionList, error) { +func (p *pluginDatasourceImpl) List(ctx context.Context) (*v0alpha1.DataSourceConnectionList, error) { info, err := request.NamespaceInfoFrom(ctx, true) if err != nil { return nil, err @@ -154,7 +154,7 @@ func (p *pluginDatasourceImpl) List(ctx context.Context, pluginID string) (*v0al } // PluginContextForDataSource implements PluginConfigProvider. -func (*pluginDatasourceImpl) GetInstanceSettings(ctx context.Context, pluginID, uid string) (*backend.DataSourceInstanceSettings, error) { +func (*pluginDatasourceImpl) GetInstanceSettings(ctx context.Context, uid string) (*backend.DataSourceInstanceSettings, error) { return &backend.DataSourceInstanceSettings{}, nil }