Skip to content

Commit d94eaa1

Browse files
committed
test(baremetal): harden destroy checks with RetryContext
1 parent e85bebd commit d94eaa1

File tree

2 files changed

+1402
-2278
lines changed

2 files changed

+1402
-2278
lines changed

internal/services/baremetal/testdata/data-source-server-basic.cassette.yaml

Lines changed: 1371 additions & 2253 deletions
Large diffs are not rendered by default.
Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,11 @@
11
package baremetaltestfuncs
22

33
import (
4+
"context"
45
"fmt"
6+
"time"
57

8+
"github.com/hashicorp/terraform-plugin-sdk/v2/helper/retry"
69
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
710
"github.com/hashicorp/terraform-plugin-testing/terraform"
811
baremetal2 "github.com/scaleway/scaleway-sdk-go/api/baremetal/v1"
@@ -13,32 +16,35 @@ import (
1316

1417
func CheckServerDestroy(tt *acctest.TestTools) resource.TestCheckFunc {
1518
return func(state *terraform.State) error {
16-
for _, rs := range state.RootModule().Resources {
17-
if rs.Type != "scaleway_baremetal_server" {
18-
continue
19+
ctx := context.Background()
20+
21+
return retry.RetryContext(ctx, 3*time.Minute, func() *retry.RetryError {
22+
for _, rs := range state.RootModule().Resources {
23+
if rs.Type != "scaleway_baremetal_server" {
24+
continue
25+
}
26+
27+
api, zonedID, err := baremetal.NewAPIWithZoneAndID(tt.Meta, rs.Primary.ID)
28+
if err != nil {
29+
return retry.NonRetryableError(err)
30+
}
31+
32+
_, err = api.GetServer(&baremetal2.GetServerRequest{
33+
ServerID: zonedID.ID,
34+
Zone: zonedID.Zone,
35+
})
36+
37+
switch {
38+
case err == nil:
39+
return retry.RetryableError(fmt.Errorf("server (%s) still exists", rs.Primary.ID))
40+
case httperrors.Is404(err):
41+
continue
42+
default:
43+
return retry.NonRetryableError(err)
44+
}
1945
}
2046

21-
baremetalAPI, zonedID, err := baremetal.NewAPIWithZoneAndID(tt.Meta, rs.Primary.ID)
22-
if err != nil {
23-
return err
24-
}
25-
26-
_, err = baremetalAPI.GetServer(&baremetal2.GetServerRequest{
27-
ServerID: zonedID.ID,
28-
Zone: zonedID.Zone,
29-
})
30-
31-
// If no error resource still exist
32-
if err == nil {
33-
return fmt.Errorf("server (%s) still exists", rs.Primary.ID)
34-
}
35-
36-
// Unexpected api error we return it
37-
if !httperrors.Is404(err) {
38-
return err
39-
}
40-
}
41-
42-
return nil
47+
return nil
48+
})
4349
}
4450
}

0 commit comments

Comments
 (0)