Skip to content

Commit abffabe

Browse files
committed
Adding more configuration to handle different cluster types
1 parent 6ad1cfe commit abffabe

3 files changed

Lines changed: 31 additions & 27 deletions

File tree

connection_producer.go

Lines changed: 21 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -15,16 +15,19 @@ import (
1515
)
1616

1717
type couchbaseCapellaDBConnectionProducer struct {
18-
AccessKey string `json:"access_key"`
19-
SecretKey string `json:"secret_key"`
20-
ClusterID string `json:"cluster_id"`
21-
Hosts string `json:"hosts"`
22-
Username string `json:"username"`
23-
Password string `json:"password"`
24-
TLS bool `json:"tls"`
25-
InsecureTLS bool `json:"insecure_tls"`
26-
Base64Pem string `json:"base64pem"`
27-
BucketName string `json:"bucket_name"`
18+
AccessKey string `json:"access_key"`
19+
SecretKey string `json:"secret_key"`
20+
ClusterID string `json:"cluster_id"`
21+
ClusterType string `json:"cluster_type"`
22+
CloudAPIBaseURL string `json:"cloud_api_base_url"`
23+
CloudAPIClustersPath string `json:"cloud_api_clusters_path"`
24+
Hosts string `json:"hosts"`
25+
Username string `json:"username"`
26+
Password string `json:"password"`
27+
TLS bool `json:"tls"`
28+
InsecureTLS bool `json:"insecure_tls"`
29+
Base64Pem string `json:"base64pem"`
30+
BucketName string `json:"bucket_name"`
2831

2932
Initialized bool
3033
rawConfig map[string]interface{}
@@ -70,6 +73,14 @@ func (c *couchbaseCapellaDBConnectionProducer) Init(ctx context.Context, initCon
7073
return nil, fmt.Errorf("access_key cannot be empty")
7174
case len(c.SecretKey) == 0:
7275
return nil, fmt.Errorf("secret_key cannot be empty")
76+
case len(c.CloudAPIBaseURL) == 0:
77+
c.CloudAPIBaseURL = "https://cloudapi.cloud.couchbase.com"
78+
case len(c.ClusterType) == 0:
79+
c.ClusterType = "provisioned"
80+
case len(c.CloudAPIClustersPath) == 0 && c.ClusterType == "provisioned":
81+
c.CloudAPIClustersPath = "/v3/clusters"
82+
case len(c.CloudAPIClustersPath) == 0 && c.ClusterType == "invpc":
83+
c.CloudAPIClustersPath = "/v2/clusters"
7384
}
7485

7586
if c.TLS {

couchbasecapella.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -121,9 +121,10 @@ func (c *CouchbaseCapellaDB) DeleteUser(ctx context.Context, req dbplugin.Delete
121121
c.RLock()
122122
defer c.RUnlock()
123123

124-
err := DeleteCapellaUser("https://cloudapi.cloud.couchbase.com", c.couchbaseCapellaDBConnectionProducer.ClusterID,
124+
err := DeleteCapellaUser(c.CloudAPIBaseURL, c.couchbaseCapellaDBConnectionProducer.ClusterID,
125125
c.couchbaseCapellaDBConnectionProducer.AccessKey,
126126
c.couchbaseCapellaDBConnectionProducer.SecretKey,
127+
c.couchbaseCapellaDBConnectionProducer.CloudAPIClustersPath,
127128
req.Username)
128129
if err != nil {
129130
return dbplugin.DeleteUserResponse{}, err
@@ -147,7 +148,7 @@ func newUser(ctx context.Context, c *couchbaseCapellaDBConnectionProducer, usern
147148
return errwrap.Wrapf("error unmarshalling roles and groups creation statement JSON: {{err}}", err)
148149
}
149150

150-
err = CreateCapellaUser("https://cloudapi.cloud.couchbase.com", c.ClusterID, c.AccessKey, c.SecretKey, "*", username, req.Password, "")
151+
err = CreateCapellaUser(c.CloudAPIBaseURL, c.ClusterID, c.AccessKey, c.SecretKey, c.CloudAPIClustersPath, "*", username, req.Password, "")
151152
if err != nil {
152153
return err
153154
}

httputils.go

Lines changed: 7 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import (
77
"io/ioutil"
88
"net/http"
99
"net/url"
10-
"os"
1110
"strings"
1211
"testing"
1312
"time"
@@ -180,7 +179,6 @@ const (
180179
headerKeyTimestamp = "Couchbase-Timestamp"
181180
headerKeyAuthorization = "Authorization"
182181
headerKeyContentType = "Content-Type"
183-
clusterAPIEndpoint = "/v3/clusters/"
184182
)
185183

186184
type CapellaClient struct {
@@ -191,12 +189,6 @@ type CapellaClient struct {
191189
}
192190

193191
func NewClient(baseURL, access, secret string) *CapellaClient {
194-
if baseURL == "" {
195-
defaultBaseUrl := "https://cloudapi.cloud.couchbase.com"
196-
if baseURL = os.Getenv("BASE_URL"); baseURL == "" {
197-
baseURL = defaultBaseUrl
198-
}
199-
}
200192
return &CapellaClient{
201193
baseURL: baseURL,
202194
access: access,
@@ -267,7 +259,7 @@ type UserCreateAccess struct {
267259
}
268260

269261
func CreateCapellaUser(baseUrl string, clusterID string, accessKey string, secretKey,
270-
bucketName string, username string, password string, roleName string) error {
262+
cloudAPIclustersEndPoint string, bucketName string, username string, password string, roleName string) error {
271263

272264
c := NewCapellaClient(baseUrl, accessKey, secretKey)
273265
if c == nil {
@@ -296,16 +288,16 @@ func CreateCapellaUser(baseUrl string, clusterID string, accessKey string, secre
296288
}
297289
}
298290

299-
resp, err := c.Do(http.MethodPost, clusterAPIEndpoint+clusterID+"/users", userCreatePayload)
291+
resp, err := c.Do(http.MethodPost, cloudAPIclustersEndPoint+"/"+clusterID+"/users", userCreatePayload)
300292
if resp != nil && resp.StatusCode != 201 {
301293
defer resp.Body.Close()
302294
b, err1 := io.ReadAll(resp.Body)
303295
if err1 != nil {
304296
return fmt.Errorf("Failed during capella user creation, reading response error = %v, ep = %s, user = %v",
305-
err1, clusterAPIEndpoint+clusterID+"/users", userCreatePayload.Username)
297+
err1, cloudAPIclustersEndPoint+"/"+clusterID+"/users", userCreatePayload.Username)
306298
}
307299
return fmt.Errorf("Failed during capella user creation, response = %s, ep = %s, user = %v",
308-
string(b), clusterAPIEndpoint+clusterID+"/users", userCreatePayload.Username)
300+
string(b), cloudAPIclustersEndPoint+"/"+clusterID+"/users", userCreatePayload.Username)
309301
}
310302
if err != nil {
311303
return err
@@ -314,12 +306,12 @@ func CreateCapellaUser(baseUrl string, clusterID string, accessKey string, secre
314306
return nil
315307
}
316308

317-
func DeleteCapellaUser(baseUrl string, clusterID string, accessKey string, secretKey, username string) error {
309+
func DeleteCapellaUser(baseUrl string, clusterID string, accessKey string, secretKey, cloudAPIclustersEndPoint string, username string) error {
318310
c := NewCapellaClient(baseUrl, accessKey, secretKey)
319-
resp, err := c.Do(http.MethodDelete, clusterAPIEndpoint+clusterID+"/users/"+username, nil)
311+
resp, err := c.Do(http.MethodDelete, cloudAPIclustersEndPoint+"/"+clusterID+"/users/"+username, nil)
320312
if resp != nil && resp.StatusCode != 204 {
321313
return fmt.Errorf("Failed during capella user deletion, response = %v, ep = %s",
322-
resp, clusterAPIEndpoint+clusterID+"/users/"+username)
314+
resp, cloudAPIclustersEndPoint+"/"+clusterID+"/users/"+username)
323315
}
324316
if err != nil {
325317
return err

0 commit comments

Comments
 (0)