post-processor/vagrant-cloud: retry uploads [GH-2167]

This commit is contained in:
Mitchell Hashimoto 2015-06-18 10:25:47 +02:00
parent d9fceaf39d
commit f6660e8a4f
1 changed files with 31 additions and 4 deletions

View File

@ -2,6 +2,8 @@ package vagrantcloud
import (
"fmt"
"time"
"github.com/mitchellh/multistep"
"github.com/mitchellh/packer/packer"
)
@ -17,13 +19,38 @@ func (s *stepUpload) Run(state multistep.StateBag) multistep.StepAction {
url := upload.UploadPath
ui.Say(fmt.Sprintf("Uploading box: %s", artifactFilePath))
ui.Message(
"Depending on your internet connection and the size of the box,\n" +
"this may take some time")
ui.Message("Depending on your internet connection and the size of the box, this may take some time")
var finalErr error
for i := 0; i < 3; i++ {
if i > 0 {
ui.Message(fmt.Sprintf("Uploading box, attempt %d", i+1))
}
resp, err := client.Upload(artifactFilePath, url)
resp, err := client.Upload(artifactFilePath, url)
if err != nil {
finalErr = err
ui.Message(fmt.Sprintf(
"Error uploading box! Will retry in 10 seconds. Error: %s", err))
time.Sleep(10 * time.Second)
continue
}
if resp.StatusCode != 200 {
finalErr = fmt.Errorf("bad HTTP status: %d", resp.StatusCode)
ui.Message(fmt.Sprintf(
"Error uploading box! Will retry in 10 seconds. Status: %d",
resp.StatusCode))
time.Sleep(10 * time.Second)
continue
}
if err != nil || (resp.StatusCode != 200) {
state.Put("error", fmt.Errorf("Error uploading Box: %s", err))
finalErr = nil
}
if finalErr != nil {
state.Put("error", finalErr)
return multistep.ActionHalt
}