Skip to content

Commit 3f14e08

Browse files
authored
chore(instance): migrate to context based workflow (#615)
1 parent 9e65e4f commit 3f14e08

11 files changed

+231
-203
lines changed

scaleway/data_source_instance_image.go

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,19 @@
11
package scaleway
22

33
import (
4+
"context"
45
"fmt"
56
"sort"
67

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
79
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
810
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
911
"github.com/scaleway/scaleway-sdk-go/scw"
1012
)
1113

1214
func dataSourceScalewayInstanceImage() *schema.Resource {
1315
return &schema.Resource{
14-
Read: dataSourceScalewayInstanceImageRead,
16+
ReadContext: dataSourceScalewayInstanceImageRead,
1517

1618
Schema: map[string]*schema.Schema{
1719
"name": {
@@ -91,11 +93,11 @@ func dataSourceScalewayInstanceImage() *schema.Resource {
9193
}
9294
}
9395

94-
func dataSourceScalewayInstanceImageRead(d *schema.ResourceData, m interface{}) error {
96+
func dataSourceScalewayInstanceImageRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
9597
meta := m.(*Meta)
9698
instanceAPI, zone, err := instanceAPIWithZone(d, meta)
9799
if err != nil {
98-
return err
100+
return diag.FromErr(err)
99101
}
100102

101103
imageID, ok := d.GetOk("image_id")
@@ -106,9 +108,9 @@ func dataSourceScalewayInstanceImageRead(d *schema.ResourceData, m interface{})
106108
Arch: expandStringPtr(d.Get("architecture")),
107109
Organization: expandStringPtr(d.Get("organization_id")),
108110
Project: expandStringPtr(d.Get("project_id")),
109-
}, scw.WithAllPages())
111+
}, scw.WithAllPages(), scw.WithContext(ctx))
110112
if err != nil {
111-
return err
113+
return diag.FromErr(err)
112114
}
113115
var matchingImages []*instance.Image
114116
for _, image := range res.Images {
@@ -118,10 +120,10 @@ func dataSourceScalewayInstanceImageRead(d *schema.ResourceData, m interface{})
118120
}
119121

120122
if len(matchingImages) == 0 {
121-
return fmt.Errorf("no image found with the name %s and architecture %s in zone %s", d.Get("name"), d.Get("architecture"), zone)
123+
return diag.FromErr(fmt.Errorf("no image found with the name %s and architecture %s in zone %s", d.Get("name"), d.Get("architecture"), zone))
122124
}
123125
if len(matchingImages) > 1 && !d.Get("latest").(bool) {
124-
return fmt.Errorf("%d images found with the same name %s and architecture %s in zone %s", len(matchingImages), d.Get("name"), d.Get("architecture"), zone)
126+
return diag.FromErr(fmt.Errorf("%d images found with the same name %s and architecture %s in zone %s", len(matchingImages), d.Get("name"), d.Get("architecture"), zone))
125127
}
126128

127129
sort.Slice(matchingImages, func(i, j int) bool {
@@ -146,9 +148,9 @@ func dataSourceScalewayInstanceImageRead(d *schema.ResourceData, m interface{})
146148
resp, err := instanceAPI.GetImage(&instance.GetImageRequest{
147149
Zone: zone,
148150
ImageID: imageID.(string),
149-
})
151+
}, scw.WithContext(ctx))
150152
if err != nil {
151-
return err
153+
return diag.FromErr(err)
152154
}
153155

154156
_ = d.Set("organization_id", resp.Image.Organization)

scaleway/data_source_instance_security_group.go

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
package scaleway
22

33
import (
4+
"context"
45
"fmt"
56

7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
68
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
79
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
810
"github.com/scaleway/scaleway-sdk-go/scw"
@@ -25,17 +27,17 @@ func dataSourceScalewayInstanceSecurityGroup() *schema.Resource {
2527
}
2628

2729
return &schema.Resource{
28-
Read: dataSourceScalewayInstanceSecurityGroupRead,
30+
ReadContext: dataSourceScalewayInstanceSecurityGroupRead,
2931

3032
Schema: dsSchema,
3133
}
3234
}
3335

34-
func dataSourceScalewayInstanceSecurityGroupRead(d *schema.ResourceData, m interface{}) error {
36+
func dataSourceScalewayInstanceSecurityGroupRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
3537
meta := m.(*Meta)
3638
instanceAPI, zone, err := instanceAPIWithZone(d, meta)
3739
if err != nil {
38-
return err
40+
return diag.FromErr(err)
3941
}
4042

4143
securityGroupID, ok := d.GetOk("security_group_id")
@@ -45,25 +47,25 @@ func dataSourceScalewayInstanceSecurityGroupRead(d *schema.ResourceData, m inter
4547
Name: expandStringPtr(d.Get("name")),
4648
Organization: expandStringPtr(d.Get("organization_id")),
4749
Project: expandStringPtr(d.Get("project_id")),
48-
}, scw.WithAllPages())
50+
}, scw.WithAllPages(), scw.WithContext(ctx))
4951
if err != nil {
50-
return err
52+
return diag.FromErr(err)
5153
}
5254
for _, sg := range res.SecurityGroups {
5355
if sg.Name == d.Get("name").(string) {
5456
if securityGroupID != "" {
55-
return fmt.Errorf("more than 1 security group found with the same name %s", d.Get("name"))
57+
return diag.FromErr(fmt.Errorf("more than 1 security group found with the same name %s", d.Get("name")))
5658
}
5759
securityGroupID = sg.ID
5860
}
5961
}
6062
if securityGroupID == "" {
61-
return fmt.Errorf("no security group found with the name %s", d.Get("name"))
63+
return diag.FromErr(fmt.Errorf("no security group found with the name %s", d.Get("name")))
6264
}
6365
}
6466

