11package scaleway
22
33import (
4+ "fmt"
45 "log"
56 "time"
67
8+ "github.com/hashicorp/terraform/helper/resource"
79 "github.com/scaleway/scaleway-cli/pkg/api"
810)
911
@@ -17,36 +19,55 @@ func String(val string) *string {
1719 return & val
1820}
1921
20- // NOTE copied from github.com/scaleway/scaleway-cli/pkg/api/helpers.go
21- // the helpers.go file pulls in quite a lot dependencies, and they're just convenience wrappers anyway
22+ // deleteRunningServer terminates the server and waits until it is removed.
23+ func deleteRunningServer (scaleway * api.ScalewayAPI , server * api.ScalewayServer ) error {
24+ err := scaleway .PostServerAction (server .Identifier , "terminate" )
2225
23- func deleteServerSafe (s * api.ScalewayAPI , serverID string ) error {
24- server , err := s .GetServer (serverID )
2526 if err != nil {
27+ if serr , ok := err .(api.ScalewayAPIError ); ok {
28+ if serr .StatusCode == 404 {
29+ return nil
30+ }
31+ }
32+
2633 return err
2734 }
2835
29- if server .State != "stopped" {
30- if err := s .PostServerAction (serverID , "poweroff" ); err != nil {
31- return err
36+ return resource .Retry (5 * time .Minute , func () * resource.RetryError {
37+ _ , err := scaleway .GetServer (server .Identifier )
38+
39+ if err == nil {
40+ return resource .RetryableError (fmt .Errorf ("Waiting for server %q to be deleted" , server .Identifier ))
3241 }
33- if err := waitForServerState (s , serverID , "stopped" ); err != nil {
34- return err
42+
43+ if serr , ok := err .(api.ScalewayAPIError ); ok {
44+ if serr .StatusCode == 404 {
45+ return nil
46+ }
3547 }
36- }
3748
38- if err := s .DeleteServer (serverID ); err != nil {
49+ return resource .RetryableError (err )
50+ })
51+ }
52+
53+ // deleteStoppedServer needs to cleanup attached root volumes. this is not done
54+ // automatically by Scaleway
55+ func deleteStoppedServer (scaleway * api.ScalewayAPI , server * api.ScalewayServer ) error {
56+ if err := scaleway .DeleteServer (server .Identifier ); err != nil {
3957 return err
4058 }
59+
4160 if rootVolume , ok := server .Volumes ["0" ]; ok {
42- if err := s .DeleteVolume (rootVolume .Identifier ); err != nil {
61+ if err := scaleway .DeleteVolume (rootVolume .Identifier ); err != nil {
4362 return err
4463 }
4564 }
46-
4765 return nil
4866}
4967
68+ // NOTE copied from github.com/scaleway/scaleway-cli/pkg/api/helpers.go
69+ // the helpers.go file pulls in quite a lot dependencies, and they're just convenience wrappers anyway
70+
5071func waitForServerState (s * api.ScalewayAPI , serverID string , targetState string ) error {
5172 var server * api.ScalewayServer
5273 var err error
0 commit comments