diff --git a/builder/openstack/step_create_image.go b/builder/openstack/step_create_image.go index 61607b2f2..5c39b0ffc 100644 --- a/builder/openstack/step_create_image.go +++ b/builder/openstack/step_create_image.go @@ -62,12 +62,20 @@ func (s *stepCreateImage) Cleanup(multistep.StateBag) { // WaitForImage waits for the given Image ID to become ready. func WaitForImage(client *gophercloud.ServiceClient, imageId string) error { + maxNumErrors := 10 + numErrors := 0 + for { image, err := images.Get(client, imageId).Extract() if err != nil { errCode, ok := err.(*gophercloud.UnexpectedResponseCodeError) - if ok && errCode.Actual == 500 { - log.Printf("[ERROR] 500 error received, will ignore and retry: %s", err) + if ok && (errCode.Actual == 500 || errCode.Actual == 404) { + numErrors++ + if numErrors >= maxNumErrors { + log.Printf("[ERROR] Maximum number of errors (%d) reached; failing with: %s", numErrors, err) + return err + } + log.Printf("[ERROR] %d error received, will ignore and retry: %s", errCode.Actual, err) time.Sleep(2 * time.Second) continue }