Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 10 additions & 0 deletions .changesets/1789537146-da471faf.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
id: 1789537146-da471faf
features:
- core
targets:
- terraform
type: fix
bump: patch
description: stop provider Configure mutating the global http.DefaultClient and http.DefaultTransport
author: byron-lambda
date: "2026-09-16"
11 changes: 8 additions & 3 deletions templates/templates/terraform/provider/provider.go.stmpl
Original file line number Diff line number Diff line change
Expand Up @@ -67,16 +67,21 @@ func (p *{{sanitizeClassName .Global.Config.PackageName}}Provider) Configure(ctx
{{ templateProviderConfigureGlobals .Global.AST.MainSDK.Globals }}
{{ templateProviderConfigureSecurity .Global.AST.MainSDK.Security }}

// Configure owns its transport: clone the default so provider-specific
// settings (headers, TLS skip verification) never mutate process globals.
transport := http.DefaultTransport
if t, ok := transport.(*http.Transport); ok {
transport = t.Clone()
}
providerHTTPTransportOpts := ProviderHTTPTransportOpts{
SetHeaders: make(map[string]string),
Transport: http.DefaultTransport,
Transport: transport,
}

{{ templateProviderHTTPTransportOptsSetHeaders .Local "data" "providerHTTPTransportOpts" }}
{{ templateProviderHTTPTransportTlsSkipVerify .Local "data" "providerHTTPTransportOpts" }}

httpClient := http.DefaultClient
httpClient.Transport = NewProviderHTTPTransport(providerHTTPTransportOpts)
httpClient := &http.Client{Transport: NewProviderHTTPTransport(providerHTTPTransportOpts)}
Comment thread
cubic-dev-ai[bot] marked this conversation as resolved.

{{ templateProviderConfigureSDKOptions .Global.AST.MainSDK }}

Expand Down
2 changes: 1 addition & 1 deletion zSDKs/terraform-provider-testing/.speakeasy/gen.lock
Original file line number Diff line number Diff line change
Expand Up @@ -1048,7 +1048,7 @@ trackedFiles:
internal/provider/patch_resource_sdk.go:
last_write_checksum: sha1:9b583e2ac47191350373ce5a86408c118bd606b1
internal/provider/provider.go:
last_write_checksum: sha1:165aa656ebff0c9e83540c0fececc3cf4ab7eeeb
last_write_checksum: sha1:1da048473254e15222459129544e6a54163e660d
internal/provider/reflect/diags.go:
last_write_checksum: sha1:ace8bc53054bb1d8ee8689acf3e4323de75a6297
internal/provider/reflect/doc.go:
Expand Down
11 changes: 8 additions & 3 deletions zSDKs/terraform-provider-testing/internal/provider/provider.go
Original file line number Diff line number Diff line change
Expand Up @@ -632,9 +632,15 @@ func (p *TestingProvider) Configure(ctx context.Context, req provider.ConfigureR

security.Custom = custom

// Configure owns its transport: clone the default so provider-specific
// settings (headers, TLS skip verification) never mutate process globals.
transport := http.DefaultTransport
if t, ok := transport.(*http.Transport); ok {
transport = t.Clone()
}
providerHTTPTransportOpts := ProviderHTTPTransportOpts{
SetHeaders: make(map[string]string),
Transport: http.DefaultTransport,
Transport: transport,
}

resp.Diagnostics.Append(data.HTTPHeaders.ElementsAs(ctx, &providerHTTPTransportOpts.SetHeaders, false)...)
Expand All @@ -648,8 +654,7 @@ func (p *TestingProvider) Configure(ctx context.Context, req provider.ConfigureR
transport.TLSClientConfig.InsecureSkipVerify = data.TLSSkipVerify.ValueBool()
}

httpClient := http.DefaultClient
httpClient.Transport = NewProviderHTTPTransport(providerHTTPTransportOpts)
httpClient := &http.Client{Transport: NewProviderHTTPTransport(providerHTTPTransportOpts)}

opts := []sdk.SDKOption{
sdk.WithTemplatedServerURL(serverUrl, serverUrlParams),
Expand Down
Loading