github.com/phobos182/packer@v0.2.3-0.20130819023704-c84d2aeffc68/builder/amazon/instance/step_upload_bundle.go (about) 1 package instance 2 3 import ( 4 "fmt" 5 "github.com/mitchellh/multistep" 6 "github.com/mitchellh/packer/packer" 7 ) 8 9 type uploadCmdData struct { 10 AccessKey string 11 BucketName string 12 BundleDirectory string 13 ManifestPath string 14 SecretKey string 15 } 16 17 type StepUploadBundle struct{} 18 19 func (s *StepUploadBundle) Run(state map[string]interface{}) multistep.StepAction { 20 comm := state["communicator"].(packer.Communicator) 21 config := state["config"].(*Config) 22 manifestName := state["manifest_name"].(string) 23 manifestPath := state["manifest_path"].(string) 24 ui := state["ui"].(packer.Ui) 25 26 var err error 27 config.BundleUploadCommand, err = config.tpl.Process(config.BundleUploadCommand, uploadCmdData{ 28 AccessKey: config.AccessKey, 29 BucketName: config.S3Bucket, 30 BundleDirectory: config.BundleDestination, 31 ManifestPath: manifestPath, 32 SecretKey: config.SecretKey, 33 }) 34 if err != nil { 35 err := fmt.Errorf("Error processing bundle upload command: %s", err) 36 state["error"] = err 37 ui.Error(err.Error()) 38 return multistep.ActionHalt 39 } 40 41 ui.Say("Uploading the bundle...") 42 cmd := &packer.RemoteCmd{Command: config.BundleUploadCommand} 43 if err := cmd.StartWithUi(comm, ui); err != nil { 44 state["error"] = fmt.Errorf("Error uploading volume: %s", err) 45 ui.Error(state["error"].(error).Error()) 46 return multistep.ActionHalt 47 } 48 49 if cmd.ExitStatus != 0 { 50 state["error"] = fmt.Errorf( 51 "Bundle upload failed. Please see the output above for more\n" + 52 "details on what went wrong.") 53 ui.Error(state["error"].(error).Error()) 54 return multistep.ActionHalt 55 } 56 57 state["remote_manifest_path"] = fmt.Sprintf( 58 "%s/%s", config.S3Bucket, manifestName) 59 60 return multistep.ActionContinue 61 } 62 63 func (s *StepUploadBundle) Cleanup(state map[string]interface{}) {}