Skip to content

Commit

Permalink
Add Grafana-Terraform-Provider-Version header (#1700)
Browse files Browse the repository at this point in the history
* Add `Grafana-Terraform-Provider-Version` header
Closes #1694

* Fix unit test
  • Loading branch information
julienduchesne authored Jul 19, 2024
1 parent 66c9b05 commit 12d4597
Show file tree
Hide file tree
Showing 4 changed files with 14 additions and 5 deletions.
12 changes: 9 additions & 3 deletions pkg/provider/configure_clients.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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()
Expand Down
2 changes: 2 additions & 0 deletions pkg/provider/framework_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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)
Expand Down
1 change: 1 addition & 0 deletions pkg/provider/legacy_provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
4 changes: 2 additions & 2 deletions pkg/provider/legacy_provider_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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"])
Expand Down

0 comments on commit 12d4597

Please sign in to comment.