@@ -6,25 +6,25 @@ import (
6
6
"fmt"
7
7
"net/http"
8
8
"net/url"
9
+ "strings"
9
10
"time"
10
11
11
- "github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging"
12
- "github.com/mongodb-forks/digest"
13
- "github.com/mongodb/terraform-provider-mongodbatlas/version"
14
- "github.com/spf13/cast"
15
12
admin20231001002 "go.mongodb.org/atlas-sdk/v20231001002/admin"
16
13
"go.mongodb.org/atlas-sdk/v20231115008/admin"
17
14
matlasClient "go.mongodb.org/atlas/mongodbatlas"
18
15
realmAuth "go.mongodb.org/realm/auth"
19
16
"go.mongodb.org/realm/realm"
20
- )
21
17
22
- const (
23
- toolName = "terraform-provider-mongodbatlas"
18
+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/logging"
19
+ "github.com/mongodb-forks/digest"
20
+ "github.com/spf13/cast"
21
+
22
+ "github.com/mongodb/terraform-provider-mongodbatlas/version"
24
23
)
25
24
26
- var (
27
- userAgent = fmt .Sprintf ("%s/%s" , toolName , version .ProviderVersion )
25
+ const (
26
+ toolName = "terraform-provider-mongodbatlas"
27
+ terraformPlatformName = "Terraform"
28
28
)
29
29
30
30
// MongoDBClient contains the mongodbatlas clients and configurations
@@ -37,12 +37,13 @@ type MongoDBClient struct {
37
37
38
38
// Config contains the configurations needed to use SDKs
39
39
type Config struct {
40
- AssumeRole * AssumeRole
41
- ProxyPort * int
42
- PublicKey string
43
- PrivateKey string
44
- BaseURL string
45
- RealmBaseURL string
40
+ AssumeRole * AssumeRole
41
+ ProxyPort * int
42
+ PublicKey string
43
+ PrivateKey string
44
+ BaseURL string
45
+ RealmBaseURL string
46
+ TerraformVersion string
46
47
}
47
48
48
49
type AssumeRole struct {
@@ -62,6 +63,11 @@ type SecretData struct {
62
63
PrivateKey string `json:"private_key"`
63
64
}
64
65
66
+ type PlatformVersion struct {
67
+ Name string
68
+ Version string
69
+ }
70
+
65
71
// NewClient func...
66
72
func (c * Config ) NewClient (ctx context.Context ) (any , error ) {
67
73
// setup a transport to handle digest
@@ -83,7 +89,7 @@ func (c *Config) NewClient(ctx context.Context) (any, error) {
83
89
84
90
client .Transport = logging .NewTransport ("MongoDB Atlas" , transport )
85
91
86
- optsAtlas := []matlasClient.ClientOpt {matlasClient .SetUserAgent (userAgent )}
92
+ optsAtlas := []matlasClient.ClientOpt {matlasClient .SetUserAgent (userAgent ( c ) )}
87
93
if c .BaseURL != "" {
88
94
optsAtlas = append (optsAtlas , matlasClient .SetBaseURL (c .BaseURL ))
89
95
}
@@ -116,7 +122,7 @@ func (c *Config) NewClient(ctx context.Context) (any, error) {
116
122
func (c * Config ) newSDKV2Client (client * http.Client ) (* admin.APIClient , error ) {
117
123
opts := []admin.ClientModifier {
118
124
admin .UseHTTPClient (client ),
119
- admin .UseUserAgent (userAgent ),
125
+ admin .UseUserAgent (userAgent ( c ) ),
120
126
admin .UseBaseURL (c .BaseURL ),
121
127
admin .UseDebug (false )}
122
128
@@ -132,7 +138,7 @@ func (c *Config) newSDKV2Client(client *http.Client) (*admin.APIClient, error) {
132
138
func (c * Config ) newSDK20231001002Client (client * http.Client ) (* admin20231001002.APIClient , error ) {
133
139
opts := []admin20231001002.ClientModifier {
134
140
admin20231001002 .UseHTTPClient (client ),
135
- admin20231001002 .UseUserAgent (userAgent ),
141
+ admin20231001002 .UseUserAgent (userAgent ( c ) ),
136
142
admin20231001002 .UseBaseURL (c .BaseURL ),
137
143
admin20231001002 .UseDebug (false )}
138
144
@@ -151,7 +157,8 @@ func (c *MongoDBClient) GetRealmClient(ctx context.Context) (*realm.Client, erro
151
157
return nil , errors .New ("please set `public_key` and `private_key` in order to use the realm client" )
152
158
}
153
159
154
- optsRealm := []realm.ClientOpt {realm .SetUserAgent (userAgent )}
160
+ optsRealm := []realm.ClientOpt {realm .SetUserAgent (userAgent (c .Config ))}
161
+
155
162
authConfig := realmAuth .NewConfig (nil )
156
163
if c .Config .BaseURL != "" && c .Config .RealmBaseURL != "" {
157
164
adminURL := c .Config .RealmBaseURL + "api/admin/v3.0/"
@@ -175,3 +182,18 @@ func (c *MongoDBClient) GetRealmClient(ctx context.Context) (*realm.Client, erro
175
182
176
183
return realmClient , nil
177
184
}
185
+
186
+ func userAgent (c * Config ) string {
187
+ platformVersions := []PlatformVersion {
188
+ {toolName , version .ProviderVersion },
189
+ {terraformPlatformName , c .TerraformVersion },
190
+ }
191
+
192
+ var parts []string
193
+ for _ , info := range platformVersions {
194
+ part := fmt .Sprintf ("%s/%s" , info .Name , info .Version )
195
+ parts = append (parts , part )
196
+ }
197
+
198
+ return strings .Join (parts , " " )
199
+ }
0 commit comments