6567
zonedID := datasourceNewZonedID(securityGroupID, zone)
6668
d.SetId(zonedID)
6769
_ = d.Set("security_group_id", zonedID)
68-
return resourceScalewayInstanceSecurityGroupRead(d, m)
70+
return resourceScalewayInstanceSecurityGroupRead(ctx, d, m)
6971
}

scaleway/data_source_instance_server.go

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package scaleway
22

33
import (
4+
"context"
45
"fmt"
56

7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
68
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
79
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
10+
"github.com/scaleway/scaleway-sdk-go/scw"
811
)
912

1013
func dataSourceScalewayInstanceServer() *schema.Resource {
@@ -24,17 +27,17 @@ func dataSourceScalewayInstanceServer() *schema.Resource {
2427
}
2528

2629
return &schema.Resource{
27-
Read: dataSourceScalewayInstanceServerRead,
30+
ReadContext: dataSourceScalewayInstanceServerRead,
2831

2932
Schema: dsSchema,
3033
}
3134
}
3235

33-
func dataSourceScalewayInstanceServerRead(d *schema.ResourceData, m interface{}) error {
36+
func dataSourceScalewayInstanceServerRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
3437
meta := m.(*Meta)
3538
instanceAPI, zone, err := instanceAPIWithZone(d, meta)
3639
if err != nil {
37-
return err
40+
return diag.FromErr(err)
3841
}
3942

4043
serverID, ok := d.GetOk("server_id")
@@ -44,25 +47,25 @@ func dataSourceScalewayInstanceServerRead(d *schema.ResourceData, m interface{})
4447
Name: expandStringPtr(d.Get("name")),
4548
Organization: expandStringPtr(d.Get("organization_id")),
4649
Project: expandStringPtr(d.Get("project_id")),
47-
})
50+
}, scw.WithContext(ctx))
4851
if err != nil {
49-
return err
52+
return diag.FromErr(err)
5053
}
5154
for _, instance := range res.Servers {
5255
if instance.Name == d.Get("name").(string) {
5356
if serverID != "" {
54-
return fmt.Errorf("more than 1 server found with the same name %s", d.Get("name"))
57+
return diag.FromErr(fmt.Errorf("more than 1 server found with the same name %s", d.Get("name")))
5558
}
5659
serverID = instance.ID
5760
}
5861
}
5962
if serverID == "" {
60-
return fmt.Errorf("no server found with the name %s", d.Get("name"))
63+
return diag.FromErr(fmt.Errorf("no server found with the name %s", d.Get("name")))
6164
}
6265
}
6366

6467
zonedID := datasourceNewZonedID(serverID, zone)
6568
d.SetId(zonedID)
6669
_ = d.Set("server_id", zonedID)
67-
return resourceScalewayInstanceServerRead(d, m)
70+
return resourceScalewayInstanceServerRead(ctx, d, m)
6871
}

scaleway/data_source_instance_volume.go

Lines changed: 13 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
package scaleway
22

33
import (
4+
"context"
45
"fmt"
56

7+
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
68
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
79
instance "github.com/scaleway/scaleway-sdk-go/api/instance/v1"
10+
"github.com/scaleway/scaleway-sdk-go/scw"
811
)
912

1013
func dataSourceScalewayInstanceVolume() *schema.Resource {
@@ -24,16 +27,16 @@ func dataSourceScalewayInstanceVolume() *schema.Resource {
2427
dsSchema["name"].ConflictsWith = []string{"volume_id"}
2528

2629
return &schema.Resource{
27-
Read: dataSourceScalewayInstanceVolumeRead,
28-
Schema: dsSchema,
30+
ReadContext: dataSourceScalewayInstanceVolumeRead,
31+
Schema: dsSchema,
2932
}
3033
}
3134

32-
func dataSourceScalewayInstanceVolumeRead(d *schema.ResourceData, m interface{}) error {
35+
func dataSourceScalewayInstanceVolumeRead(ctx context.Context, d *schema.ResourceData, m interface{}) diag.Diagnostics {
3336
meta := m.(*Meta)
3437
instanceAPI, zone, err := instanceAPIWithZone(d, meta)
3538
if err != nil {
36-
return err
39+
return diag.FromErr(err)
3740
}
3841

3942
volumeID, ok := d.GetOk("volume_id")
@@ -43,28 +46,28 @@ func dataSourceScalewayInstanceVolumeRead(d *schema.ResourceData, m interface{})
4346
Name: expandStringPtr(d.Get("name")),
4447
Organization: expandStringPtr(d.Get("organization_id")),
4548
Project: expandStringPtr(d.Get("project_id")),
46-
})
49+
}, scw.WithContext(ctx))
4750
if err != nil {
48-
return err
51+
return diag.FromErr(err)
4952
}
5053
for _, volume := range res.Volumes {
5154
if volume.Name == d.Get("name").(string) {
5255
if volumeID != "" {
53-
return fmt.Errorf("more than 1 volume found with the same name %s", d.Get("name"))
56+
return diag.FromErr(fmt.Errorf("more than 1 volume found with the same name %s", d.Get("name")))
5457
}
5558
volumeID = volume.ID
5659
}
5760
}
5861
if volumeID == "" {
59-
return fmt.Errorf("no volume found with the name %s", d.Get("name"))
62+
return diag.FromErr(fmt.Errorf("no volume found with the name %s", d.Get("name")))
6063
}
6164
}
6265

6366
zonedID := datasourceNewZonedID(volumeID, zone)
6467
d.SetId(zonedID)
6568
err = d.Set("volume_id", zonedID)
6669
if err != nil {
67-
return err
70+
return diag.FromErr(err)
6871
}
69-
return resourceScalewayInstanceVolumeRead(d, m)
72+
return resourceScalewayInstanceVolumeRead(ctx, d, m)
7073
}

scaleway/helpers_instance.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package scaleway
22

33
import (
4+
"context"
45
"fmt"
56
"hash/crc32"
67
"sort"
@@ -103,11 +104,11 @@ func serverStateExpand(rawState string) (instance.ServerState, error) {
103104
return apiState, nil
104105
}
105106

106-
func reachState(instanceAPI *instance.API, zone scw.Zone, serverID string, toState instance.ServerState) error {
107+
func reachState(ctx context.Context, instanceAPI *instance.API, zone scw.Zone, serverID string, toState instance.ServerState) error {
107108
response, err := instanceAPI.GetServer(&instance.GetServerRequest{
108109
Zone: zone,
109110
ServerID: serverID,
110-
})
111+
}, scw.WithContext(ctx))
111112
if err != nil {
112113
return err
113114
}
@@ -147,11 +148,11 @@ func reachState(instanceAPI *instance.API, zone scw.Zone, serverID string, toSta
147148

148149
// detachVolume will make sure a volume is not attached to any server. If volume is attached to a server, it will be stopped
149150
// to allow volume detachment.
150-
func detachVolume(instanceAPI *instance.API, zone scw.Zone, volumeID string) error {
151+
func detachVolume(ctx context.Context, instanceAPI *instance.API, zone scw.Zone, volumeID string) error {
151152
res, err := instanceAPI.GetVolume(&instance.GetVolumeRequest{
152153
Zone: zone,
153154
VolumeID: volumeID,
154-
})
155+
}, scw.WithContext(ctx))
155156
if err != nil {
156157
return err
157158
}
@@ -164,7 +165,7 @@ func detachVolume(instanceAPI *instance.API, zone scw.Zone, volumeID string) err
164165

165166
// We need to stop server only for VolumeTypeLSSD volume type
166167
if res.Volume.VolumeType == instance.VolumeVolumeTypeLSSD {
167-
err = reachState(instanceAPI, zone, res.Volume.Server.ID, instance.ServerStateStopped)
168+
err = reachState(ctx, instanceAPI, zone, res.Volume.Server.ID, instance.ServerStateStopped)
168169

169170
// If 404 this mean server is deleted and volume is already detached
170171
if is404Error(err) {
@@ -177,7 +178,7 @@ func detachVolume(instanceAPI *instance.API, zone scw.Zone, volumeID string) err
177178
_, err = instanceAPI.DetachVolume(&instance.DetachVolumeRequest{
178179
Zone: zone,
179180
VolumeID: res.Volume.ID,
180-
})
181+
}, scw.WithContext(ctx))
181182

182183
// TODO find a better way to test this error
183184
if err != nil && err.Error() != "scaleway-sdk-go: volume should be attached to a server" {

0 commit comments

Comments
 (0)