Skip to content

Commit e910b23

Browse files
authored
chore: project resource migration to new sdk (#1686)
* read migration to new sdk * lint * fix time conversion * create to new sdk * update to new sdk * delete to new sdk * read of data_source_project to new sdk * data_source_projects to new sdk * remove last references to matlas * final refactors * use getters to avoid pointer operations * paginate * use getters to avoid pointer operations * change pointer access to getter * change pointer access to getter * null check pointer * use only index * add variable * add variable
1 parent 866d5b0 commit e910b23

File tree

3 files changed

+108
-117
lines changed

3 files changed

+108
-117
lines changed

internal/service/project/data_source_project.go

+16-17
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ import (
55
"fmt"
66

77
"go.mongodb.org/atlas-sdk/v20231115002/admin"
8-
matlas "go.mongodb.org/atlas/mongodbatlas"
98

109
"github.com/hashicorp/terraform-plugin-framework-validators/stringvalidator"
1110
"github.com/hashicorp/terraform-plugin-framework/datasource"
1211
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
1312
"github.com/hashicorp/terraform-plugin-framework/path"
1413
"github.com/hashicorp/terraform-plugin-framework/schema/validator"
1514
"github.com/hashicorp/terraform-plugin-framework/types"
15+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
1616
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
1717
)
1818

@@ -144,7 +144,6 @@ func (d *projectDS) Schema(ctx context.Context, req datasource.SchemaRequest, re
144144

145145
func (d *projectDS) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
146146
var projectState tfProjectDSModel
147-
conn := d.Client.Atlas
148147
connV2 := d.Client.AtlasV2
149148

150149
resp.Diagnostics.Append(req.Config.Get(ctx, &projectState)...)
@@ -156,28 +155,28 @@ func (d *projectDS) Read(ctx context.Context, req datasource.ReadRequest, resp *
156155

157156
var (
158157
err error
159-
project *matlas.Project
158+
project *admin.Group
160159
)
161160

162161
if !projectState.ProjectID.IsNull() {
163162
projectID := projectState.ProjectID.ValueString()
164-
project, _, err = conn.Projects.GetOneProject(ctx, projectID)
163+
project, _, err = connV2.ProjectsApi.GetProject(ctx, projectID).Execute()
165164
if err != nil {
166165
resp.Diagnostics.AddError("error when getting project from Atlas", fmt.Sprintf(ErrorProjectRead, projectID, err.Error()))
167166
return
168167
}
169168
} else {
170169
name := projectState.Name.ValueString()
171-
project, _, err = conn.Projects.GetOneProjectByName(ctx, name)
170+
project, _, err = connV2.ProjectsApi.GetProjectByName(ctx, name).Execute()
172171
if err != nil {
173172
resp.Diagnostics.AddError("error when getting project from Atlas", fmt.Sprintf(ErrorProjectRead, name, err.Error()))
174173
return
175174
}
176175
}
177176

178-
atlasTeams, atlasLimits, atlasProjectSettings, err := getProjectPropsFromAPI(ctx, conn, connV2, project.ID)
177+
atlasTeams, atlasLimits, atlasProjectSettings, err := getProjectPropsFromAPI(ctx, connV2, project.GetId())
179178
if err != nil {
180-
resp.Diagnostics.AddError("error when getting project properties", fmt.Sprintf(ErrorProjectRead, project.ID, err.Error()))
179+
resp.Diagnostics.AddError("error when getting project properties", fmt.Sprintf(ErrorProjectRead, project.GetId(), err.Error()))
181180
return
182181
}
183182

@@ -189,15 +188,15 @@ func (d *projectDS) Read(ctx context.Context, req datasource.ReadRequest, resp *
189188
}
190189
}
191190

192-
func newTFProjectDataSourceModel(ctx context.Context, project *matlas.Project,
193-
teams *matlas.TeamsAssigned, projectSettings *matlas.ProjectSettings, limits []admin.DataFederationLimit) tfProjectDSModel {
191+
func newTFProjectDataSourceModel(ctx context.Context, project *admin.Group,
192+
teams *admin.PaginatedTeamRole, projectSettings *admin.GroupSettings, limits []admin.DataFederationLimit) tfProjectDSModel {
194193
return tfProjectDSModel{
195-
ID: types.StringValue(project.ID),
196-
ProjectID: types.StringValue(project.ID),
194+
ID: types.StringValue(project.GetId()),
195+
ProjectID: types.StringValue(project.GetId()),
197196
Name: types.StringValue(project.Name),
198-
OrgID: types.StringValue(project.OrgID),
199-
ClusterCount: types.Int64Value(int64(project.ClusterCount)),
200-
Created: types.StringValue(project.Created),
197+
OrgID: types.StringValue(project.OrgId),
198+
ClusterCount: types.Int64Value(project.ClusterCount),
199+
Created: types.StringValue(conversion.TimeToString(project.Created)),
201200
IsCollectDatabaseSpecificsStatisticsEnabled: types.BoolValue(*projectSettings.IsCollectDatabaseSpecificsStatisticsEnabled),
202201
IsDataExplorerEnabled: types.BoolValue(*projectSettings.IsDataExplorerEnabled),
203202
IsExtendedStorageSizesEnabled: types.BoolValue(*projectSettings.IsExtendedStorageSizesEnabled),
@@ -209,8 +208,8 @@ func newTFProjectDataSourceModel(ctx context.Context, project *matlas.Project,
209208
}
210209
}
211210

212-
func newTFTeamsDataSourceModel(ctx context.Context, atlasTeams *matlas.TeamsAssigned) []*tfTeamDSModel {
213-
if atlasTeams.TotalCount == 0 {
211+
func newTFTeamsDataSourceModel(ctx context.Context, atlasTeams *admin.PaginatedTeamRole) []*tfTeamDSModel {
212+
if atlasTeams.GetTotalCount() == 0 {
214213
return nil
215214
}
216215
teams := make([]*tfTeamDSModel, len(atlasTeams.Results))
@@ -219,7 +218,7 @@ func newTFTeamsDataSourceModel(ctx context.Context, atlasTeams *matlas.TeamsAssi
219218
roleNames, _ := types.ListValueFrom(ctx, types.StringType, atlasTeam.RoleNames)
220219

221220
teams[i] = &tfTeamDSModel{
222-
TeamID: types.StringValue(atlasTeam.TeamID),
221+
TeamID: types.StringValue(atlasTeam.GetTeamId()),
223222
RoleNames: roleNames,
224223
}
225224
}

internal/service/project/data_source_projects.go

+13-13
Original file line numberDiff line numberDiff line change
@@ -8,9 +8,9 @@ import (
88
"github.com/hashicorp/terraform-plugin-framework/datasource/schema"
99
"github.com/hashicorp/terraform-plugin-framework/types"
1010
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/id"
11+
"github.com/mongodb/terraform-provider-mongodbatlas/internal/common/conversion"
1112
"github.com/mongodb/terraform-provider-mongodbatlas/internal/config"
1213
"go.mongodb.org/atlas-sdk/v20231115002/admin"
13-
matlas "go.mongodb.org/atlas/mongodbatlas"
1414
)
1515

1616
const projectsDataSourceName = "projects"
@@ -143,22 +143,21 @@ func (d *ProjectsDS) Schema(ctx context.Context, req datasource.SchemaRequest, r
143143

144144
func (d *ProjectsDS) Read(ctx context.Context, req datasource.ReadRequest, resp *datasource.ReadResponse) {
145145
var stateModel tfProjectsDSModel
146-
conn := d.Client.Atlas
147146
connV2 := d.Client.AtlasV2
148147

149148
resp.Diagnostics.Append(req.Config.Get(ctx, &stateModel)...)
150-
options := &matlas.ListOptions{
151-
PageNum: int(stateModel.PageNum.ValueInt64()),
152-
ItemsPerPage: int(stateModel.ItemsPerPage.ValueInt64()),
153-
}
154149

155-
projectsRes, _, err := conn.Projects.GetAllProjects(ctx, options)
150+
projectParams := &admin.ListProjectsApiParams{
151+
PageNum: conversion.IntPtr(int(stateModel.PageNum.ValueInt64())),
152+
ItemsPerPage: conversion.IntPtr(int(stateModel.ItemsPerPage.ValueInt64())),
153+
}
154+
projectsRes, _, err := connV2.ProjectsApi.ListProjectsWithParams(ctx, projectParams).Execute()
156155
if err != nil {
157156
resp.Diagnostics.AddError("error in monogbatlas_projects data source", fmt.Sprintf("error getting projects information: %s", err.Error()))
158157
return
159158
}
160159

161-
err = populateProjectsDataSourceModel(ctx, conn, connV2, &stateModel, projectsRes)
160+
err = populateProjectsDataSourceModel(ctx, connV2, &stateModel, projectsRes)
162161
if err != nil {
163162
resp.Diagnostics.AddError("error in monogbatlas_projects data source", err.Error())
164163
return
@@ -170,17 +169,18 @@ func (d *ProjectsDS) Read(ctx context.Context, req datasource.ReadRequest, resp
170169
}
171170
}
172171

173-
func populateProjectsDataSourceModel(ctx context.Context, conn *matlas.Client, connV2 *admin.APIClient, stateModel *tfProjectsDSModel, projectsRes *matlas.Projects) error {
172+
func populateProjectsDataSourceModel(ctx context.Context, connV2 *admin.APIClient, stateModel *tfProjectsDSModel, projectsRes *admin.PaginatedAtlasGroup) error {
174173
results := make([]*tfProjectDSModel, 0, len(projectsRes.Results))
175-
for _, project := range projectsRes.Results {
176-
atlasTeams, atlasLimits, atlasProjectSettings, err := getProjectPropsFromAPI(ctx, conn, connV2, project.ID)
174+
for i := range projectsRes.Results {
175+
project := projectsRes.Results[i]
176+
atlasTeams, atlasLimits, atlasProjectSettings, err := getProjectPropsFromAPI(ctx, connV2, project.GetId())
177177
if err == nil { // if the project is still valid, e.g. could have just been deleted
178-
projectModel := newTFProjectDataSourceModel(ctx, project, atlasTeams, atlasProjectSettings, atlasLimits)
178+
projectModel := newTFProjectDataSourceModel(ctx, &project, atlasTeams, atlasProjectSettings, atlasLimits)
179179
results = append(results, &projectModel)
180180
}
181181
}
182182
stateModel.Results = results
183-
stateModel.TotalCount = types.Int64Value(int64(projectsRes.TotalCount))
183+
stateModel.TotalCount = types.Int64Value(int64(projectsRes.GetTotalCount()))
184184
stateModel.ID = types.StringValue(id.UniqueId())
185185
return nil
186186
}

0 commit comments

Comments
 (0)