CloudWatch: Remove dependencies on grafana/pkg/setting (#81208)
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"time"
|
||||
@@ -17,9 +18,12 @@ type CloudWatchSettings struct {
|
||||
Namespace string `json:"customMetricsNamespaces"`
|
||||
SecureSocksProxyEnabled bool `json:"enableSecureSocksProxy"` // this can be removed when https://github.com/grafana/grafana/issues/39089 is implemented
|
||||
LogsTimeout Duration `json:"logsTimeout"`
|
||||
|
||||
// GrafanaSettings are fetched from the GrafanaCfg in the context
|
||||
GrafanaSettings awsds.AuthSettings `json:"-"`
|
||||
}
|
||||
|
||||
func LoadCloudWatchSettings(config backend.DataSourceInstanceSettings) (CloudWatchSettings, error) {
|
||||
func LoadCloudWatchSettings(ctx context.Context, config backend.DataSourceInstanceSettings) (CloudWatchSettings, error) {
|
||||
instance := CloudWatchSettings{}
|
||||
if config.JSONData != nil && len(config.JSONData) > 1 {
|
||||
if err := json.Unmarshal(config.JSONData, &instance); err != nil {
|
||||
@@ -43,6 +47,7 @@ func LoadCloudWatchSettings(config backend.DataSourceInstanceSettings) (CloudWat
|
||||
|
||||
instance.AccessKey = config.DecryptedSecureJSONData["accessKey"]
|
||||
instance.SecretKey = config.DecryptedSecureJSONData["secretKey"]
|
||||
instance.GrafanaSettings = *awsds.ReadAuthSettings(ctx)
|
||||
|
||||
return instance, nil
|
||||
}
|
||||
|
||||
@@ -1,16 +1,23 @@
|
||||
package models
|
||||
|
||||
import (
|
||||
"context"
|
||||
"testing"
|
||||
"time"
|
||||
|
||||
"github.com/grafana/grafana-aws-sdk/pkg/awsds"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend"
|
||||
"github.com/grafana/grafana-plugin-sdk-go/backend/proxy"
|
||||
"github.com/stretchr/testify/assert"
|
||||
"github.com/stretchr/testify/require"
|
||||
)
|
||||
|
||||
func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
settingCtx := backend.WithGrafanaConfig(context.Background(), backend.NewGrafanaCfg(map[string]string{
|
||||
awsds.AllowedAuthProvidersEnvVarKeyName: "default,keys,credentials",
|
||||
awsds.AssumeRoleEnabledEnvVarKeyName: "false",
|
||||
awsds.SessionDurationEnvVarKeyName: "10m",
|
||||
}))
|
||||
t.Run("Should return error for invalid json", func(t *testing.T) {
|
||||
settings := backend.DataSourceInstanceSettings{
|
||||
ID: 33,
|
||||
@@ -25,7 +32,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := LoadCloudWatchSettings(settings)
|
||||
_, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
|
||||
assert.Error(t, err)
|
||||
})
|
||||
@@ -47,7 +54,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
s, err := LoadCloudWatchSettings(settings)
|
||||
s, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, awsds.AuthTypeKeys, s.AuthType)
|
||||
assert.Equal(t, "arn:aws:iam::123456789012:role/grafana", s.AssumeRoleARN)
|
||||
@@ -78,7 +85,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
s, err := LoadCloudWatchSettings(settings)
|
||||
s, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, awsds.AuthTypeDefault, s.AuthType)
|
||||
assert.Equal(t, "arn:aws:iam::123456789012:role/grafana", s.AssumeRoleARN)
|
||||
@@ -103,7 +110,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
s, err := LoadCloudWatchSettings(settings)
|
||||
s, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, time.Minute*30, s.LogsTimeout.Duration)
|
||||
})
|
||||
@@ -121,7 +128,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
s, err := LoadCloudWatchSettings(settings)
|
||||
s, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, time.Minute*10, s.LogsTimeout.Duration)
|
||||
})
|
||||
@@ -139,7 +146,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
s, err := LoadCloudWatchSettings(settings)
|
||||
s, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, time.Duration(1500000000), s.LogsTimeout.Duration)
|
||||
})
|
||||
@@ -157,7 +164,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
s, err := LoadCloudWatchSettings(settings)
|
||||
s, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.NoError(t, err)
|
||||
assert.Equal(t, 1500*time.Millisecond, s.LogsTimeout.Duration)
|
||||
})
|
||||
@@ -175,7 +182,7 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := LoadCloudWatchSettings(settings)
|
||||
_, err := LoadCloudWatchSettings(context.Background(), settings)
|
||||
require.Error(t, err)
|
||||
})
|
||||
t.Run("Should throw error if logsTimeout is an invalid type", func(t *testing.T) {
|
||||
@@ -192,7 +199,42 @@ func Test_Settings_LoadCloudWatchSettings(t *testing.T) {
|
||||
},
|
||||
}
|
||||
|
||||
_, err := LoadCloudWatchSettings(settings)
|
||||
_, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.Error(t, err)
|
||||
})
|
||||
|
||||
t.Run("Should load settings from context", func(t *testing.T) {
|
||||
settingCtx := backend.WithGrafanaConfig(context.Background(), backend.NewGrafanaCfg(map[string]string{
|
||||
awsds.AllowedAuthProvidersEnvVarKeyName: "foo , bar,baz",
|
||||
awsds.AssumeRoleEnabledEnvVarKeyName: "false",
|
||||
awsds.SessionDurationEnvVarKeyName: "10m",
|
||||
awsds.GrafanaAssumeRoleExternalIdKeyName: "mock_id",
|
||||
awsds.ListMetricsPageLimitKeyName: "50",
|
||||
proxy.PluginSecureSocksProxyEnabled: "true",
|
||||
}))
|
||||
settings := backend.DataSourceInstanceSettings{
|
||||
ID: 33,
|
||||
JSONData: []byte(`{
|
||||
"authType": "arn",
|
||||
"assumeRoleArn": "arn:aws:iam::123456789012:role/grafana"
|
||||
}`),
|
||||
DecryptedSecureJSONData: map[string]string{
|
||||
"accessKey": "AKIAIOSFODNN7EXAMPLE",
|
||||
"secretKey": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
|
||||
},
|
||||
}
|
||||
s, err := LoadCloudWatchSettings(settingCtx, settings)
|
||||
require.NoError(t, err)
|
||||
|
||||
ctxDuration := 10 * time.Minute
|
||||
expectedGrafanaSettings := awsds.AuthSettings{
|
||||
AllowedAuthProviders: []string{"foo", "bar", "baz"},
|
||||
AssumeRoleEnabled: false,
|
||||
SessionDuration: &ctxDuration,
|
||||
ExternalID: "mock_id",
|
||||
ListMetricsPageLimit: 50,
|
||||
SecureSocksDSProxyEnabled: true,
|
||||
}
|
||||
assert.Equal(t, expectedGrafanaSettings, s.GrafanaSettings)
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user