Wait for a 410 before returning success on a machine delete.
This commit is contained in:
parent
236c12c07a
commit
eece75a7a6
|
@ -3,6 +3,7 @@ package triton
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"errors"
|
"errors"
|
||||||
|
"net/http"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/hashicorp/packer/packer"
|
"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 {
|
func (d *driverTriton) WaitForMachineDeletion(machineId string, timeout time.Duration) error {
|
||||||
return waitFor(
|
return waitFor(
|
||||||
func() (bool, error) {
|
func() (bool, error) {
|
||||||
machine, err := d.client.Machines().GetMachine(context.Background(), &triton.GetMachineInput{
|
_, err := d.client.Machines().GetMachine(context.Background(), &triton.GetMachineInput{
|
||||||
ID: machineId,
|
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
|
return true, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
if machine != nil {
|
|
||||||
return machine.State == "deleted", nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return false, err
|
return false, err
|
||||||
|
|
|
@ -64,5 +64,12 @@ func (s *StepCreateSourceMachine) Cleanup(state multistep.StateBag) {
|
||||||
state.Put("error", fmt.Errorf("Problem deleting source machine: %s", err))
|
state.Put("error", fmt.Errorf("Problem deleting source machine: %s", err))
|
||||||
return
|
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
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue