diff --git a/pkg/registry/apis/datasource/register.go b/pkg/registry/apis/datasource/register.go index 9ed9a72b839..7574e5da72a 100644 --- a/pkg/registry/apis/datasource/register.go +++ b/pkg/registry/apis/datasource/register.go @@ -66,8 +66,6 @@ func RegisterAPIService( var err error var builder *DataSourceAPIBuilder all := pluginStore.Plugins(context.Background(), plugins.TypeDataSource) - // ATTENTION: Adding a datasource here requires the plugin to implement - // an AdmissionHandler to validate the datasource settings. ids := []string{ "grafana-testdata-datasource", "prometheus", diff --git a/pkg/services/datasources/service/datasource.go b/pkg/services/datasources/service/datasource.go index f9bcfd835ff..ef51ebef430 100644 --- a/pkg/services/datasources/service/datasource.go +++ b/pkg/services/datasources/service/datasource.go @@ -367,6 +367,10 @@ func (s *Service) prepareInstanceSettings(ctx context.Context, settings *backend rsp, err := s.pluginClient.ValidateAdmission(ctx, req) if err != nil { if errors.Is(err, plugins.ErrMethodNotImplemented) { + if settings.APIVersion == "v0alpha1" { + // For v0alpha1 we don't require plugins to implement ValidateAdmission + return settings, nil + } return nil, errutil.Internal("plugin.unimplemented"). Errorf("plugin (%s) with apiVersion=%s must implement ValidateAdmission", p.ID, settings.APIVersion) } @@ -388,6 +392,10 @@ func (s *Service) prepareInstanceSettings(ctx context.Context, settings *backend rsp, err := s.pluginClient.MutateAdmission(ctx, req) if err != nil { if errors.Is(err, plugins.ErrMethodNotImplemented) { + if settings.APIVersion == "v0alpha1" { + // For v0alpha1 we don't require plugins to implement MutateAdmission + return settings, nil + } return nil, errutil.Internal("plugin.unimplemented"). Errorf("plugin (%s) with apiVersion=%s must implement MutateAdmission", p.ID, settings.APIVersion) } diff --git a/pkg/services/datasources/service/datasource_test.go b/pkg/services/datasources/service/datasource_test.go index f3d08f3482e..3433abdd2e2 100644 --- a/pkg/services/datasources/service/datasource_test.go +++ b/pkg/services/datasources/service/datasource_test.go @@ -135,13 +135,35 @@ func TestService_AddDataSource(t *testing.T) { OrgID: 1, Type: "test", // required to validate apiserver Name: "test", - APIVersion: "v0alpha1", + APIVersion: "v1", } _, err := dsService.AddDataSource(context.Background(), cmd) require.NoError(t, err) require.True(t, validateExecuted) }) + t.Run("should ignore if AdmissionHandler is not implemented for v0alpha1", func(t *testing.T) { + dsService := initDSService(t) + dsService.pluginStore = &pluginstore.FakePluginStore{ + PluginList: []pluginstore.Plugin{{ + JSONData: plugins.JSONData{ + ID: "test", + Type: plugins.TypeDataSource, + Name: "test", + }, + }}, + } + dsService.pluginClient = &pluginfakes.FakePluginClient{} + cmd := &datasources.AddDataSourceCommand{ + OrgID: 1, + Type: "test", // required to validate apiserver + Name: "test", + APIVersion: "v0alpha1", + } + _, err := dsService.AddDataSource(context.Background(), cmd) + require.NoError(t, err) + }) + t.Run("should fail at validation", func(t *testing.T) { dsService := initDSService(t) dsService.pluginStore = &pluginstore.FakePluginStore{