Skip to content

Commit

Permalink
improve server startup/ shutdown
Browse files Browse the repository at this point in the history
fixes scaleway#31

by declaring desired pending states hung servers will be detected
  • Loading branch information
nicolai86 committed Feb 19, 2018
1 parent 77d681a commit 6a25b42
Show file tree
Hide file tree
Showing 3 changed files with 19 additions and 16 deletions.
24 changes: 13 additions & 11 deletions scaleway/helpers.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,7 @@ func deleteRunningServer(scaleway *api.API, server *api.Server) error {
return err
}

return waitForServerState(scaleway, server.Identifier, "stopped")
return waitForServerShutdown(scaleway, server.Identifier)
}

// deleteStoppedServer needs to cleanup attached root volumes. this is not done
Expand All @@ -82,15 +82,17 @@ func deleteStoppedServer(scaleway *api.API, server *api.Server) error {

var allStates = []string{"starting", "running", "stopping", "stopped"}

func waitForServerState(scaleway *api.API, serverID, targetState string) error {
pending := []string{}
for _, state := range allStates {
if state != targetState {
pending = append(pending, state)
}
}
func waitForServerStartup(scaleway *api.API, serverID string) error {
return waitForServerState(scaleway, serverID, "running", []string{"running", "starting"})
}

func waitForServerShutdown(scaleway *api.API, serverID string) error {
return waitForServerState(scaleway, serverID, "stopped", []string{"stopped", "stopping"})
}

func waitForServerState(scaleway *api.API, serverID, targetState string, pendingStates []string) error {
stateConf := &resource.StateChangeConf{
Pending: pending,
Pending: pendingStates,
Target: []string{targetState},
Refresh: func() (interface{}, string, error) {
s, err := scaleway.GetServer(serverID)
Expand All @@ -111,8 +113,8 @@ func waitForServerState(scaleway *api.API, serverID, targetState string) error {
return 42, "error", err
},
Timeout: 60 * time.Minute,
MinTimeout: 5 * time.Second,
Delay: 5 * time.Second,
MinTimeout: 10 * time.Second,
Delay: 15 * time.Second,
}
_, err := stateConf.WaitForState()
return err
Expand Down
2 changes: 1 addition & 1 deletion scaleway/resource_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,7 +208,7 @@ func resourceScalewayServerCreate(d *schema.ResourceData, m interface{}) error {
return err
}

err = waitForServerState(scaleway, id, "running")
err = waitForServerStartup(scaleway, id)

if v, ok := d.GetOk("public_ip"); ok {
if err := attachIP(scaleway, d.Id(), v.(string)); err != nil {
Expand Down
9 changes: 5 additions & 4 deletions scaleway/resource_volume_attachment.go
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ func resourceScalewayVolumeAttachmentCreate(d *schema.ResourceData, m interface{
return err
}
}
if err := waitForServerState(scaleway, server.Identifier, "stopped"); err != nil {

if err := waitForServerShutdown(scaleway, server.Identifier); err != nil {
return err
}

Expand Down Expand Up @@ -117,7 +118,7 @@ func resourceScalewayVolumeAttachmentCreate(d *schema.ResourceData, m interface{
if err := scaleway.PostServerAction(serverID, "poweron"); err != nil {
return err
}
if err := waitForServerState(scaleway, serverID, "running"); err != nil {
if err := waitForServerStartup(scaleway, serverID); err != nil {
return err
}
}
Expand Down Expand Up @@ -190,7 +191,7 @@ func resourceScalewayVolumeAttachmentDelete(d *schema.ResourceData, m interface{
return err
}
}
if err := waitForServerState(scaleway, server.Identifier, "stopped"); err != nil {
if err := waitForServerShutdown(scaleway, server.Identifier); err != nil {
return err
}

Expand Down Expand Up @@ -241,7 +242,7 @@ func resourceScalewayVolumeAttachmentDelete(d *schema.ResourceData, m interface{
if err := scaleway.PostServerAction(serverID, "poweron"); err != nil {
return err
}
if err := waitForServerState(scaleway, serverID, "running"); err != nil {
if err := waitForServerStartup(scaleway, serverID); err != nil {
return err
}
}
Expand Down

0 comments on commit 6a25b42

Please sign in to comment.