@@ -4,14 +4,16 @@ import (
44 "context"
55 "errors"
66 "fmt"
7+ "strings"
78 "time"
89
910 "github.com/hashicorp/go-cty/cty"
1011 "github.com/hashicorp/terraform-plugin-sdk/v2/diag"
12+ "github.com/hashicorp/terraform-plugin-sdk/v2/helper/customdiff"
1113 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1214 "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation"
1315 ipamAPI "github.com/scaleway/scaleway-sdk-go/api/ipam/v1"
14- mongodb "github.com/scaleway/scaleway-sdk-go/api/mongodb/v1alpha1 "
16+ mongodb "github.com/scaleway/scaleway-sdk-go/api/mongodb/v1 "
1517 "github.com/scaleway/scaleway-sdk-go/scw"
1618 "github.com/scaleway/terraform-provider-scaleway/v2/internal/dsf"
1719 "github.com/scaleway/terraform-provider-scaleway/v2/internal/httperrors"
@@ -232,6 +234,22 @@ func ResourceInstance() *schema.Resource {
232234 "region" : regional .Schema (),
233235 "project_id" : account .ProjectIDSchema (),
234236 },
237+ CustomizeDiff : customdiff .All (
238+ func (ctx context.Context , d * schema.ResourceDiff , meta any ) error {
239+ if d .HasChange ("version" ) {
240+ v := d .Get ("version" ).(string )
241+ parts := strings .Split (v , "." )
242+ if len (parts ) > 2 {
243+ majorMinor := parts [0 ] + "." + parts [1 ]
244+ if err := d .SetNew ("version" , majorMinor ); err != nil {
245+ return err
246+ }
247+ }
248+ }
249+
250+ return nil
251+ },
252+ ),
235253 }
236254}
237255
@@ -248,42 +266,41 @@ func ResourceInstanceCreate(ctx context.Context, d *schema.ResourceData, m any)
248266 var res * mongodb.Instance
249267
250268 if exist {
251- volume := & mongodb.RestoreSnapshotRequestVolumeDetails {
252- VolumeType : mongodb .VolumeType (d .Get ("volume_type" ).(string )),
253- }
254- id := regional .ExpandID (snapshotID .(string ))
255269 restoreSnapshotRequest := & mongodb.RestoreSnapshotRequest {
256- SnapshotID : id .ID ,
270+ SnapshotID : regional . ExpandID ( snapshotID .( string )) .ID ,
257271 InstanceName : types .ExpandOrGenerateString (d .Get ("name" ), "mongodb" ),
258- NodeNumber : * nodeNumber ,
272+ NodeAmount : * nodeNumber ,
259273 NodeType : d .Get ("node_type" ).(string ),
260- Volume : volume ,
274+ VolumeType : mongodb . VolumeType ( d . Get ( "volume_type" ).( string )) ,
261275 }
262276
263277 res , err = mongodbAPI .RestoreSnapshot (restoreSnapshotRequest , scw .WithContext (ctx ))
264278 if err != nil {
265279 return diag .FromErr (err )
266280 }
267281 } else {
282+ version := d .Get ("version" ).(string )
283+ normalizeVersion := NormalizeMongoDBVersion (version )
284+
268285 createReq := & mongodb.CreateInstanceRequest {
269286 ProjectID : d .Get ("project_id" ).(string ),
270287 Name : types .ExpandOrGenerateString (d .Get ("name" ), "mongodb" ),
271- Version : d . Get ( "version" ).( string ) ,
288+ Version : normalizeVersion ,
272289 NodeType : d .Get ("node_type" ).(string ),
273- NodeNumber : * nodeNumber ,
290+ NodeAmount : * nodeNumber ,
274291 UserName : d .Get ("user_name" ).(string ),
275292 Password : d .Get ("password" ).(string ),
276293 }
277294
278- volumeRequestDetails := & mongodb.CreateInstanceRequestVolumeDetails {
279- VolumeType : mongodb .VolumeType (d .Get ("volume_type" ).(string )),
295+ volumeRequestDetails := & mongodb.Volume {
296+ Type : mongodb .VolumeType (d .Get ("volume_type" ).(string )),
280297 }
281298 volumeSize , volumeSizeExist := d .GetOk ("volume_size_in_gb" )
282299
283300 if volumeSizeExist {
284- volumeRequestDetails .VolumeSize = scw .Size (uint64 (volumeSize .(int )) * uint64 (scw .GB ))
301+ volumeRequestDetails .SizeBytes = scw .Size (uint64 (volumeSize .(int )) * uint64 (scw .GB ))
285302 } else {
286- volumeRequestDetails .VolumeSize = scw .Size (defaultVolumeSize * uint64 (scw .GB ))
303+ volumeRequestDetails .SizeBytes = scw .Size (defaultVolumeSize * uint64 (scw .GB ))
287304 }
288305
289306 createReq .Volume = volumeRequestDetails
@@ -316,14 +333,14 @@ func ResourceInstanceCreate(ctx context.Context, d *schema.ResourceData, m any)
316333 items := pubList .([]any )
317334 if len (items ) > 0 {
318335 eps = append (eps , & mongodb.EndpointSpec {
319- Public : & mongodb.EndpointSpecPublicDetails {},
336+ PublicNetwork : & mongodb.EndpointSpecPublicNetworkDetails {},
320337 })
321338 }
322339 }
323340
324341 if len (eps ) == 0 {
325342 eps = append (eps , & mongodb.EndpointSpec {
326- Public : & mongodb.EndpointSpecPublicDetails {},
343+ PublicNetwork : & mongodb.EndpointSpecPublicNetworkDetails {},
327344 })
328345 }
329346
@@ -369,7 +386,7 @@ func ResourceInstanceRead(ctx context.Context, d *schema.ResourceData, m any) di
369386
370387 _ = d .Set ("name" , instance .Name )
371388 _ = d .Set ("version" , instance .Version )
372- _ = d .Set ("node_number" , int (instance .NodeNumber ))
389+ _ = d .Set ("node_number" , int (instance .NodeAmount ))
373390 _ = d .Set ("node_type" , instance .NodeType )
374391 _ = d .Set ("project_id" , instance .ProjectID )
375392 _ = d .Set ("tags" , instance .Tags )
@@ -378,7 +395,7 @@ func ResourceInstanceRead(ctx context.Context, d *schema.ResourceData, m any) di
378395
379396 if instance .Volume != nil {
380397 _ = d .Set ("volume_type" , instance .Volume .Type )
381- _ = d .Set ("volume_size_in_gb" , int (instance .Volume .Size / scw .GB ))
398+ _ = d .Set ("volume_size_in_gb" , int (instance .Volume .SizeBytes / scw .GB ))
382399 }
383400
384401 publicNetworkEndpoint , publicNetworkExists := flattenPublicNetwork (instance .Endpoints )
@@ -441,14 +458,7 @@ func ResourceInstanceRead(ctx context.Context, d *schema.ResourceData, m any) di
441458 _ = d .Set ("private_ip" , privateIPs )
442459 }
443460
444- if len (instance .Settings ) > 0 {
445- settingsMap := make (map [string ]string )
446- for _ , setting := range instance .Settings {
447- settingsMap [setting .Name ] = setting .Value
448- }
449-
450- _ = d .Set ("settings" , settingsMap )
451- }
461+ _ = d .Set ("settings" , map [string ]string {})
452462
453463 return diags
454464}
@@ -479,9 +489,9 @@ func ResourceInstanceUpdate(ctx context.Context, d *schema.ResourceData, m any)
479489 size := scw .Size (newSize * uint64 (scw .GB ))
480490
481491 upgradeInstanceRequests := mongodb.UpgradeInstanceRequest {
482- InstanceID : ID ,
483- Region : region ,
484- VolumeSize : & size ,
492+ InstanceID : ID ,
493+ Region : region ,
494+ VolumeSizeBytes : & size ,
485495 }
486496
487497 _ , err = mongodbAPI .UpgradeInstance (& upgradeInstanceRequests , scw .WithContext (ctx ))
0 commit comments