func deleteServerSafe(s *api.ScalewayAPI, serverID string) error { server, err := s.GetServer(serverID) if err != nil { return err } if server.State != "stopped" { if err := s.PostServerAction(serverID, "poweroff"); err != nil { return err } if err := waitForServerState(s, serverID, "stopped"); err != nil { return err } } if err := s.DeleteServer(serverID); err != nil { return err } if rootVolume, ok := server.Volumes["0"]; ok { if err := s.DeleteVolume(rootVolume.Identifier); err != nil { return err } } return nil }
// deleteRunningServer terminates the server and waits until it is removed. func deleteRunningServer(scaleway *api.ScalewayAPI, server *api.ScalewayServer) error { err := scaleway.PostServerAction(server.Identifier, "terminate") if err != nil { if serr, ok := err.(api.ScalewayAPIError); ok { if serr.StatusCode == 404 { return nil } } return err } return resource.Retry(20*time.Minute, func() *resource.RetryError { _, err := scaleway.GetServer(server.Identifier) if err == nil { return resource.RetryableError(fmt.Errorf("Waiting for server %q to be deleted", server.Identifier)) } if serr, ok := err.(api.ScalewayAPIError); ok { if serr.StatusCode == 404 { return nil } } return resource.RetryableError(err) }) }
// deleteRunningServer terminates the server and waits until it is removed. func deleteRunningServer(scaleway *api.ScalewayAPI, server *api.ScalewayServer) error { err := scaleway.PostServerAction(server.Identifier, "terminate") if err != nil { if serr, ok := err.(api.ScalewayAPIError); ok { if serr.StatusCode == 404 { return nil } } return err } return waitForServerState(scaleway, server.Identifier, "stopped") }