Skip to content

Commit 95b449a

Browse files
committed
refacto waiter
1 parent 1965bc6 commit 95b449a

File tree

3 files changed

+68
-21
lines changed

3 files changed

+68
-21
lines changed

internal/services/instance/helpers_instance.go

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import (
1010

1111
"github.com/dustin/go-humanize"
1212
"github.com/hashicorp/terraform-plugin-log/tflog"
13-
"github.com/hashicorp/terraform-plugin-sdk/v2/diag"
1413
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/schema"
1514
blockSDK "github.com/scaleway/scaleway-sdk-go/api/block/v1alpha1"
1615
"github.com/scaleway/scaleway-sdk-go/api/instance/v1"
@@ -34,7 +33,7 @@ const (
3433
// InstanceServerStateStandby transient state of the instance event waiting third action or rescue mode
3534
InstanceServerStateStandby = "standby"
3635

37-
DefaultInstanceServerWaitTimeout = 15 * time.Minute
36+
DefaultInstanceServerWaitTimeout = 20 * time.Minute
3837
defaultInstancePrivateNICWaitTimeout = 10 * time.Minute
3938
defaultInstanceVolumeDeleteTimeout = 10 * time.Minute
4039
defaultInstanceSecurityGroupTimeout = 1 * time.Minute
@@ -554,7 +553,7 @@ func getServerProjectID(ctx context.Context, api *instance.API, zone scw.Zone, s
554553
return server.Server.Project, nil
555554
}
556555

557-
func attachNewFileSystem(newIDs map[string]struct{}, oldIDs map[string]struct{}, api *instancehelpers.BlockAndInstanceAPI, zone scw.Zone, server *instance.Server) (diag.Diagnostics, bool) {
556+
func attachNewFileSystem(ctx context.Context, newIDs map[string]struct{}, oldIDs map[string]struct{}, api *instance.API, zone scw.Zone, server *instance.Server) error {
558557
for id := range newIDs {
559558
if _, alreadyAttached := oldIDs[id]; !alreadyAttached {
560559
_, err := api.AttachServerFileSystem(&instance.AttachServerFileSystemRequest{
@@ -563,15 +562,19 @@ func attachNewFileSystem(newIDs map[string]struct{}, oldIDs map[string]struct{},
563562
FilesystemID: locality.ExpandID(id),
564563
})
565564
if err != nil {
566-
return diag.FromErr(fmt.Errorf("error attaching filesystem %s: %w", id, err)), true
565+
return fmt.Errorf("error attaching filesystem %s: %w", id, err)
566+
}
567+
_, err = waitForFilesystems(ctx, api, zone, server.ID, *scw.TimeDurationPtr(DefaultInstanceServerWaitTimeout))
568+
if err != nil {
569+
return err
567570
}
568571
}
569572
}
570573

571-
return nil, false
574+
return nil
572575
}
573576

574-
func detachOldFileSystem(oldIDs map[string]struct{}, newIDs map[string]struct{}, api *instancehelpers.BlockAndInstanceAPI, zone scw.Zone, server *instance.Server) (diag.Diagnostics, bool) {
577+
func detachOldFileSystem(ctx context.Context, oldIDs map[string]struct{}, newIDs map[string]struct{}, api *instance.API, zone scw.Zone, server *instance.Server) error {
575578
for id := range oldIDs {
576579
if _, stillPresent := newIDs[id]; !stillPresent {
577580
_, err := api.DetachServerFileSystem(&instance.DetachServerFileSystemRequest{
@@ -580,12 +583,16 @@ func detachOldFileSystem(oldIDs map[string]struct{}, newIDs map[string]struct{},
580583
FilesystemID: locality.ExpandID(id),
581584
})
582585
if err != nil {
583-
return diag.FromErr(fmt.Errorf("error detaching filesystem %s: %w", id, err)), true
586+
return fmt.Errorf("error detaching filesystem %s: %w", id, err)
587+
}
588+
_, err = waitForFilesystems(ctx, api, zone, server.ID, *scw.TimeDurationPtr(DefaultInstanceServerWaitTimeout))
589+
if err != nil && !httperrors.Is404(err) {
590+
return err
584591
}
585592
}
586593
}
587594

588-
return nil, false
595+
return nil
589596
}
590597

591598
func collectFilesystemIDs(fsList []any, target map[string]struct{}) {

internal/services/instance/server.go

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1129,20 +1129,16 @@ func ResourceInstanceServerUpdate(ctx context.Context, d *schema.ResourceData, m
11291129
collectFilesystemIDs(oldList, oldIDs)
11301130
collectFilesystemIDs(newList, newIDs)
11311131

1132-
diagnostics, done := detachOldFileSystem(oldIDs, newIDs, api, zone, server)
1133-
if done {
1134-
return diagnostics
1132+
err := detachOldFileSystem(ctx, oldIDs, newIDs, api.API, zone, server)
1133+
if err != nil {
1134+
return diag.FromErr(err)
11351135
}
11361136

1137-
_, err := waitForFilesystems(ctx, api.API, zone, id, *scw.TimeDurationPtr(DefaultInstanceServerWaitTimeout))
1137+
err = attachNewFileSystem(ctx, newIDs, oldIDs, api.API, zone, server)
11381138
if err != nil {
11391139
return diag.FromErr(err)
11401140
}
11411141

1142-
d2, done2 := attachNewFileSystem(newIDs, oldIDs, api, zone, server)
1143-
if done2 {
1144-
return d2
1145-
}
11461142
}
11471143

11481144
////

internal/services/instance/server_test.go

Lines changed: 49 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2112,7 +2112,7 @@ func TestAccServer_AttachDetachFileSystem(t *testing.T) {
21122112
21132113
resource "scaleway_file_filesystem" "terraform_instance_filesystem"{
21142114
name="filesystem-instance-terraform-test"
2115-
size = 100000000000
2115+
size_in_gb = 100
21162116
}
21172117
21182118
resource "scaleway_instance_server" "base" {
@@ -2149,12 +2149,12 @@ func TestAccServer_AttachDetachFileSystem(t *testing.T) {
21492149
21502150
resource "scaleway_file_filesystem" "terraform_instance_filesystem"{
21512151
name="filesystem-instance-terraform-test"
2152-
size = 100000000000
2152+
size_in_gb = 100
21532153
}
21542154
21552155
resource "scaleway_file_filesystem" "terraform_instance_filesystem_2"{
21562156
name="filesystem-instance-terraform-test-2"
2157-
size = 100000000000
2157+
size_in_gb = 100
21582158
}
21592159
21602160
resource "scaleway_instance_server" "base" {
@@ -2193,12 +2193,12 @@ func TestAccServer_AttachDetachFileSystem(t *testing.T) {
21932193
21942194
resource "scaleway_file_filesystem" "terraform_instance_filesystem"{
21952195
name="filesystem-instance-terraform-test"
2196-
size = 100000000000
2196+
size_in_gb = 100
21972197
}
21982198
21992199
resource "scaleway_file_filesystem" "terraform_instance_filesystem_2"{
22002200
name="filesystem-instance-terraform-test-2"
2201-
size = 100000000000
2201+
size_in_gb = 100
22022202
}
22032203
22042204
resource "scaleway_instance_server" "base" {
@@ -2230,6 +2230,50 @@ func TestAccServer_AttachDetachFileSystem(t *testing.T) {
22302230
resource.TestCheckResourceAttr("scaleway_instance_server.base", "tags.2", "state"),
22312231
),
22322232
},
2233+
{
2234+
Config: `
2235+
resource "scaleway_block_volume" "volume" {
2236+
iops = 15000
2237+
size_in_gb = 15
2238+
}
2239+
2240+
resource "scaleway_file_filesystem" "terraform_instance_filesystem"{
2241+
name="filesystem-instance-terraform-test"
2242+
size_in_gb = 100
2243+
}
2244+
2245+
resource "scaleway_file_filesystem" "terraform_instance_filesystem_2"{
2246+
name="filesystem-instance-terraform-test-2"
2247+
size_in_gb = 100
2248+
}
2249+
2250+
resource "scaleway_instance_server" "base" {
2251+
type = "POP2-HM-2C-16G"
2252+
state = "started"
2253+
tags = [ "terraform-test", "scaleway_instance_server", "state" ]
2254+
root_volume {
2255+
volume_type = "sbs_volume"
2256+
volume_id = scaleway_block_volume.volume.id
2257+
}
2258+
2259+
filesystems {
2260+
filesystem_id = scaleway_file_filesystem.terraform_instance_filesystem_2.id
2261+
}
2262+
}`,
2263+
Check: resource.ComposeTestCheckFunc(
2264+
isServerPresent(tt, "scaleway_instance_server.base"),
2265+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "type", "POP2-HM-2C-16G"),
2266+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "root_volume.0.delete_on_termination", "true"),
2267+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "root_volume.0.size_in_gb", "15"),
2268+
resource.TestCheckResourceAttrSet("scaleway_instance_server.base", "root_volume.0.volume_id"),
2269+
resource.TestCheckResourceAttrSet("scaleway_instance_server.base", "filesystems.0.filesystem_id"),
2270+
resource.TestCheckNoResourceAttr("scaleway_instance_server.base", "filesystems.1.filesystem_id"),
2271+
serverHasNewVolume(tt, "scaleway_instance_server.base"),
2272+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "tags.0", "terraform-test"),
2273+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "tags.1", "scaleway_instance_server"),
2274+
resource.TestCheckResourceAttr("scaleway_instance_server.base", "tags.2", "state"),
2275+
),
2276+
},
22332277
},
22342278
})
22352279
}

0 commit comments

Comments
 (0)