From f9f341e9c9465c62fc2dacfce9103520c0feec76 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Wed, 15 Jan 2025 18:28:04 +0000 Subject: [PATCH] Azure: Fix interface conversion (#99034) --- .../azure-log-analytics-datasource.go | 20 ++++++++++++-- .../azure-log-analytics-datasource_test.go | 27 ++++++++++++++----- 2 files changed, 38 insertions(+), 9 deletions(-) diff --git a/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go b/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go index 456fff77ac1..831789c875d 100644 --- a/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go +++ b/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource.go @@ -12,6 +12,7 @@ import ( "net/url" "path" "regexp" + "strconv" "strings" "time" @@ -267,8 +268,23 @@ func (e *AzureLogAnalyticsDatasource) buildQuery(ctx context.Context, query back func (e *AzureLogAnalyticsDatasource) executeQuery(ctx context.Context, query *AzureLogAnalyticsQuery, dsInfo types.DatasourceInfo, client *http.Client, url string) (*backend.DataResponse, error) { // If azureLogAnalyticsSameAs is defined and set to false, return an error - if sameAs, ok := dsInfo.JSONData["azureLogAnalyticsSameAs"]; ok && !sameAs.(bool) { - return nil, backend.DownstreamError(fmt.Errorf("credentials for Log Analytics are no longer supported. Go to the data source configuration to update Azure Monitor credentials")) + if sameAs, ok := dsInfo.JSONData["azureLogAnalyticsSameAs"]; ok { + sameAsValue, ok := sameAs.(bool) + if !ok { + stringVal, ok := sameAs.(string) + if !ok { + return nil, backend.DownstreamError(fmt.Errorf("unknown value for Log Analytics credentials. Go to the data source configuration to update Azure Monitor credentials")) + } + + var err error + sameAsValue, err = strconv.ParseBool(stringVal) + if err != nil { + return nil, backend.DownstreamError(fmt.Errorf("unknown value for Log Analytics credentials. Go to the data source configuration to update Azure Monitor credentials")) + } + } + if !sameAsValue { + return nil, backend.DownstreamError(fmt.Errorf("credentials for Log Analytics are no longer supported. Go to the data source configuration to update Azure Monitor credentials")) + } } queryJSONModel := dataquery.AzureMonitorQuery{} diff --git a/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource_test.go b/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource_test.go index d4e66294100..638cc9e848b 100644 --- a/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource_test.go +++ b/pkg/tsdb/azuremonitor/loganalytics/azure-log-analytics-datasource_test.go @@ -708,13 +708,26 @@ func Test_executeQueryErrorWithDifferentLogAnalyticsCreds(t *testing.T) { query := &AzureLogAnalyticsQuery{ TimeRange: backend.TimeRange{}, } - _, err := ds.executeQuery(ctx, query, dsInfo, &http.Client{}, dsInfo.Services["Azure Log Analytics"].URL) - if err == nil { - t.Fatal("expecting an error") - } - if !strings.Contains(err.Error(), "credentials for Log Analytics are no longer supported") { - t.Error("expecting the error to inform of bad credentials") - } + t.Run("errors with azureLogAnalyticsSameAs set to false (boolean)", func(t *testing.T) { + _, err := ds.executeQuery(ctx, query, dsInfo, &http.Client{}, dsInfo.Services["Azure Log Analytics"].URL) + if err == nil { + t.Fatal("expecting an error") + } + if !strings.Contains(err.Error(), "credentials for Log Analytics are no longer supported") { + t.Error("expecting the error to inform of bad credentials") + } + }) + + t.Run("errors with azureLogAnalyticsSameAs set to false (boolean)", func(t *testing.T) { + dsInfo.JSONData["azureLogAnalyticsSameAs"] = "false" + _, err := ds.executeQuery(ctx, query, dsInfo, &http.Client{}, dsInfo.Services["Azure Log Analytics"].URL) + if err == nil { + t.Fatal("expecting an error") + } + if !strings.Contains(err.Error(), "credentials for Log Analytics are no longer supported") { + t.Error("expecting the error to inform of bad credentials") + } + }) } func Test_exemplarsFeatureToggle(t *testing.T) {