From 82a7e1229aace381487645256ad8cee4f26bb0d3 Mon Sep 17 00:00:00 2001 From: Andres Martinez Gotor Date: Thu, 2 Nov 2023 11:27:17 +0100 Subject: [PATCH] Bug Fix: Respect data source version when provisioning (#77428) --- docs/sources/administration/provisioning/index.md | 2 ++ pkg/services/provisioning/datasources/datasources.go | 6 +++++- pkg/services/provisioning/datasources/types.go | 1 + pkg/services/provisioning/datasources/types_test.go | 8 ++++++++ 4 files changed, 16 insertions(+), 1 deletion(-) diff --git a/docs/sources/administration/provisioning/index.md b/docs/sources/administration/provisioning/index.md index 0f3c5f1e846..3a96f6e3111 100644 --- a/docs/sources/administration/provisioning/index.md +++ b/docs/sources/administration/provisioning/index.md @@ -157,6 +157,8 @@ datasources: password: # Sets the basic authorization password. basicAuthPassword: + # Sets the version. Used to compare versions when + # updating. Ignored when creating a new data source. version: 1 # Allows users to edit data sources from the # Grafana UI. diff --git a/pkg/services/provisioning/datasources/datasources.go b/pkg/services/provisioning/datasources/datasources.go index 3093e39db1b..83d1288b4ab 100644 --- a/pkg/services/provisioning/datasources/datasources.go +++ b/pkg/services/provisioning/datasources/datasources.go @@ -80,7 +80,11 @@ func (dc *DatasourceProvisioner) provisionDataSources(ctx context.Context, cfg * updateCmd := createUpdateCommand(ds, dataSource.ID) dc.log.Debug("updating datasource from configuration", "name", updateCmd.Name, "uid", updateCmd.UID) if _, err := dc.store.UpdateDataSource(ctx, updateCmd); err != nil { - return err + if errors.Is(err, datasources.ErrDataSourceUpdatingOldVersion) { + dc.log.Debug("ignoring old version of datasource", "name", updateCmd.Name, "uid", updateCmd.UID) + } else { + return err + } } } } diff --git a/pkg/services/provisioning/datasources/types.go b/pkg/services/provisioning/datasources/types.go index 2e58df3a016..5088278cc85 100644 --- a/pkg/services/provisioning/datasources/types.go +++ b/pkg/services/provisioning/datasources/types.go @@ -243,6 +243,7 @@ func createUpdateCommand(ds *upsertDataSourceFromConfig, id int64) *datasources. return &datasources.UpdateDataSourceCommand{ ID: id, + Version: ds.Version, UID: ds.UID, OrgID: ds.OrgID, Name: ds.Name, diff --git a/pkg/services/provisioning/datasources/types_test.go b/pkg/services/provisioning/datasources/types_test.go index 75820d6b128..5cf0592f6b7 100644 --- a/pkg/services/provisioning/datasources/types_test.go +++ b/pkg/services/provisioning/datasources/types_test.go @@ -13,3 +13,11 @@ func TestUIDFromNames(t *testing.T) { require.Equal(t, safeUIDFromName("AAA"), "PCB1AD2119D8FAFB6") }) } + +func TestCreateUpdateCommand(t *testing.T) { + t.Run("includes the version in the command", func(t *testing.T) { + ds := &upsertDataSourceFromConfig{OrgID: 1, Version: 1, Name: "test"} + cmd := createUpdateCommand(ds, 1) + require.Equal(t, 1, cmd.Version) + }) +}