From b5fbf76dbcc65601828045805074594ffee780fe Mon Sep 17 00:00:00 2001 From: Jarkko Haapalainen Date: Wed, 27 Jun 2018 09:29:56 +0300 Subject: [PATCH] Robustness for instance deletion When instance state is not started then removal of instance will fail --- driver/upcloud.go | 35 +++++++++++++++-------------------- 1 file changed, 15 insertions(+), 20 deletions(-) diff --git a/driver/upcloud.go b/driver/upcloud.go index c46522a..93c3edb 100644 --- a/driver/upcloud.go +++ b/driver/upcloud.go @@ -7,10 +7,10 @@ import ( "os" "time" - "github.com/Jalle19/upcloud-go-sdk/upcloud" - "github.com/Jalle19/upcloud-go-sdk/upcloud/client" - "github.com/Jalle19/upcloud-go-sdk/upcloud/request" - "github.com/Jalle19/upcloud-go-sdk/upcloud/service" + "github.com/UpCloudLtd/upcloud-go-api/upcloud" + "github.com/UpCloudLtd/upcloud-go-api/upcloud/client" + "github.com/UpCloudLtd/upcloud-go-api/upcloud/request" + "github.com/UpCloudLtd/upcloud-go-api/upcloud/service" "github.com/docker/machine/libmachine/drivers" "github.com/docker/machine/libmachine/log" "github.com/docker/machine/libmachine/mcnflag" @@ -334,9 +334,11 @@ func (d *Driver) Kill() error { func (d *Driver) Remove() error { details, err := d.getServerDetails(d.ServerUUID) - err = d.stopServer(details.UUID, request.ServerStopTypeHard) - if err != nil { - return err + if details.State == upcloud.ServerStateStarted { + err = d.stopServer(details.UUID, request.ServerStopTypeHard) + if err != nil { + return err + } } err = d.waitForState(upcloud.ServerStateStopped) @@ -439,18 +441,11 @@ func (d *Driver) restartServer(UUID string) error { } func (d *Driver) waitForState(state string) error { - server_state := "unkown" - var err error - - for server_state != state { - details, err := d.getServerDetails(d.ServerUUID) - - server_state = details.State - - if err != nil { - return err - } - } - + service := d.getService() + _, err := service.WaitForServerState(&request.WaitForServerStateRequest{ + UUID: d.ServerUUID, + DesiredState: state, + Timeout: time.Minute * 2, + }) return err }