@@ -20,7 +20,10 @@ import (
2020 "net/http"
2121)
2222
23- const dataLakesBasePath = "api/atlas/v1.0/groups"
23+ const (
24+ dataLakesBasePath = "api/atlas/v1.0/groups"
25+ privateLinkEndpointsDataLakePath = "api/atlas/v1.0/groups/%s/privateNetworkSettings/endpointIds"
26+ )
2427
2528// DataLakeService is an interface for interfacing with the Data Lake endpoints of the MongoDB Atlas API.
2629//
@@ -31,12 +34,18 @@ type DataLakeService interface {
3134 Create (context.Context , string , * DataLakeCreateRequest ) (* DataLake , * Response , error )
3235 Update (context.Context , string , string , * DataLakeUpdateRequest ) (* DataLake , * Response , error )
3336 Delete (context.Context , string , string ) (* Response , error )
37+ CreatePrivateLinkEndpoint (context.Context , string , * PrivateLinkEndpointDataLake ) (* PrivateLinkEndpointDataLakeResponse , * Response , error )
38+ GetPrivateLinkEndpoint (context.Context , string , string ) (* PrivateLinkEndpointDataLake , * Response , error )
39+ ListPrivateLinkEndpoint (context.Context , string ) (* PrivateLinkEndpointDataLakeResponse , * Response , error )
40+ DeletePrivateLinkEndpoint (context.Context , string , string ) (* Response , error )
3441}
3542
3643// DataLakeServiceOp handles communication with the DataLakeService related methods of the
3744// MongoDB Atlas API.
3845type DataLakeServiceOp service
3946
47+ var _ DataLakeService = & DataLakeServiceOp {}
48+
4049// AwsCloudProviderConfig is the data lake configuration for AWS.
4150type AwsCloudProviderConfig struct {
4251 ExternalID string `json:"externalId,omitempty"`
@@ -126,6 +135,21 @@ type DataLakeCreateRequest struct {
126135 CloudProviderConfig * CloudProviderConfig `json:"cloudProviderConfig,omitempty"`
127136}
128137
138+ // PrivateLinkEndpointDataLakeResponse represents MongoDB Private Endpoint Connection to DataLake.
139+ type PrivateLinkEndpointDataLakeResponse struct {
140+ Links []* Link `json:"links,omitempty"`
141+ Results []* PrivateLinkEndpointDataLake `json:"results"`
142+ TotalCount int `json:"totalCount"`
143+ }
144+
145+ // PrivateLinkEndpointDataLake represents the private link result for data lake.
146+ type PrivateLinkEndpointDataLake struct {
147+ Comment string `json:"comment,omitempty"`
148+ EndpointID string `json:"endpointId,omitempty"`
149+ Provider string `json:"provider,omitempty"`
150+ Type string `json:"type,omitempty"`
151+ }
152+
129153// List gets all data lakes for the specified group.
130154//
131155// See more: https://docs.mongodb.com/datalake/reference/api/dataLakes-get-all-tenants
@@ -256,3 +280,104 @@ func (s *DataLakeServiceOp) Delete(ctx context.Context, groupID, name string) (*
256280
257281 return resp , err
258282}
283+
284+ // CreatePrivateLinkEndpoint creates one private link endpoint in Data Lake Atlas project.
285+ //
286+ // See more: https://docs.mongodb.com/datalake/reference/api/dataLakes-private-link-create-one/#std-label-api-pvt-link-create-one
287+ func (s * DataLakeServiceOp ) CreatePrivateLinkEndpoint (ctx context.Context , groupID string , createRequest * PrivateLinkEndpointDataLake ) (* PrivateLinkEndpointDataLakeResponse , * Response , error ) {
288+ if groupID == "" {
289+ return nil , nil , NewArgError ("groupID" , "must be set" )
290+ }
291+ if createRequest == nil {
292+ return nil , nil , NewArgError ("createRequest" , "must be set" )
293+ }
294+
295+ path := fmt .Sprintf (privateLinkEndpointsDataLakePath , groupID )
296+
297+ req , err := s .Client .NewRequest (ctx , http .MethodPost , path , createRequest )
298+ if err != nil {
299+ return nil , nil , err
300+ }
301+
302+ root := new (PrivateLinkEndpointDataLakeResponse )
303+ resp , err := s .Client .Do (ctx , req , root )
304+ if err != nil {
305+ return nil , resp , err
306+ }
307+
308+ return root , resp , err
309+ }
310+
311+ // DeletePrivateLinkEndpoint deletes the Data Lake private link endpoint with a given endpoint id.
312+ //
313+ // See more: https://docs.mongodb.com/datalake/reference/api/dataLakes-private-link-delete-one/#std-label-api-pvt-link-delete-one
314+ func (s * DataLakeServiceOp ) DeletePrivateLinkEndpoint (ctx context.Context , groupID , endpointID string ) (* Response , error ) {
315+ if groupID == "" {
316+ return nil , NewArgError ("groupId" , "must be set" )
317+ }
318+ if endpointID == "" {
319+ return nil , NewArgError ("endpointID" , "must be set" )
320+ }
321+
322+ path := fmt .Sprintf ("%s/%s" , fmt .Sprintf (privateLinkEndpointsDataLakePath , groupID ), endpointID )
323+
324+ req , err := s .Client .NewRequest (ctx , http .MethodDelete , path , nil )
325+ if err != nil {
326+ return nil , err
327+ }
328+
329+ resp , err := s .Client .Do (ctx , req , nil )
330+
331+ return resp , err
332+ }
333+
334+ // ListPrivateLinkEndpoint gets all private link endpoints for data lake for the specified group.
335+ //
336+ // See more: https://docs.atlas.mongodb.com/reference/api/online-archive-private-link-get-all/#std-label-api-online-archive-pvt-link-get-all
337+ func (s * DataLakeServiceOp ) ListPrivateLinkEndpoint (ctx context.Context , groupID string ) (* PrivateLinkEndpointDataLakeResponse , * Response , error ) {
338+ if groupID == "" {
339+ return nil , nil , NewArgError ("groupID" , "must be set" )
340+ }
341+
342+ path := fmt .Sprintf (privateLinkEndpointsDataLakePath , groupID )
343+
344+ req , err := s .Client .NewRequest (ctx , http .MethodGet , path , nil )
345+ if err != nil {
346+ return nil , nil , err
347+ }
348+
349+ var root = new (PrivateLinkEndpointDataLakeResponse )
350+ resp , err := s .Client .Do (ctx , req , root )
351+ if err != nil {
352+ return root , resp , err
353+ }
354+
355+ return root , resp , nil
356+ }
357+
358+ // GetPrivateLinkEndpoint gets the data lake private link endpoint associated with a specific group and endpointID.
359+ //
360+ // See more: https://docs.mongodb.com/datalake/reference/api/dataLakes-private-link-get-one/#std-label-api-pvt-link-get-one
361+ func (s * DataLakeServiceOp ) GetPrivateLinkEndpoint (ctx context.Context , groupID , endpointID string ) (* PrivateLinkEndpointDataLake , * Response , error ) {
362+ if groupID == "" {
363+ return nil , nil , NewArgError ("groupID" , "must be set" )
364+ }
365+ if endpointID == "" {
366+ return nil , nil , NewArgError ("endpointID" , "must be set" )
367+ }
368+
369+ path := fmt .Sprintf ("%s/%s" , fmt .Sprintf (privateLinkEndpointsDataLakePath , groupID ), endpointID )
370+
371+ req , err := s .Client .NewRequest (ctx , http .MethodGet , path , nil )
372+ if err != nil {
373+ return nil , nil , err
374+ }
375+
376+ root := new (PrivateLinkEndpointDataLake )
377+ resp , err := s .Client .Do (ctx , req , root )
378+ if err != nil {
379+ return nil , resp , err
380+ }
381+
382+ return root , resp , err
383+ }
0 commit comments