Wait for a 410 before returning success on a machine delete.

This commit is contained in:
Sean Chittenden 2017-05-10 09:12:24 -07:00
parent 236c12c07a
commit eece75a7a6
No known key found for this signature in database
GPG Key ID: 4EBC9DC16C2E5E16
2 changed files with 16 additions and 7 deletions

View File

@ -3,6 +3,7 @@ package triton
import (
"context"
"errors"
"net/http"
"time"
"github.com/hashicorp/packer/packer"
@ -129,15 +130,16 @@ func (d *driverTriton) WaitForMachineState(machineId string, state string, timeo
func (d *driverTriton) WaitForMachineDeletion(machineId string, timeout time.Duration) error {
return waitFor(
func() (bool, error) {
machine, err := d.client.Machines().GetMachine(context.Background(), &triton.GetMachineInput{
_, err := d.client.Machines().GetMachine(context.Background(), &triton.GetMachineInput{
ID: machineId,
})
if err != nil && triton.IsResourceNotFound(err) {
if err != nil {
// Return true only when we receive a 410 (Gone) response. A 404
// indicates that the machine is being deleted whereas a 410 indicates
// that this process has completed.
if triErr, ok := err.(*triton.TritonError); ok && triErr.StatusCode == http.StatusGone {
return true, nil
}
if machine != nil {
return machine.State == "deleted", nil
}
return false, err

View File

@ -64,5 +64,12 @@ func (s *StepCreateSourceMachine) Cleanup(state multistep.StateBag) {
state.Put("error", fmt.Errorf("Problem deleting source machine: %s", err))
return
}
ui.Say(fmt.Sprintf("Waiting for source machine to be destroyed (%s)...", machineId))
err = driver.WaitForMachineDeletion(machineId, 10*time.Minute)
if err != nil {
state.Put("error", fmt.Errorf("Problem waiting for source machine to be deleted: %s", err))
return
}
}
}