github.com/askholme/packer@v0.7.2-0.20140924152349-70d9566a6852/builder/vmware/common/step_upload_tools.go (about) 1 package common 2 3 import ( 4 "fmt" 5 "github.com/mitchellh/multistep" 6 "github.com/mitchellh/packer/packer" 7 "os" 8 ) 9 10 type toolsUploadPathTemplate struct { 11 Flavor string 12 } 13 14 type StepUploadTools struct { 15 RemoteType string 16 ToolsUploadFlavor string 17 ToolsUploadPath string 18 Tpl *packer.ConfigTemplate 19 } 20 21 func (c *StepUploadTools) Run(state multistep.StateBag) multistep.StepAction { 22 driver := state.Get("driver").(Driver) 23 24 if c.RemoteType == "esx5" { 25 if err := driver.ToolsInstall(); err != nil { 26 state.Put("error", fmt.Errorf("Couldn't mount VMware tools ISO. Please check the 'guest_os_type' in your template.json.")) 27 } 28 return multistep.ActionContinue 29 } 30 31 if c.ToolsUploadFlavor == "" { 32 return multistep.ActionContinue 33 } 34 35 comm := state.Get("communicator").(packer.Communicator) 36 tools_source := state.Get("tools_upload_source").(string) 37 ui := state.Get("ui").(packer.Ui) 38 39 ui.Say(fmt.Sprintf("Uploading the '%s' VMware Tools", c.ToolsUploadFlavor)) 40 f, err := os.Open(tools_source) 41 if err != nil { 42 state.Put("error", fmt.Errorf("Error opening VMware Tools ISO: %s", err)) 43 return multistep.ActionHalt 44 } 45 defer f.Close() 46 47 tplData := &toolsUploadPathTemplate{ 48 Flavor: c.ToolsUploadFlavor, 49 } 50 c.ToolsUploadPath, err = c.Tpl.Process(c.ToolsUploadPath, tplData) 51 if err != nil { 52 err := fmt.Errorf("Error preparing upload path: %s", err) 53 state.Put("error", err) 54 ui.Error(err.Error()) 55 return multistep.ActionHalt 56 } 57 58 if err := comm.Upload(c.ToolsUploadPath, f, nil); err != nil { 59 err := fmt.Errorf("Error uploading VMware Tools: %s", err) 60 state.Put("error", err) 61 ui.Error(err.Error()) 62 return multistep.ActionHalt 63 } 64 65 return multistep.ActionContinue 66 } 67 68 func (c *StepUploadTools) Cleanup(multistep.StateBag) {}