Grafana Advisor: Prometheus Type Migration check (#110853)
* add check for prom dep auth check in grafana advisor * remove non prom DS * clean up and add grafana docs links * lint * tests * Apply suggestions from code review Co-authored-by: Andres Martinez Gotor <andres.martinez@grafana.com> * Thank you for your great feedback @andresmgot * caching now resets on refresh. also check if plugin is installed * remove unused errors * add steps back sigh * make naming clearer --------- Co-authored-by: Andres Martinez Gotor <andres.martinez@grafana.com>
This commit is contained in:
co-authored by
Andres Martinez Gotor
parent
05b8013a8e
commit
63c8fe287f
@@ -8,6 +8,7 @@ import (
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
advisor "github.com/grafana/grafana/apps/advisor/pkg/apis/advisor/v0alpha1"
|
||||
"github.com/grafana/grafana/pkg/apimachinery/identity"
|
||||
"github.com/grafana/grafana/pkg/components/simplejson"
|
||||
"github.com/grafana/grafana/pkg/plugins"
|
||||
"github.com/grafana/grafana/pkg/plugins/repo"
|
||||
"github.com/grafana/grafana/pkg/services/datasources"
|
||||
@@ -230,6 +231,101 @@ func TestCheck_Run(t *testing.T) {
|
||||
assert.Equal(t, MissingPluginStepID, failures[0].StepID)
|
||||
assert.Len(t, failures[0].Links, 1)
|
||||
})
|
||||
|
||||
t.Run("should return failure when prometheus datasource uses SigV4 auth", func(t *testing.T) {
|
||||
jsonData := simplejson.New()
|
||||
jsonData.Set("sigV4Auth", true)
|
||||
datasources := []*datasources.DataSource{
|
||||
{UID: "valid-uid-1", Type: "prometheus", Name: "Prometheus", JsonData: jsonData},
|
||||
}
|
||||
mockDatasourceSvc := &MockDatasourceSvc{dss: datasources}
|
||||
mockPluginContextProvider := &MockPluginContextProvider{pCtx: backend.PluginContext{}}
|
||||
mockPluginClient := &MockPluginClient{res: &backend.CheckHealthResult{Status: backend.HealthStatusOk}}
|
||||
mockPluginRepo := &MockPluginRepo{plugins: []repo.PluginInfo{
|
||||
{ID: 1, Slug: "prometheus", Status: "active"},
|
||||
{ID: 2, Slug: "grafana-amazonprometheus-datasource", Status: "active"},
|
||||
}}
|
||||
mockPluginStore := &MockPluginStore{exists: true}
|
||||
|
||||
check := &check{
|
||||
DatasourceSvc: mockDatasourceSvc,
|
||||
PluginContextProvider: mockPluginContextProvider,
|
||||
PluginClient: mockPluginClient,
|
||||
PluginRepo: mockPluginRepo,
|
||||
PluginStore: mockPluginStore,
|
||||
GrafanaVersion: "11.0.0",
|
||||
}
|
||||
|
||||
failures, err := runChecks(check)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, failures, 1)
|
||||
assert.Equal(t, PromDepAuthStepID, failures[0].StepID)
|
||||
assert.Contains(t, failures[0].Links, advisor.CheckErrorLink{
|
||||
Message: "View SigV4 docs",
|
||||
Url: "https://grafana.com/docs/grafana-cloud/connect-externally-hosted/data-sources/prometheus/configure/aws-authentication/",
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("should return failure when prometheus datasource uses Azure auth", func(t *testing.T) {
|
||||
jsonData := simplejson.New()
|
||||
jsonData.Set("azureCredentials", map[string]interface{}{"authType": "msi"})
|
||||
datasources := []*datasources.DataSource{
|
||||
{UID: "valid-uid-1", Type: "prometheus", Name: "Prometheus", JsonData: jsonData},
|
||||
}
|
||||
mockDatasourceSvc := &MockDatasourceSvc{dss: datasources}
|
||||
mockPluginContextProvider := &MockPluginContextProvider{pCtx: backend.PluginContext{}}
|
||||
mockPluginClient := &MockPluginClient{res: &backend.CheckHealthResult{Status: backend.HealthStatusOk}}
|
||||
mockPluginRepo := &MockPluginRepo{plugins: []repo.PluginInfo{
|
||||
{ID: 1, Slug: "prometheus", Status: "active"},
|
||||
{ID: 2, Slug: "grafana-azureprometheus-datasource", Status: "active"},
|
||||
}}
|
||||
mockPluginStore := &MockPluginStore{exists: true}
|
||||
|
||||
check := &check{
|
||||
DatasourceSvc: mockDatasourceSvc,
|
||||
PluginContextProvider: mockPluginContextProvider,
|
||||
PluginClient: mockPluginClient,
|
||||
PluginRepo: mockPluginRepo,
|
||||
PluginStore: mockPluginStore,
|
||||
GrafanaVersion: "11.0.0",
|
||||
}
|
||||
|
||||
failures, err := runChecks(check)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, failures, 1)
|
||||
assert.Equal(t, PromDepAuthStepID, failures[0].StepID)
|
||||
assert.Contains(t, failures[0].Links, advisor.CheckErrorLink{
|
||||
Message: "View Azure auth docs",
|
||||
Url: "https://grafana.com/docs/grafana-cloud/connect-externally-hosted/data-sources/prometheus/configure/azure-authentication/",
|
||||
})
|
||||
})
|
||||
|
||||
t.Run("should not return failure when prometheus datasource does not use deprecated auth", func(t *testing.T) {
|
||||
jsonData := simplejson.New()
|
||||
datasources := []*datasources.DataSource{
|
||||
{UID: "valid-uid-1", Type: "prometheus", Name: "Prometheus", JsonData: jsonData},
|
||||
}
|
||||
mockDatasourceSvc := &MockDatasourceSvc{dss: datasources}
|
||||
mockPluginContextProvider := &MockPluginContextProvider{pCtx: backend.PluginContext{}}
|
||||
mockPluginClient := &MockPluginClient{res: &backend.CheckHealthResult{Status: backend.HealthStatusOk}}
|
||||
mockPluginRepo := &MockPluginRepo{plugins: []repo.PluginInfo{
|
||||
{ID: 1, Slug: "prometheus", Status: "active"},
|
||||
}}
|
||||
mockPluginStore := &MockPluginStore{exists: true}
|
||||
|
||||
check := &check{
|
||||
DatasourceSvc: mockDatasourceSvc,
|
||||
PluginContextProvider: mockPluginContextProvider,
|
||||
PluginClient: mockPluginClient,
|
||||
PluginRepo: mockPluginRepo,
|
||||
PluginStore: mockPluginStore,
|
||||
GrafanaVersion: "11.0.0",
|
||||
}
|
||||
|
||||
failures, err := runChecks(check)
|
||||
assert.NoError(t, err)
|
||||
assert.Empty(t, failures)
|
||||
})
|
||||
}
|
||||
|
||||
func TestCheck_Item(t *testing.T) {
|
||||
|
||||
Reference in New Issue
Block a user