Skip to content

Commit

Permalink
chore: migrate project_ip_access_list to new SDK (#1753)
Browse files Browse the repository at this point in the history
* migrate to new SDK

* fix
  • Loading branch information
oarbusi committed Dec 14, 2023
1 parent 0bc0c93 commit 46377e3
Show file tree
Hide file tree
Showing 3 changed files with 50 additions and 50 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ import (
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/validate"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
matlas "go.mongodb.org/atlas/mongodbatlas"
"go.mongodb.org/atlas-sdk/v20231115002/admin"
)

const (
Expand Down Expand Up @@ -114,8 +114,8 @@ func (d *projectIPAccessListDS) Read(ctx context.Context, req datasource.ReadReq
entry.WriteString(databaseDSUserConfig.AWSSecurityGroup.ValueString())
}

conn := d.Client.Atlas
accessList, _, err := conn.ProjectIPAccessList.Get(ctx, databaseDSUserConfig.ProjectID.ValueString(), entry.String())
connV2 := d.Client.AtlasV2
accessList, _, err := connV2.ProjectIPAccessListApi.GetProjectIpList(ctx, databaseDSUserConfig.ProjectID.ValueString(), entry.String()).Execute()
if err != nil {
resp.Diagnostics.AddError("error getting access list entry", err.Error())
return
Expand All @@ -133,25 +133,25 @@ func (d *projectIPAccessListDS) Read(ctx context.Context, req datasource.ReadReq
}
}

func newTFProjectIPAccessListDSModel(ctx context.Context, accessList *matlas.ProjectIPAccessList) (*tfProjectIPAccessListDSModel, diag.Diagnostics) {
func newTFProjectIPAccessListDSModel(ctx context.Context, accessList *admin.NetworkPermissionEntry) (*tfProjectIPAccessListDSModel, diag.Diagnostics) {
databaseUserModel := &tfProjectIPAccessListDSModel{
ProjectID: types.StringValue(accessList.GroupID),
Comment: types.StringValue(accessList.Comment),
CIDRBlock: types.StringValue(accessList.CIDRBlock),
IPAddress: types.StringValue(accessList.IPAddress),
AWSSecurityGroup: types.StringValue(accessList.AwsSecurityGroup),
ProjectID: types.StringValue(accessList.GetGroupId()),
Comment: types.StringValue(accessList.GetComment()),
CIDRBlock: types.StringValue(accessList.GetCidrBlock()),
IPAddress: types.StringValue(accessList.GetIpAddress()),
AWSSecurityGroup: types.StringValue(accessList.GetAwsSecurityGroup()),
}

entry := accessList.CIDRBlock
if accessList.IPAddress != "" {
entry = accessList.IPAddress
} else if accessList.AwsSecurityGroup != "" {
entry = accessList.AwsSecurityGroup
entry := accessList.GetCidrBlock()
if accessList.GetIpAddress() != "" {
entry = accessList.GetIpAddress()
} else if accessList.GetAwsSecurityGroup() != "" {
entry = accessList.GetAwsSecurityGroup()
}

id := conversion.EncodeStateID(map[string]string{
"entry": entry,
"project_id": accessList.GroupID,
"project_id": accessList.GetGroupId(),
})

databaseUserModel.ID = types.StringValue(id)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ import (
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/validate"
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
matlas "go.mongodb.org/atlas/mongodbatlas"
"go.mongodb.org/atlas-sdk/v20231115002/admin"
)

const (
Expand Down Expand Up @@ -143,13 +143,13 @@ func (r *projectIPAccessListRS) Create(ctx context.Context, req resource.CreateR
return
}

conn := r.Client.Atlas
connV2 := r.Client.AtlasV2
projectID := projectIPAccessListModel.ProjectID.ValueString()
stateConf := &retry.StateChangeConf{
Pending: []string{"pending"},
Target: []string{"created", "failed"},
Refresh: func() (any, string, error) {
_, _, err := conn.ProjectIPAccessList.Create(ctx, projectID, newMongoDBProjectIPAccessList(projectIPAccessListModel))
_, _, err := connV2.ProjectIPAccessListApi.CreateProjectIpAccessList(ctx, projectID, newMongoDBProjectIPAccessList(projectIPAccessListModel)).Execute()
if err != nil {
if strings.Contains(err.Error(), "Unexpected error") ||
strings.Contains(err.Error(), "UNEXPECTED_ERROR") ||
Expand All @@ -166,7 +166,7 @@ func (r *projectIPAccessListRS) Create(ctx context.Context, req resource.CreateR
accessListEntry = projectIPAccessListModel.AWSSecurityGroup.ValueString()
}

entry, exists, err := isEntryInProjectAccessList(ctx, conn, projectID, accessListEntry)
entry, exists, err := isEntryInProjectAccessList(ctx, connV2, projectID, accessListEntry)
if err != nil {
if strings.Contains(err.Error(), "500") {
return nil, "pending", nil
Expand Down Expand Up @@ -194,7 +194,7 @@ func (r *projectIPAccessListRS) Create(ctx context.Context, req resource.CreateR
return
}

entry, ok := accessList.(*matlas.ProjectIPAccessList)
entry, ok := accessList.(*admin.NetworkPermissionEntry)
if !ok {
resp.Diagnostics.AddError("error", errorAccessListCreate)
return
Expand All @@ -207,37 +207,37 @@ func (r *projectIPAccessListRS) Create(ctx context.Context, req resource.CreateR
}
}

func newTFProjectIPAccessListModel(projectIPAccessListModel *tfProjectIPAccessListModel, projectIPAccessList *matlas.ProjectIPAccessList) *tfProjectIPAccessListModel {
entry := projectIPAccessList.IPAddress
if projectIPAccessList.CIDRBlock != "" {
entry = projectIPAccessList.CIDRBlock
} else if projectIPAccessList.AwsSecurityGroup != "" {
entry = projectIPAccessList.AwsSecurityGroup
func newTFProjectIPAccessListModel(projectIPAccessListModel *tfProjectIPAccessListModel, projectIPAccessList *admin.NetworkPermissionEntry) *tfProjectIPAccessListModel {
entry := projectIPAccessList.GetIpAddress()
if projectIPAccessList.GetCidrBlock() != "" {
entry = projectIPAccessList.GetCidrBlock()
} else if projectIPAccessList.GetAwsSecurityGroup() != "" {
entry = projectIPAccessList.GetAwsSecurityGroup()
}

id := conversion.EncodeStateID(map[string]string{
"entry": entry,
"project_id": projectIPAccessList.GroupID,
"project_id": projectIPAccessList.GetGroupId(),
})

return &tfProjectIPAccessListModel{
ID: types.StringValue(id),
ProjectID: types.StringValue(projectIPAccessList.GroupID),
CIDRBlock: types.StringValue(projectIPAccessList.CIDRBlock),
IPAddress: types.StringValue(projectIPAccessList.IPAddress),
AWSSecurityGroup: types.StringValue(projectIPAccessList.AwsSecurityGroup),
Comment: types.StringValue(projectIPAccessList.Comment),
ProjectID: types.StringValue(projectIPAccessList.GetGroupId()),
CIDRBlock: types.StringValue(projectIPAccessList.GetCidrBlock()),
IPAddress: types.StringValue(projectIPAccessList.GetIpAddress()),
AWSSecurityGroup: types.StringValue(projectIPAccessList.GetAwsSecurityGroup()),
Comment: types.StringValue(projectIPAccessList.GetComment()),
Timeouts: projectIPAccessListModel.Timeouts,
}
}

func newMongoDBProjectIPAccessList(projectIPAccessListModel *tfProjectIPAccessListModel) []*matlas.ProjectIPAccessList {
return []*matlas.ProjectIPAccessList{
func newMongoDBProjectIPAccessList(projectIPAccessListModel *tfProjectIPAccessListModel) *[]admin.NetworkPermissionEntry {
return &[]admin.NetworkPermissionEntry{
{
AwsSecurityGroup: projectIPAccessListModel.AWSSecurityGroup.ValueString(),
CIDRBlock: projectIPAccessListModel.CIDRBlock.ValueString(),
IPAddress: projectIPAccessListModel.IPAddress.ValueString(),
Comment: projectIPAccessListModel.Comment.ValueString(),
AwsSecurityGroup: conversion.StringPtr(projectIPAccessListModel.AWSSecurityGroup.ValueString()),
CidrBlock: conversion.StringPtr(projectIPAccessListModel.CIDRBlock.ValueString()),
IpAddress: conversion.StringPtr(projectIPAccessListModel.IPAddress.ValueString()),
Comment: conversion.StringPtr(projectIPAccessListModel.Comment.ValueString()),
},
}
}
Expand All @@ -261,9 +261,9 @@ func (r *projectIPAccessListRS) Read(ctx context.Context, req resource.ReadReque
return
}

conn := r.Client.Atlas
connV2 := r.Client.AtlasV2
err := retry.RetryContext(ctx, timeout, func() *retry.RetryError {
accessList, httpResponse, err := conn.ProjectIPAccessList.Get(ctx, decodedIDMap["project_id"], decodedIDMap["entry"])
accessList, httpResponse, err := connV2.ProjectIPAccessListApi.GetProjectIpList(ctx, decodedIDMap["project_id"], decodedIDMap["entry"]).Execute()
if err != nil {
// case 404
// deleted in the backend case
Expand Down Expand Up @@ -306,7 +306,7 @@ func (r *projectIPAccessListRS) Delete(ctx context.Context, req resource.DeleteR
entry = projectIPAccessListModelState.AWSSecurityGroup.ValueString()
}

conn := r.Client.Atlas
connV2 := r.Client.AtlasV2
projectID := projectIPAccessListModelState.ProjectID.ValueString()

timeout, diags := projectIPAccessListModelState.Timeouts.Delete(ctx, projectIPAccessListTimeout)
Expand All @@ -316,7 +316,7 @@ func (r *projectIPAccessListRS) Delete(ctx context.Context, req resource.DeleteR
}

err := retry.RetryContext(ctx, timeout, func() *retry.RetryError {
httpResponse, err := conn.ProjectIPAccessList.Delete(ctx, projectID, entry)
_, httpResponse, err := connV2.ProjectIPAccessListApi.DeleteProjectIpAccessList(ctx, projectID, entry).Execute()
if err != nil {
if httpResponse != nil && httpResponse.StatusCode == http.StatusInternalServerError {
return retry.RetryableError(err)
Expand All @@ -330,7 +330,7 @@ func (r *projectIPAccessListRS) Delete(ctx context.Context, req resource.DeleteR
return retry.NonRetryableError(fmt.Errorf(errorAccessListDelete, err))
}

entry, httpResponse, err := conn.ProjectIPAccessList.Get(ctx, projectID, entry)
entry, httpResponse, err := connV2.ProjectIPAccessListApi.GetProjectIpList(ctx, projectID, entry).Execute()
if err != nil {
if httpResponse != nil && httpResponse.StatusCode == http.StatusNotFound {
return nil
Expand Down Expand Up @@ -368,10 +368,10 @@ func (r *projectIPAccessListRS) ImportState(ctx context.Context, req resource.Im
}))...)
}

func isEntryInProjectAccessList(ctx context.Context, conn *matlas.Client, projectID, entry string) (*matlas.ProjectIPAccessList, bool, error) {
var out matlas.ProjectIPAccessList
func isEntryInProjectAccessList(ctx context.Context, connV2 *admin.APIClient, projectID, entry string) (*admin.NetworkPermissionEntry, bool, error) {
var out admin.NetworkPermissionEntry
err := retry.RetryContext(ctx, projectIPAccessListRetry, func() *retry.RetryError {
accessList, httpResponse, err := conn.ProjectIPAccessList.Get(ctx, projectID, entry)
accessList, httpResponse, err := connV2.ProjectIPAccessListApi.GetProjectIpList(ctx, projectID, entry).Execute()
if err != nil {
switch {
case httpResponse != nil && httpResponse.StatusCode == http.StatusInternalServerError:
Expand Down
8 changes: 4 additions & 4 deletions internal/testutil/acc/project_ip_acces_list.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import (

func CheckProjectIPAccessListExists(resourceName string) resource.TestCheckFunc {
return func(s *terraform.State) error {
conn := TestMongoDBClient.(*config.MongoDBClient).Atlas
connV2 := TestMongoDBClient.(*config.MongoDBClient).AtlasV2

rs, ok := s.RootModule().Resources[resourceName]
if !ok {
Expand All @@ -25,7 +25,7 @@ func CheckProjectIPAccessListExists(resourceName string) resource.TestCheckFunc

ids := conversion.DecodeStateID(rs.Primary.ID)

_, _, err := conn.ProjectIPAccessList.Get(context.Background(), ids["project_id"], ids["entry"])
_, _, err := connV2.ProjectIPAccessListApi.GetProjectIpList(context.Background(), ids["project_id"], ids["entry"]).Execute()
if err != nil {
return fmt.Errorf("project ip access list entry (%s) does not exist", ids["entry"])
}
Expand All @@ -35,7 +35,7 @@ func CheckProjectIPAccessListExists(resourceName string) resource.TestCheckFunc
}

func CheckDestroyProjectIPAccessList(s *terraform.State) error {
conn := TestMongoDBClient.(*config.MongoDBClient).Atlas
connV2 := TestMongoDBClient.(*config.MongoDBClient).AtlasV2

for _, rs := range s.RootModule().Resources {
if rs.Type != "mongodbatlas_project_ip_access_list" {
Expand All @@ -44,7 +44,7 @@ func CheckDestroyProjectIPAccessList(s *terraform.State) error {

ids := conversion.DecodeStateID(rs.Primary.ID)

_, _, err := conn.ProjectIPAccessList.Get(context.Background(), ids["project_id"], ids["entry"])
_, _, err := connV2.ProjectIPAccessListApi.GetProjectIpList(context.Background(), ids["project_id"], ids["entry"]).Execute()
if err == nil {
return fmt.Errorf("project ip access list entry (%s) still exists", ids["entry"])
}
Expand Down

0 comments on commit 46377e3

Please sign in to comment.