diff --git a/pkg/provider/configure_clients.go b/pkg/provider/configure_clients.go index fa5c77307..48160446e 100644 --- a/pkg/provider/configure_clients.go +++ b/pkg/provider/configure_clients.go @@ -128,14 +128,17 @@ func createMLClient(client *common.Client, providerConfig ProviderConfig) error } func createSLOClient(client *common.Client, providerConfig ProviderConfig) error { + var err error + sloConfig := slo.NewConfiguration() sloConfig.Host = client.GrafanaAPIURLParsed.Host sloConfig.Scheme = client.GrafanaAPIURLParsed.Scheme + sloConfig.DefaultHeader, err = getHTTPHeadersMap(providerConfig) sloConfig.DefaultHeader["Authorization"] = "Bearer " + providerConfig.Auth.ValueString() - sloConfig.DefaultHeader["Grafana-Terraform-Provider"] = "true" sloConfig.HTTPClient = getRetryClient(providerConfig) client.SLOClient = slo.NewAPIClient(sloConfig) - return nil + + return err } func createCloudClient(client *common.Client, providerConfig ProviderConfig) error { @@ -167,7 +170,10 @@ func createOnCallClient(providerConfig ProviderConfig) (*onCallAPI.Client, error // Sets a custom HTTP Header on all requests coming from the Grafana Terraform Provider to Grafana-Terraform-Provider: true // in addition to any headers set within the `http_headers` field or the `GRAFANA_HTTP_HEADERS` environment variable func getHTTPHeadersMap(providerConfig ProviderConfig) (map[string]string, error) { - headers := map[string]string{"Grafana-Terraform-Provider": "true"} + headers := map[string]string{ + "Grafana-Terraform-Provider": "true", + "Grafana-Terraform-Provider-Version": providerConfig.Version.ValueString(), + } for k, v := range providerConfig.HTTPHeaders.Elements() { if vString, ok := v.(types.String); ok { headers[k] = vString.ValueString() diff --git a/pkg/provider/framework_provider.go b/pkg/provider/framework_provider.go index b86b767ac..bb412a501 100644 --- a/pkg/provider/framework_provider.go +++ b/pkg/provider/framework_provider.go @@ -41,6 +41,7 @@ type ProviderConfig struct { OncallURL types.String `tfsdk:"oncall_url"` UserAgent types.String `tfsdk:"-"` + Version types.String `tfsdk:"-"` } func (c *ProviderConfig) SetDefaults() error { @@ -206,6 +207,7 @@ func (p *frameworkProvider) Configure(ctx context.Context, req provider.Configur resp.Diagnostics.AddError("failed to set defaults", err.Error()) return } + cfg.Version = types.StringValue(p.version) cfg.UserAgent = types.StringValue(fmt.Sprintf("Terraform/%s (+https://www.terraform.io) terraform-provider-grafana/%s", req.TerraformVersion, p.version)) clients, err := CreateClients(cfg) diff --git a/pkg/provider/legacy_provider.go b/pkg/provider/legacy_provider.go index c04617266..d20f6f152 100644 --- a/pkg/provider/legacy_provider.go +++ b/pkg/provider/legacy_provider.go @@ -180,6 +180,7 @@ func configure(version string, p *schema.Provider) func(context.Context, *schema RetryStatusCodes: statusCodes, RetryWait: types.Int64Value(int64(d.Get("retry_wait").(int))), UserAgent: types.StringValue(p.UserAgent("terraform-provider-grafana", version)), + Version: types.StringValue(version), } if err := cfg.SetDefaults(); err != nil { return nil, diag.FromErr(err) diff --git a/pkg/provider/legacy_provider_test.go b/pkg/provider/legacy_provider_test.go index 984f9cf90..f0868230f 100644 --- a/pkg/provider/legacy_provider_test.go +++ b/pkg/provider/legacy_provider_test.go @@ -29,8 +29,8 @@ func TestProviderConfigure(t *testing.T) { // Helper for header tests checkHeaders := func(t *testing.T, provider *schema.Provider) { gotHeaders := provider.Meta().(*common.Client).GrafanaAPIConfig.HTTPHeaders - if len(gotHeaders) != 3 { - t.Errorf("expected 3 HTTP header, got %d", len(gotHeaders)) + if len(gotHeaders) != 4 { + t.Errorf("expected 4 HTTP header, got %d", len(gotHeaders)) } if gotHeaders["Authorization"] != "Bearer test" { t.Errorf("expected HTTP header Authorization to be \"Bearer test\", got %q", gotHeaders["Authorization"])