Skip to content

Commit 639bb90

Browse files
authored
fix(instance_server): volume template creation (#2640)
* fix(instance_server): volume template creation * lint * refactor IsBlockVolume
1 parent 57cd372 commit 639bb90

File tree

2 files changed

+89
-9
lines changed

2 files changed

+89
-9
lines changed

internal/services/instance/helpers_instance_block.go

+12-9
Original file line numberDiff line numberDiff line change
@@ -29,37 +29,42 @@ type UnknownVolume struct {
2929
ServerID *string
3030
Boot *bool
3131

32-
// IsBlockVolume is true if volume is managed by block API
33-
IsBlockVolume bool
34-
3532
InstanceVolumeType instance.VolumeVolumeType
3633
}
3734

3835
// VolumeTemplate returns a template to be used for servers requests.
3936
func (volume *UnknownVolume) VolumeTemplate() *instance.VolumeServerTemplate {
4037
template := &instance.VolumeServerTemplate{}
38+
4139
if volume.ID != "" {
4240
template.ID = &volume.ID
41+
if !volume.IsBlockVolume() {
42+
template.Name = &volume.Name
43+
}
4344
} else {
45+
template.VolumeType = volume.InstanceVolumeType
4446
template.Size = volume.Size
4547
}
4648

4749
if volume.Boot != nil {
4850
template.Boot = volume.Boot
4951
}
5052

51-
if volume.IsBlockVolume {
53+
if volume.IsBlockVolume() {
5254
template.VolumeType = volume.InstanceVolumeType
53-
} else {
54-
template.Name = &volume.Name
5555
}
5656

5757
return template
5858
}
5959

6060
// IsLocal returns true if the volume is a local volume
6161
func (volume *UnknownVolume) IsLocal() bool {
62-
return !volume.IsBlockVolume && volume.InstanceVolumeType == instance.VolumeVolumeTypeLSSD
62+
return !volume.IsBlockVolume() && volume.InstanceVolumeType == instance.VolumeVolumeTypeLSSD
63+
}
64+
65+
// IsBlockVolume is true if volume is managed by block API
66+
func (volume *UnknownVolume) IsBlockVolume() bool {
67+
return volume.InstanceVolumeType == instance.VolumeVolumeTypeSbsVolume
6368
}
6469

6570
// IsAttached returns true if the volume is attached to a server
@@ -83,7 +88,6 @@ func (api *BlockAndInstanceAPI) GetUnknownVolume(req *GetUnknownVolumeRequest, o
8388
ID: getVolumeResponse.Volume.ID,
8489
Name: getVolumeResponse.Volume.Name,
8590
Size: &getVolumeResponse.Volume.Size,
86-
IsBlockVolume: false,
8791
InstanceVolumeType: getVolumeResponse.Volume.VolumeType,
8892
}
8993
if getVolumeResponse.Volume.Server != nil {
@@ -106,7 +110,6 @@ func (api *BlockAndInstanceAPI) GetUnknownVolume(req *GetUnknownVolumeRequest, o
106110
ID: blockVolume.ID,
107111
Name: blockVolume.Name,
108112
Size: &blockVolume.Size,
109-
IsBlockVolume: true,
110113
InstanceVolumeType: instance.VolumeVolumeTypeSbsVolume,
111114
}
112115
for _, ref := range blockVolume.References {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
package instance_test
2+
3+
import (
4+
"testing"
5+
6+
instanceSDK "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
7+
"github.com/scaleway/scaleway-sdk-go/scw"
8+
"github.com/scaleway/terraform-provider-scaleway/v2/internal/services/instance"
9+
"github.com/stretchr/testify/assert"
10+
)
11+
12+
func TestUnknownVolume_VolumeTemplate(t *testing.T) {
13+
type fields struct {
14+
Zone scw.Zone
15+
ID string
16+
Name string
17+
Size *scw.Size
18+
ServerID *string
19+
Boot *bool
20+
IsBlockVolume bool
21+
InstanceVolumeType instanceSDK.VolumeVolumeType
22+
}
23+
tests := []struct {
24+
name string
25+
volume *instance.UnknownVolume
26+
want *instanceSDK.VolumeServerTemplate
27+
}{
28+
{
29+
name: "Root Volume",
30+
volume: &instance.UnknownVolume{
31+
Name: "",
32+
ID: "",
33+
InstanceVolumeType: instanceSDK.VolumeVolumeTypeLSSD,
34+
Size: scw.SizePtr(20000000000),
35+
Boot: scw.BoolPtr(false),
36+
},
37+
want: &instanceSDK.VolumeServerTemplate{
38+
Boot: scw.BoolPtr(false),
39+
Size: scw.SizePtr(20000000000),
40+
VolumeType: instanceSDK.VolumeVolumeTypeLSSD,
41+
},
42+
},
43+
{
44+
name: "Root Volume from ID",
45+
volume: &instance.UnknownVolume{
46+
Name: "tf-vol-stoic-johnson",
47+
ID: "25152794-d15a-4dd5-abfc-b19ec276aa20",
48+
InstanceVolumeType: instanceSDK.VolumeVolumeTypeLSSD,
49+
Size: scw.SizePtr(20000000000),
50+
Boot: scw.BoolPtr(true),
51+
},
52+
want: &instanceSDK.VolumeServerTemplate{
53+
ID: scw.StringPtr("25152794-d15a-4dd5-abfc-b19ec276aa20"),
54+
Boot: scw.BoolPtr(true),
55+
Name: scw.StringPtr("tf-vol-stoic-johnson"),
56+
},
57+
},
58+
{
59+
name: "Additional Volume sbs",
60+
volume: &instance.UnknownVolume{
61+
Name: "tf-volume-elegant-minsky",
62+
ID: "cc380989-b71b-47f0-829f-062e329f4097",
63+
InstanceVolumeType: instanceSDK.VolumeVolumeTypeSbsVolume,
64+
Size: scw.SizePtr(10000000000),
65+
},
66+
want: &instanceSDK.VolumeServerTemplate{
67+
ID: scw.StringPtr("cc380989-b71b-47f0-829f-062e329f4097"),
68+
VolumeType: instanceSDK.VolumeVolumeTypeSbsVolume,
69+
},
70+
},
71+
}
72+
for _, tt := range tests {
73+
t.Run(tt.name, func(t *testing.T) {
74+
assert.Equal(t, tt.want, tt.volume.VolumeTemplate())
75+
})
76+
}
77+
}

0 commit comments

Comments
 (0)