From 9b641c9bfd96180e58c30d5c5a22f10d51baf11d Mon Sep 17 00:00:00 2001 From: sophia Date: Thu, 18 Mar 2021 17:22:27 -0500 Subject: [PATCH] Force NoDirectUpload for vagrantcloud if asset size > 5 GB --- .../vagrant-cloud/step_prepare_upload.go | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/post-processor/vagrant-cloud/step_prepare_upload.go b/post-processor/vagrant-cloud/step_prepare_upload.go index 4f5efcb5a..b68c8bbe0 100644 --- a/post-processor/vagrant-cloud/step_prepare_upload.go +++ b/post-processor/vagrant-cloud/step_prepare_upload.go @@ -3,11 +3,14 @@ package vagrantcloud import ( "context" "fmt" + "os" "github.com/hashicorp/packer-plugin-sdk/multistep" packersdk "github.com/hashicorp/packer-plugin-sdk/packer" ) +const VAGRANT_CLOUD_DIRECT_UPLOAD_LIMIT = 5000000000 // Upload limit is 5GB + type Upload struct { UploadPath string `json:"upload_path"` CallbackPath string `json:"callback"` @@ -25,6 +28,18 @@ func (s *stepPrepareUpload) Run(ctx context.Context, state multistep.StateBag) m provider := state.Get("provider").(*Provider) artifactFilePath := state.Get("artifactFilePath").(string) + // If direct upload is enabled, the asset size must be <= 5 GB + if config.NoDirectUpload == false { + f, err := os.Stat(artifactFilePath) + if err != nil { + ui.Error(fmt.Sprintf("error determining size of upload artifact: %s", artifactFilePath)) + } + if f.Size() > VAGRANT_CLOUD_DIRECT_UPLOAD_LIMIT { + ui.Say(fmt.Sprintf("Asset %s is larger than the direct upload limit. Setting `NoDirectUpload` to true", artifactFilePath)) + config.NoDirectUpload = true + } + } + path := fmt.Sprintf("box/%s/version/%v/provider/%s/upload", box.Tag, version.Version, provider.Name) if !config.NoDirectUpload { path = path + "/direct"