mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
API Server: refactor plugin ID handling (#84753)
This commit is contained in:
parent
d0935fe44c
commit
a705ff7892
@ -20,7 +20,6 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
type connectionAccess struct {
|
type connectionAccess struct {
|
||||||
pluginID string
|
|
||||||
resourceInfo common.ResourceInfo
|
resourceInfo common.ResourceInfo
|
||||||
tableConverter rest.TableConvertor
|
tableConverter rest.TableConvertor
|
||||||
datasources PluginDatasourceProvider
|
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) {
|
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) {
|
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)
|
||||||
}
|
}
|
||||||
|
@ -9,6 +9,7 @@ import (
|
|||||||
|
|
||||||
"github.com/grafana/grafana/pkg/apis/datasource/v0alpha1"
|
"github.com/grafana/grafana/pkg/apis/datasource/v0alpha1"
|
||||||
"github.com/grafana/grafana/pkg/infra/appcontext"
|
"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/endpoints/request"
|
||||||
"github.com/grafana/grafana/pkg/services/apiserver/utils"
|
"github.com/grafana/grafana/pkg/services/apiserver/utils"
|
||||||
"github.com/grafana/grafana/pkg/services/datasources"
|
"github.com/grafana/grafana/pkg/services/datasources"
|
||||||
@ -20,14 +21,14 @@ import (
|
|||||||
// limit which namespace/tenant/org we are talking to
|
// limit which namespace/tenant/org we are talking to
|
||||||
type PluginDatasourceProvider interface {
|
type PluginDatasourceProvider interface {
|
||||||
// Get gets a specific datasource (that the user in context can see)
|
// 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 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
|
// Return settings (decrypted!) for a specific plugin
|
||||||
// This will require "query" permission for the user in context
|
// 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
|
// PluginContext requires adding system settings (feature flags, etc) to the datasource config
|
||||||
@ -40,6 +41,9 @@ func ProvideDefaultPluginConfigs(
|
|||||||
dsCache datasources.CacheService,
|
dsCache datasources.CacheService,
|
||||||
contextProvider *plugincontext.Provider) PluginDatasourceProvider {
|
contextProvider *plugincontext.Provider) PluginDatasourceProvider {
|
||||||
return &defaultPluginDatasourceProvider{
|
return &defaultPluginDatasourceProvider{
|
||||||
|
plugin: plugins.JSONData{
|
||||||
|
ID: datasources.DS_TESTDATA,
|
||||||
|
},
|
||||||
dsService: dsService,
|
dsService: dsService,
|
||||||
dsCache: dsCache,
|
dsCache: dsCache,
|
||||||
contextProvider: contextProvider,
|
contextProvider: contextProvider,
|
||||||
@ -47,6 +51,7 @@ func ProvideDefaultPluginConfigs(
|
|||||||
}
|
}
|
||||||
|
|
||||||
type defaultPluginDatasourceProvider struct {
|
type defaultPluginDatasourceProvider struct {
|
||||||
|
plugin plugins.JSONData
|
||||||
dsService datasources.DataSourceService
|
dsService datasources.DataSourceService
|
||||||
dsCache datasources.CacheService
|
dsCache datasources.CacheService
|
||||||
contextProvider *plugincontext.Provider
|
contextProvider *plugincontext.Provider
|
||||||
@ -56,7 +61,7 @@ var (
|
|||||||
_ PluginDatasourceProvider = (*defaultPluginDatasourceProvider)(nil)
|
_ 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)
|
info, err := request.NamespaceInfoFrom(ctx, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -72,15 +77,16 @@ func (q *defaultPluginDatasourceProvider) Get(ctx context.Context, pluginID, uid
|
|||||||
return asConnection(ds, info.Value)
|
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)
|
info, err := request.NamespaceInfoFrom(ctx, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
dss, err := q.dsService.GetDataSourcesByType(ctx, &datasources.GetDataSourcesByTypeQuery{
|
dss, err := q.dsService.GetDataSourcesByType(ctx, &datasources.GetDataSourcesByTypeQuery{
|
||||||
OrgID: info.OrgID,
|
OrgID: info.OrgID,
|
||||||
Type: pluginID,
|
Type: q.plugin.ID,
|
||||||
|
AliasIDs: q.plugin.AliasIDs,
|
||||||
})
|
})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -95,7 +101,7 @@ func (q *defaultPluginDatasourceProvider) List(ctx context.Context, pluginID str
|
|||||||
return result, nil
|
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 {
|
if q.contextProvider == nil {
|
||||||
// NOTE!!! this is only here for the standalone example
|
// NOTE!!! this is only here for the standalone example
|
||||||
// if we cleanup imports this can throw an error
|
// if we cleanup imports this can throw an error
|
||||||
|
@ -175,7 +175,6 @@ func (b *DataSourceAPIBuilder) GetAPIGroupInfo(
|
|||||||
|
|
||||||
conn := b.connectionResourceInfo
|
conn := b.connectionResourceInfo
|
||||||
storage[conn.StoragePath()] = &connectionAccess{
|
storage[conn.StoragePath()] = &connectionAccess{
|
||||||
pluginID: b.pluginJSON.ID,
|
|
||||||
datasources: b.datasources,
|
datasources: b.datasources,
|
||||||
resourceInfo: conn,
|
resourceInfo: conn,
|
||||||
tableConverter: utils.NewTableConverter(
|
tableConverter: utils.NewTableConverter(
|
||||||
@ -220,7 +219,7 @@ func (b *DataSourceAPIBuilder) GetAPIGroupInfo(
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (b *DataSourceAPIBuilder) getPluginContext(ctx context.Context, uid string) (backend.PluginContext, error) {
|
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 {
|
if err != nil {
|
||||||
return backend.PluginContext{}, err
|
return backend.PluginContext{}, err
|
||||||
}
|
}
|
||||||
|
@ -118,8 +118,8 @@ var (
|
|||||||
)
|
)
|
||||||
|
|
||||||
// Get implements PluginDatasourceProvider.
|
// Get implements PluginDatasourceProvider.
|
||||||
func (p *pluginDatasourceImpl) Get(ctx context.Context, pluginID string, uid string) (*v0alpha1.DataSourceConnection, error) {
|
func (p *pluginDatasourceImpl) Get(ctx context.Context, uid string) (*v0alpha1.DataSourceConnection, error) {
|
||||||
all, err := p.List(ctx, pluginID)
|
all, err := p.List(ctx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
@ -132,7 +132,7 @@ func (p *pluginDatasourceImpl) Get(ctx context.Context, pluginID string, uid str
|
|||||||
}
|
}
|
||||||
|
|
||||||
// List implements PluginConfigProvider.
|
// 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)
|
info, err := request.NamespaceInfoFrom(ctx, true)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
@ -154,7 +154,7 @@ func (p *pluginDatasourceImpl) List(ctx context.Context, pluginID string) (*v0al
|
|||||||
}
|
}
|
||||||
|
|
||||||
// PluginContextForDataSource implements PluginConfigProvider.
|
// 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
|
return &backend.DataSourceInstanceSettings{}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user