diff --git a/pkg/services/provisioning/plugins/plugin_provisioner.go b/pkg/services/provisioning/plugins/plugin_provisioner.go index d2ae059f0e3..0f23e48f571 100644 --- a/pkg/services/provisioning/plugins/plugin_provisioner.go +++ b/pkg/services/provisioning/plugins/plugin_provisioner.go @@ -7,22 +7,22 @@ import ( "github.com/grafana/grafana/pkg/infra/log" "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/plugins" + "github.com/grafana/grafana/pkg/services/pluginsettings" ) type Store interface { GetOrgByNameHandler(ctx context.Context, query *models.GetOrgByNameQuery) error - GetPluginSettingById(ctx context.Context, query *models.GetPluginSettingByIdQuery) error - UpdatePluginSetting(ctx context.Context, cmd *models.UpdatePluginSettingCmd) error } // Provision scans a directory for provisioning config files // and provisions the app in those files. -func Provision(ctx context.Context, configDirectory string, store Store, pluginStore plugins.Store) error { +func Provision(ctx context.Context, configDirectory string, store Store, pluginStore plugins.Store, pluginSettings pluginsettings.Service) error { logger := log.New("provisioning.plugins") ap := PluginProvisioner{ - log: logger, - cfgProvider: newConfigReader(logger, pluginStore), - store: store, + log: logger, + cfgProvider: newConfigReader(logger, pluginStore), + store: store, + pluginSettings: pluginSettings, } return ap.applyChanges(ctx, configDirectory) } @@ -30,9 +30,10 @@ func Provision(ctx context.Context, configDirectory string, store Store, pluginS // PluginProvisioner is responsible for provisioning apps based on // configuration read by the `configReader` type PluginProvisioner struct { - log log.Logger - cfgProvider configReader - store Store + log log.Logger + cfgProvider configReader + store Store + pluginSettings pluginsettings.Service } func (ap *PluginProvisioner) apply(ctx context.Context, cfg *pluginsAsConfig) error { @@ -48,7 +49,7 @@ func (ap *PluginProvisioner) apply(ctx context.Context, cfg *pluginsAsConfig) er } query := &models.GetPluginSettingByIdQuery{OrgId: app.OrgID, PluginId: app.PluginID} - err := ap.store.GetPluginSettingById(ctx, query) + err := ap.pluginSettings.GetPluginSettingById(ctx, query) if err != nil { if !errors.Is(err, models.ErrPluginSettingNotFound) { return err @@ -67,7 +68,7 @@ func (ap *PluginProvisioner) apply(ctx context.Context, cfg *pluginsAsConfig) er SecureJsonData: app.SecureJSONData, PluginVersion: app.PluginVersion, } - if err := ap.store.UpdatePluginSetting(ctx, cmd); err != nil { + if err := ap.pluginSettings.UpdatePluginSetting(ctx, cmd); err != nil { return err } } diff --git a/pkg/services/provisioning/plugins/plugin_provisioner_test.go b/pkg/services/provisioning/plugins/plugin_provisioner_test.go index 3c3dff3c8fb..99042ba7fa3 100644 --- a/pkg/services/provisioning/plugins/plugin_provisioner_test.go +++ b/pkg/services/provisioning/plugins/plugin_provisioner_test.go @@ -32,7 +32,7 @@ func TestPluginProvisioner(t *testing.T) { } reader := &testConfigReader{result: cfg} store := &mockStore{} - ap := PluginProvisioner{log: log.New("test"), cfgProvider: reader, store: store} + ap := PluginProvisioner{log: log.New("test"), cfgProvider: reader, store: store, pluginSettings: store} err := ap.applyChanges(context.Background(), "") require.NoError(t, err) @@ -96,3 +96,7 @@ func (m *mockStore) UpdatePluginSetting(ctx context.Context, cmd *models.UpdateP m.sentCommands = append(m.sentCommands, cmd) return nil } + +func (m *mockStore) UpdatePluginSettingVersion(ctx context.Context, cmd *models.UpdatePluginSettingVersionCmd) error { + return nil +} diff --git a/pkg/services/provisioning/provisioning.go b/pkg/services/provisioning/provisioning.go index ab0678583c3..dd23fd48e92 100644 --- a/pkg/services/provisioning/provisioning.go +++ b/pkg/services/provisioning/provisioning.go @@ -13,6 +13,7 @@ import ( datasourceservice "github.com/grafana/grafana/pkg/services/datasources" "github.com/grafana/grafana/pkg/services/encryption" "github.com/grafana/grafana/pkg/services/notifications" + "github.com/grafana/grafana/pkg/services/pluginsettings" "github.com/grafana/grafana/pkg/services/provisioning/dashboards" "github.com/grafana/grafana/pkg/services/provisioning/datasources" "github.com/grafana/grafana/pkg/services/provisioning/notifiers" @@ -28,6 +29,7 @@ func ProvideService(cfg *setting.Cfg, sqlStore *sqlstore.SQLStore, pluginStore p dashboardService dashboardservice.DashboardProvisioningService, datasourceService datasourceservice.DataSourceService, alertingService *alerting.AlertNotificationService, + pluginSettings pluginsettings.Service, ) (*ProvisioningServiceImpl, error) { s := &ProvisioningServiceImpl{ Cfg: cfg, @@ -43,6 +45,7 @@ func ProvideService(cfg *setting.Cfg, sqlStore *sqlstore.SQLStore, pluginStore p dashboardService: dashboardService, datasourceService: datasourceService, alertingService: alertingService, + pluginsSettings: pluginSettings, } return s, nil } @@ -74,7 +77,7 @@ func newProvisioningServiceImpl( newDashboardProvisioner dashboards.DashboardProvisionerFactory, provisionNotifiers func(context.Context, string, notifiers.Manager, notifiers.SQLStore, encryption.Internal, *notifications.NotificationService) error, provisionDatasources func(context.Context, string, datasources.Store, utils.OrgStore) error, - provisionPlugins func(context.Context, string, plugins.Store, plugifaces.Store) error, + provisionPlugins func(context.Context, string, plugins.Store, plugifaces.Store, pluginsettings.Service) error, ) *ProvisioningServiceImpl { return &ProvisioningServiceImpl{ log: log.New("provisioning"), @@ -97,11 +100,12 @@ type ProvisioningServiceImpl struct { dashboardProvisioner dashboards.DashboardProvisioner provisionNotifiers func(context.Context, string, notifiers.Manager, notifiers.SQLStore, encryption.Internal, *notifications.NotificationService) error provisionDatasources func(context.Context, string, datasources.Store, utils.OrgStore) error - provisionPlugins func(context.Context, string, plugins.Store, plugifaces.Store) error + provisionPlugins func(context.Context, string, plugins.Store, plugifaces.Store, pluginsettings.Service) error mutex sync.Mutex dashboardService dashboardservice.DashboardProvisioningService datasourceService datasourceservice.DataSourceService alertingService *alerting.AlertNotificationService + pluginsSettings pluginsettings.Service } func (ps *ProvisioningServiceImpl) RunInitProvisioners(ctx context.Context) error { @@ -164,7 +168,7 @@ func (ps *ProvisioningServiceImpl) ProvisionDatasources(ctx context.Context) err func (ps *ProvisioningServiceImpl) ProvisionPlugins(ctx context.Context) error { appPath := filepath.Join(ps.Cfg.ProvisioningPath, "plugins") - if err := ps.provisionPlugins(ctx, appPath, ps.SQLStore, ps.pluginStore); err != nil { + if err := ps.provisionPlugins(ctx, appPath, ps.SQLStore, ps.pluginStore, ps.pluginsSettings); err != nil { err = errutil.Wrap("app provisioning error", err) ps.log.Error("Failed to provision plugins", "error", err) return err