From f6660e8a4f9b2433a735e3b36bb3a126da125ae7 Mon Sep 17 00:00:00 2001 From: Mitchell Hashimoto Date: Thu, 18 Jun 2015 10:25:47 +0200 Subject: [PATCH] post-processor/vagrant-cloud: retry uploads [GH-2167] --- post-processor/vagrant-cloud/step_upload.go | 35 ++++++++++++++++++--- 1 file changed, 31 insertions(+), 4 deletions(-) diff --git a/post-processor/vagrant-cloud/step_upload.go b/post-processor/vagrant-cloud/step_upload.go index f82f125f8..2bada80b8 100644 --- a/post-processor/vagrant-cloud/step_upload.go +++ b/post-processor/vagrant-cloud/step_upload.go @@ -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 }