diff --git a/docs/sources/administration/provisioning.md b/docs/sources/administration/provisioning.md index 8fcfbde63d6..f5622d83f8e 100644 --- a/docs/sources/administration/provisioning.md +++ b/docs/sources/administration/provisioning.md @@ -161,6 +161,7 @@ Since not all datasources have the same configuration settings we only have the | assumeRoleArn | string | Cloudwatch | ARN of Assume Role | | defaultRegion | string | Cloudwatch | AWS region | | customMetricsNamespaces | string | Cloudwatch | Namespaces of Custom Metrics | +| profile | string | Cloudwatch | Custom credentials profile | tsdbVersion | string | OpenTSDB | Version | | tsdbResolution | string | OpenTSDB | Resolution | | sslmode | string | PostgreSQL | SSLmode. 'disable', 'require', 'verify-ca' or 'verify-full' | diff --git a/docs/sources/features/datasources/cloudwatch.md b/docs/sources/features/datasources/cloudwatch.md index efacaaef101..764d36786c2 100755 --- a/docs/sources/features/datasources/cloudwatch.md +++ b/docs/sources/features/datasources/cloudwatch.md @@ -372,7 +372,7 @@ It's now possible to configure data sources using config files with Grafana's pr Here are some provisioning examples for this data source. -### Using a credentials file +### Using credentials profile name (non-default) ```yaml apiVersion: 1 @@ -384,6 +384,7 @@ datasources: authType: credentials defaultRegion: eu-west-2 customMetricsNamespaces: 'CWAgent,CustomNameSpace' + profile: secondary ``` ### Using `accessKey` and `secretKey` diff --git a/packages/grafana-data/src/types/datasource.ts b/packages/grafana-data/src/types/datasource.ts index 2d3c4b482b8..01c18565f01 100644 --- a/packages/grafana-data/src/types/datasource.ts +++ b/packages/grafana-data/src/types/datasource.ts @@ -499,6 +499,7 @@ export interface MetricFindValue { export interface DataSourceJsonData { authType?: string; defaultRegion?: string; + profile?: string; } /** diff --git a/pkg/tsdb/cloudwatch/cloudwatch.go b/pkg/tsdb/cloudwatch/cloudwatch.go index 1a522ed1a48..0fe05ad920f 100644 --- a/pkg/tsdb/cloudwatch/cloudwatch.go +++ b/pkg/tsdb/cloudwatch/cloudwatch.go @@ -294,9 +294,14 @@ func (e *cloudWatchExecutor) getDSInfo(region string) *datasourceInfo { accessKey := decrypted["accessKey"] secretKey := decrypted["secretKey"] + profile := e.DataSource.JsonData.Get("profile").MustString() + if profile == "" { + profile = e.DataSource.Database // legacy support + } + return &datasourceInfo{ Region: region, - Profile: e.DataSource.Database, + Profile: profile, AuthType: authType, AssumeRoleArn: assumeRoleArn, ExternalID: externalID, diff --git a/public/app/plugins/datasource/cloudwatch/components/ConfigEditor.tsx b/public/app/plugins/datasource/cloudwatch/components/ConfigEditor.tsx index 87fda626f34..d2b9991b79b 100644 --- a/public/app/plugins/datasource/cloudwatch/components/ConfigEditor.tsx +++ b/public/app/plugins/datasource/cloudwatch/components/ConfigEditor.tsx @@ -4,7 +4,6 @@ const { Select, Input } = LegacyForms; import { DataSourcePluginOptionsEditorProps, onUpdateDatasourceJsonDataOptionSelect, - onUpdateDatasourceOption, onUpdateDatasourceResetOption, onUpdateDatasourceJsonDataOption, onUpdateDatasourceSecureJsonDataOption, @@ -115,6 +114,10 @@ export class ConfigEditor extends PureComponent { const { regions } = this.state; const { options } = this.props; const secureJsonData = (options.secureJsonData || {}) as CloudWatchSecureJsonData; + let profile = options.jsonData.profile; + if (!profile) { + profile = options.database; + } return ( <> @@ -151,8 +154,8 @@ export class ConfigEditor extends PureComponent {