@@ -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,21 @@ 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 interface {}) 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+ return nil
250+ },
251+ ),
235252 }
236253}
237254
@@ -248,42 +265,41 @@ func ResourceInstanceCreate(ctx context.Context, d *schema.ResourceData, m any)
248265 var res * mongodb.Instance
249266
250267 if exist {
251- volume := & mongodb.RestoreSnapshotRequestVolumeDetails {
252- VolumeType : mongodb .VolumeType (d .Get ("volume_type" ).(string )),
253- }
254- id := regional .ExpandID (snapshotID .(string ))
255268 restoreSnapshotRequest := & mongodb.RestoreSnapshotRequest {
256- SnapshotID : id .ID ,
269+ SnapshotID : regional . ExpandID ( snapshotID .( string )) .ID ,
257270 InstanceName : types .ExpandOrGenerateString (d .Get ("name" ), "mongodb" ),
258- NodeNumber : * nodeNumber ,
271+ NodeAmount : * nodeNumber ,
259272 NodeType : d .Get ("node_type" ).(string ),
260- Volume : volume ,
273+ VolumeType : mongodb . VolumeType ( d . Get ( "volume_type" ).( string )) ,
261274 }
262275
263276 res , err = mongodbAPI .RestoreSnapshot (restoreSnapshotRequest , scw .WithContext (ctx ))
264277 if err != nil {
265278 return diag .FromErr (err )
266279 }
267280 } else {
281+ version := d .Get ("version" ).(string )
282+ normalizeVersion := NormalizeMongoDBVersion (version )
283+
268284 createReq := & mongodb.CreateInstanceRequest {
269285 ProjectID : d .Get ("project_id" ).(string ),
270286 Name : types .ExpandOrGenerateString (d .Get ("name" ), "mongodb" ),
271- Version : d . Get ( "version" ).( string ) ,
287+ Version : normalizeVersion ,
272288 NodeType : d .Get ("node_type" ).(string ),
273- NodeNumber : * nodeNumber ,
289+ NodeAmount : * nodeNumber ,
274290 UserName : d .Get ("user_name" ).(string ),
275291 Password : d .Get ("password" ).(string ),
276292 }
277293
278- volumeRequestDetails := & mongodb.CreateInstanceRequestVolumeDetails {
279- VolumeType : mongodb .VolumeType (d .Get ("volume_type" ).(string )),
294+ volumeRequestDetails := & mongodb.Volume {
295+ Type : mongodb .VolumeType (d .Get ("volume_type" ).(string )),
280296 }
281297 volumeSize , volumeSizeExist := d .GetOk ("volume_size_in_gb" )
282298
283299 if volumeSizeExist {
284- volumeRequestDetails .VolumeSize = scw .Size (uint64 (volumeSize .(int )) * uint64 (scw .GB ))
300+ volumeRequestDetails .SizeBytes = scw .Size (uint64 (volumeSize .(int )) * uint64 (scw .GB ))
285301 } else {
286- volumeRequestDetails .VolumeSize = scw .Size (defaultVolumeSize * uint64 (scw .GB ))
302+ volumeRequestDetails .SizeBytes = scw .Size (defaultVolumeSize * uint64 (scw .GB ))
287303 }
288304
289305 createReq .Volume = volumeRequestDetails
@@ -316,14 +332,14 @@ func ResourceInstanceCreate(ctx context.Context, d *schema.ResourceData, m any)
316332 items := pubList .([]any )
317333 if len (items ) > 0 {
318334 eps = append (eps , & mongodb.EndpointSpec {
319- Public : & mongodb.EndpointSpecPublicDetails {},
335+ PublicNetwork : & mongodb.EndpointSpecPublicNetworkDetails {},
320336 })
321337 }
322338 }
323339
324340 if len (eps ) == 0 {
325341 eps = append (eps , & mongodb.EndpointSpec {
326- Public : & mongodb.EndpointSpecPublicDetails {},
342+ PublicNetwork : & mongodb.EndpointSpecPublicNetworkDetails {},
327343 })
328344 }
329345
@@ -369,7 +385,7 @@ func ResourceInstanceRead(ctx context.Context, d *schema.ResourceData, m any) di
369385
370386 _ = d .Set ("name" , instance .Name )
371387 _ = d .Set ("version" , instance .Version )
372- _ = d .Set ("node_number" , int (instance .NodeNumber ))
388+ _ = d .Set ("node_number" , int (instance .NodeAmount ))
373389 _ = d .Set ("node_type" , instance .NodeType )
374390 _ = d .Set ("project_id" , instance .ProjectID )
375391 _ = d .Set ("tags" , instance .Tags )
@@ -378,7 +394,7 @@ func ResourceInstanceRead(ctx context.Context, d *schema.ResourceData, m any) di
378394
379395 if instance .Volume != nil {
380396 _ = d .Set ("volume_type" , instance .Volume .Type )
381- _ = d .Set ("volume_size_in_gb" , int (instance .Volume .Size / scw .GB ))
397+ _ = d .Set ("volume_size_in_gb" , int (instance .Volume .SizeBytes / scw .GB ))
382398 }
383399
384400 publicNetworkEndpoint , publicNetworkExists := flattenPublicNetwork (instance .Endpoints )
@@ -441,14 +457,7 @@ func ResourceInstanceRead(ctx context.Context, d *schema.ResourceData, m any) di
441457 _ = d .Set ("private_ip" , privateIPs )
442458 }
443459
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- }
460+ _ = d .Set ("settings" , map [string ]string {})
452461
453462 return diags
454463}
@@ -479,9 +488,9 @@ func ResourceInstanceUpdate(ctx context.Context, d *schema.ResourceData, m any)
479488 size := scw .Size (newSize * uint64 (scw .GB ))
480489
481490 upgradeInstanceRequests := mongodb.UpgradeInstanceRequest {
482- InstanceID : ID ,
483- Region : region ,
484- VolumeSize : & size ,
491+ InstanceID : ID ,
492+ Region : region ,
493+ VolumeSizeBytes : & size ,
485494 }
486495
487496 _ , err = mongodbAPI .UpgradeInstance (& upgradeInstanceRequests , scw .WithContext (ctx ))
0 commit comments