Merge pull request #22272 from hashicorp/f-httpclient-ua

httpclient: Introduce composable UserAgent()
This commit is contained in:
Radek Simko 2019-08-12 20:20:03 +01:00 committed by GitHub
commit 98a796c3a3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 49 additions and 4 deletions

View File

@ -13,6 +13,7 @@ import (
const userAgentFormat = "Terraform/%s" const userAgentFormat = "Terraform/%s"
const uaEnvVar = "TF_APPEND_USER_AGENT" const uaEnvVar = "TF_APPEND_USER_AGENT"
// Deprecated: Use UserAgent(version) instead
func UserAgentString() string { func UserAgentString() string {
ua := fmt.Sprintf(userAgentFormat, version.Version) ua := fmt.Sprintf(userAgentFormat, version.Version)
@ -39,3 +40,17 @@ func (rt *userAgentRoundTripper) RoundTrip(req *http.Request) (*http.Response, e
log.Printf("[TRACE] HTTP client %s request to %s", req.Method, req.URL.String()) log.Printf("[TRACE] HTTP client %s request to %s", req.Method, req.URL.String())
return rt.inner.RoundTrip(req) return rt.inner.RoundTrip(req)
} }
func TerraformUserAgent(version string) string {
ua := fmt.Sprintf("HashiCorp Terraform/%s (+https://www.terraform.io)", version)
if add := os.Getenv(uaEnvVar); add != "" {
add = strings.TrimSpace(add)
if len(add) > 0 {
ua += " " + add
log.Printf("[DEBUG] Using modified User-Agent: %s", ua)
}
}
return ua
}

View File

@ -43,5 +43,36 @@ func TestUserAgentString_env(t *testing.T) {
} }
}) })
} }
}
func TestUserAgentAppendViaEnvVar(t *testing.T) {
if oldenv, isSet := os.LookupEnv(uaEnvVar); isSet {
defer os.Setenv(uaEnvVar, oldenv)
} else {
defer os.Unsetenv(uaEnvVar)
}
expectedBase := "HashiCorp Terraform/0.0.0 (+https://www.terraform.io)"
testCases := []struct {
envVarValue string
expected string
}{
{"", expectedBase},
{" ", expectedBase},
{" \n", expectedBase},
{"test/1", expectedBase + " test/1"},
{"test/1 (comment)", expectedBase + " test/1 (comment)"},
}
for i, tc := range testCases {
t.Run(fmt.Sprintf("%d", i), func(t *testing.T) {
os.Unsetenv(uaEnvVar)
os.Setenv(uaEnvVar, tc.envVarValue)
givenUA := TerraformUserAgent("0.0.0")
if givenUA != tc.expected {
t.Fatalf("Expected User-Agent '%s' does not match '%s'", tc.expected, givenUA)
}
})
}
} }

View File

@ -6,8 +6,7 @@ import (
// Generate a UserAgent string // Generate a UserAgent string
// //
// Deprecated: Use httpclient.UserAgentString if you are setting your // Deprecated: Use httpclient.UserAgent(version) instead
// own User-Agent header.
func UserAgentString() string { func UserAgentString() string {
return httpclient.UserAgentString() return httpclient.UserAgentString()
} }

View File

@ -4,7 +4,7 @@ import (
"github.com/hashicorp/terraform/version" "github.com/hashicorp/terraform/version"
) )
// TODO: update providers to use the version package directly // Deprecated: Providers should use schema.Provider.TerraformVersion instead
func VersionString() string { func VersionString() string {
return version.String() return version.String()
} }