11package baremetaltestfuncs
22
33import (
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
1417func 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