github.com/mhlias/terraform@v0.6.12-0.20161118140322-a5d6410b912a/builtin/providers/scaleway/helpers.go (about)

     1  package scaleway
     2  
     3  import (
     4  	"log"
     5  	"time"
     6  
     7  	"github.com/scaleway/scaleway-cli/pkg/api"
     8  )
     9  
    10  // Bool returns a pointer to of the bool value passed in.
    11  func Bool(val bool) *bool {
    12  	return &val
    13  }
    14  
    15  // String returns a pointer to of the string value passed in.
    16  func String(val string) *string {
    17  	return &val
    18  }
    19  
    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  
    23  func deleteServerSafe(s *api.ScalewayAPI, serverID string) error {
    24  	server, err := s.GetServer(serverID)
    25  	if err != nil {
    26  		return err
    27  	}
    28  
    29  	if server.State != "stopped" {
    30  		if err := s.PostServerAction(serverID, "poweroff"); err != nil {
    31  			return err
    32  		}
    33  		if err := waitForServerState(s, serverID, "stopped"); err != nil {
    34  			return err
    35  		}
    36  	}
    37  
    38  	if err := s.DeleteServer(serverID); err != nil {
    39  		return err
    40  	}
    41  	if rootVolume, ok := server.Volumes["0"]; ok {
    42  		if err := s.DeleteVolume(rootVolume.Identifier); err != nil {
    43  			return err
    44  		}
    45  	}
    46  
    47  	return nil
    48  }
    49  
    50  func waitForServerState(s *api.ScalewayAPI, serverID string, targetState string) error {
    51  	var server *api.ScalewayServer
    52  	var err error
    53  
    54  	var currentState string
    55  
    56  	for {
    57  		server, err = s.GetServer(serverID)
    58  		if err != nil {
    59  			return err
    60  		}
    61  		if currentState != server.State {
    62  			log.Printf("[DEBUG] Server changed state to %q\n", server.State)
    63  			currentState = server.State
    64  		}
    65  		if server.State == targetState {
    66  			break
    67  		}
    68  		time.Sleep(1 * time.Second)
    69  	}
    70  
    71  	return nil
    72  }