From 66d1be790755371b88859e49f9811b1478a2fbe1 Mon Sep 17 00:00:00 2001 From: Jules Casteran Date: Fri, 28 Jun 2024 09:22:56 +0200 Subject: [PATCH 1/3] fix(instance_server): volume template creation --- .../instance/helpers_instance_block.go | 7 +- .../instance/helpers_instance_block_test.go | 77 +++++++++++++++++++ 2 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 internal/services/instance/helpers_instance_block_test.go diff --git a/internal/services/instance/helpers_instance_block.go b/internal/services/instance/helpers_instance_block.go index 49f7a8819..de423a12f 100644 --- a/internal/services/instance/helpers_instance_block.go +++ b/internal/services/instance/helpers_instance_block.go @@ -38,9 +38,14 @@ type UnknownVolume struct { // VolumeTemplate returns a template to be used for servers requests. func (volume *UnknownVolume) VolumeTemplate() *instance.VolumeServerTemplate { template := &instance.VolumeServerTemplate{} + if volume.ID != "" { template.ID = &volume.ID + if !volume.IsBlockVolume { + template.Name = &volume.Name + } } else { + template.VolumeType = volume.InstanceVolumeType template.Size = volume.Size } @@ -50,8 +55,6 @@ func (volume *UnknownVolume) VolumeTemplate() *instance.VolumeServerTemplate { if volume.IsBlockVolume { template.VolumeType = volume.InstanceVolumeType - } else { - template.Name = &volume.Name } return template diff --git a/internal/services/instance/helpers_instance_block_test.go b/internal/services/instance/helpers_instance_block_test.go new file mode 100644 index 000000000..e98b74f89 --- /dev/null +++ b/internal/services/instance/helpers_instance_block_test.go @@ -0,0 +1,77 @@ +package instance + +import ( + "testing" + + "github.com/scaleway/scaleway-sdk-go/api/instance/v1" + "github.com/scaleway/scaleway-sdk-go/scw" + "github.com/stretchr/testify/assert" +) + +func TestUnknownVolume_VolumeTemplate(t *testing.T) { + type fields struct { + Zone scw.Zone + ID string + Name string + Size *scw.Size + ServerID *string + Boot *bool + IsBlockVolume bool + InstanceVolumeType instance.VolumeVolumeType + } + tests := []struct { + name string + volume *UnknownVolume + want *instance.VolumeServerTemplate + }{ + { + name: "Root Volume", + volume: &UnknownVolume{ + Name: "", + ID: "", + InstanceVolumeType: instance.VolumeVolumeTypeLSSD, + Size: scw.SizePtr(20000000000), + Boot: scw.BoolPtr(false), + }, + want: &instance.VolumeServerTemplate{ + Boot: scw.BoolPtr(false), + Size: scw.SizePtr(20000000000), + VolumeType: instance.VolumeVolumeTypeLSSD, + }, + }, + { + name: "Root Volume from ID", + volume: &UnknownVolume{ + Name: "tf-vol-stoic-johnson", + ID: "25152794-d15a-4dd5-abfc-b19ec276aa20", + InstanceVolumeType: instance.VolumeVolumeTypeLSSD, + Size: scw.SizePtr(20000000000), + Boot: scw.BoolPtr(true), + }, + want: &instance.VolumeServerTemplate{ + ID: scw.StringPtr("25152794-d15a-4dd5-abfc-b19ec276aa20"), + Boot: scw.BoolPtr(true), + Name: scw.StringPtr("tf-vol-stoic-johnson"), + }, + }, + { + name: "Additional Volume sbs", + volume: &UnknownVolume{ + Name: "tf-volume-elegant-minsky", + ID: "cc380989-b71b-47f0-829f-062e329f4097", + InstanceVolumeType: instance.VolumeVolumeTypeSbsVolume, + Size: scw.SizePtr(10000000000), + IsBlockVolume: true, + }, + want: &instance.VolumeServerTemplate{ + ID: scw.StringPtr("cc380989-b71b-47f0-829f-062e329f4097"), + VolumeType: instance.VolumeVolumeTypeSbsVolume, + }, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + assert.Equal(t, tt.want, tt.volume.VolumeTemplate()) + }) + } +} From bfba90c5aef39d340a7928809634a33a302ed0a2 Mon Sep 17 00:00:00 2001 From: Jules Casteran Date: Fri, 28 Jun 2024 10:46:57 +0200 Subject: [PATCH 2/3] lint --- .../instance/helpers_instance_block_test.go | 33 ++++++++++--------- 1 file changed, 17 insertions(+), 16 deletions(-) diff --git a/internal/services/instance/helpers_instance_block_test.go b/internal/services/instance/helpers_instance_block_test.go index e98b74f89..64ac53e4e 100644 --- a/internal/services/instance/helpers_instance_block_test.go +++ b/internal/services/instance/helpers_instance_block_test.go @@ -1,10 +1,11 @@ -package instance +package instance_test import ( "testing" - "github.com/scaleway/scaleway-sdk-go/api/instance/v1" + instanceSDK "github.com/scaleway/scaleway-sdk-go/api/instance/v1" "github.com/scaleway/scaleway-sdk-go/scw" + "github.com/scaleway/terraform-provider-scaleway/v2/internal/services/instance" "github.com/stretchr/testify/assert" ) @@ -17,38 +18,38 @@ func TestUnknownVolume_VolumeTemplate(t *testing.T) { ServerID *string Boot *bool IsBlockVolume bool - InstanceVolumeType instance.VolumeVolumeType + InstanceVolumeType instanceSDK.VolumeVolumeType } tests := []struct { name string - volume *UnknownVolume - want *instance.VolumeServerTemplate + volume *instance.UnknownVolume + want *instanceSDK.VolumeServerTemplate }{ { name: "Root Volume", - volume: &UnknownVolume{ + volume: &instance.UnknownVolume{ Name: "", ID: "", - InstanceVolumeType: instance.VolumeVolumeTypeLSSD, + InstanceVolumeType: instanceSDK.VolumeVolumeTypeLSSD, Size: scw.SizePtr(20000000000), Boot: scw.BoolPtr(false), }, - want: &instance.VolumeServerTemplate{ + want: &instanceSDK.VolumeServerTemplate{ Boot: scw.BoolPtr(false), Size: scw.SizePtr(20000000000), - VolumeType: instance.VolumeVolumeTypeLSSD, + VolumeType: instanceSDK.VolumeVolumeTypeLSSD, }, }, { name: "Root Volume from ID", - volume: &UnknownVolume{ + volume: &instance.UnknownVolume{ Name: "tf-vol-stoic-johnson", ID: "25152794-d15a-4dd5-abfc-b19ec276aa20", - InstanceVolumeType: instance.VolumeVolumeTypeLSSD, + InstanceVolumeType: instanceSDK.VolumeVolumeTypeLSSD, Size: scw.SizePtr(20000000000), Boot: scw.BoolPtr(true), }, - want: &instance.VolumeServerTemplate{ + want: &instanceSDK.VolumeServerTemplate{ ID: scw.StringPtr("25152794-d15a-4dd5-abfc-b19ec276aa20"), Boot: scw.BoolPtr(true), Name: scw.StringPtr("tf-vol-stoic-johnson"), @@ -56,16 +57,16 @@ func TestUnknownVolume_VolumeTemplate(t *testing.T) { }, { name: "Additional Volume sbs", - volume: &UnknownVolume{ + volume: &instance.UnknownVolume{ Name: "tf-volume-elegant-minsky", ID: "cc380989-b71b-47f0-829f-062e329f4097", - InstanceVolumeType: instance.VolumeVolumeTypeSbsVolume, + InstanceVolumeType: instanceSDK.VolumeVolumeTypeSbsVolume, Size: scw.SizePtr(10000000000), IsBlockVolume: true, }, - want: &instance.VolumeServerTemplate{ + want: &instanceSDK.VolumeServerTemplate{ ID: scw.StringPtr("cc380989-b71b-47f0-829f-062e329f4097"), - VolumeType: instance.VolumeVolumeTypeSbsVolume, + VolumeType: instanceSDK.VolumeVolumeTypeSbsVolume, }, }, } From 817302e178425dce4ba5dcbb0b7a83029161164c Mon Sep 17 00:00:00 2001 From: Jules Casteran Date: Fri, 28 Jun 2024 14:22:43 +0200 Subject: [PATCH 3/3] refactor IsBlockVolume --- .../services/instance/helpers_instance_block.go | 16 ++++++++-------- .../instance/helpers_instance_block_test.go | 1 - 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/internal/services/instance/helpers_instance_block.go b/internal/services/instance/helpers_instance_block.go index de423a12f..c3784942b 100644 --- a/internal/services/instance/helpers_instance_block.go +++ b/internal/services/instance/helpers_instance_block.go @@ -29,9 +29,6 @@ type UnknownVolume struct { ServerID *string Boot *bool - // IsBlockVolume is true if volume is managed by block API - IsBlockVolume bool - InstanceVolumeType instance.VolumeVolumeType } @@ -41,7 +38,7 @@ func (volume *UnknownVolume) VolumeTemplate() *instance.VolumeServerTemplate { if volume.ID != "" { template.ID = &volume.ID - if !volume.IsBlockVolume { + if !volume.IsBlockVolume() { template.Name = &volume.Name } } else { @@ -53,7 +50,7 @@ func (volume *UnknownVolume) VolumeTemplate() *instance.VolumeServerTemplate { template.Boot = volume.Boot } - if volume.IsBlockVolume { + if volume.IsBlockVolume() { template.VolumeType = volume.InstanceVolumeType } @@ -62,7 +59,12 @@ func (volume *UnknownVolume) VolumeTemplate() *instance.VolumeServerTemplate { // IsLocal returns true if the volume is a local volume func (volume *UnknownVolume) IsLocal() bool { - return !volume.IsBlockVolume && volume.InstanceVolumeType == instance.VolumeVolumeTypeLSSD + return !volume.IsBlockVolume() && volume.InstanceVolumeType == instance.VolumeVolumeTypeLSSD +} + +// IsBlockVolume is true if volume is managed by block API +func (volume *UnknownVolume) IsBlockVolume() bool { + return volume.InstanceVolumeType == instance.VolumeVolumeTypeSbsVolume } // IsAttached returns true if the volume is attached to a server @@ -86,7 +88,6 @@ func (api *BlockAndInstanceAPI) GetUnknownVolume(req *GetUnknownVolumeRequest, o ID: getVolumeResponse.Volume.ID, Name: getVolumeResponse.Volume.Name, Size: &getVolumeResponse.Volume.Size, - IsBlockVolume: false, InstanceVolumeType: getVolumeResponse.Volume.VolumeType, } if getVolumeResponse.Volume.Server != nil { @@ -109,7 +110,6 @@ func (api *BlockAndInstanceAPI) GetUnknownVolume(req *GetUnknownVolumeRequest, o ID: blockVolume.ID, Name: blockVolume.Name, Size: &blockVolume.Size, - IsBlockVolume: true, InstanceVolumeType: instance.VolumeVolumeTypeSbsVolume, } for _, ref := range blockVolume.References { diff --git a/internal/services/instance/helpers_instance_block_test.go b/internal/services/instance/helpers_instance_block_test.go index 64ac53e4e..3d7292b88 100644 --- a/internal/services/instance/helpers_instance_block_test.go +++ b/internal/services/instance/helpers_instance_block_test.go @@ -62,7 +62,6 @@ func TestUnknownVolume_VolumeTemplate(t *testing.T) { ID: "cc380989-b71b-47f0-829f-062e329f4097", InstanceVolumeType: instanceSDK.VolumeVolumeTypeSbsVolume, Size: scw.SizePtr(10000000000), - IsBlockVolume: true, }, want: &instanceSDK.VolumeServerTemplate{ ID: scw.StringPtr("cc380989-b71b-47f0-829f-062e329f4097"),