github.com/supr/packer@v0.3.10-0.20131015195147-7b09e24ac3c1/builder/virtualbox/step_upload_guest_additions.go (about)

     1  package virtualbox
     2  
     3  import (
     4  	"fmt"
     5  	"github.com/mitchellh/multistep"
     6  	"github.com/mitchellh/packer/packer"
     7  	"log"
     8  	"os"
     9  )
    10  
    11  type guestAdditionsPathTemplate struct {
    12  	Version string
    13  }
    14  
    15  // This step uploads the guest additions ISO to the VM.
    16  type stepUploadGuestAdditions struct{}
    17  
    18  func (s *stepUploadGuestAdditions) Run(state multistep.StateBag) multistep.StepAction {
    19  	comm := state.Get("communicator").(packer.Communicator)
    20  	config := state.Get("config").(*config)
    21  	driver := state.Get("driver").(Driver)
    22  	guestAdditionsPath := state.Get("guest_additions_path").(string)
    23  	ui := state.Get("ui").(packer.Ui)
    24  
    25  	// If we're attaching then don't do this, since we attached.
    26  	if config.GuestAdditionsAttach {
    27  		log.Println("Not uploading guest additions since we're attaching.")
    28  		return multistep.ActionContinue
    29  	}
    30  
    31  	version, err := driver.Version()
    32  	if err != nil {
    33  		state.Put("error", fmt.Errorf("Error reading version for guest additions upload: %s", err))
    34  		return multistep.ActionHalt
    35  	}
    36  
    37  	f, err := os.Open(guestAdditionsPath)
    38  	if err != nil {
    39  		state.Put("error", fmt.Errorf("Error opening guest additions ISO: %s", err))
    40  		return multistep.ActionHalt
    41  	}
    42  
    43  	tplData := &guestAdditionsPathTemplate{
    44  		Version: version,
    45  	}
    46  
    47  	config.GuestAdditionsPath, err = config.tpl.Process(config.GuestAdditionsPath, tplData)
    48  	if err != nil {
    49  		err := fmt.Errorf("Error preparing guest additions path: %s", err)
    50  		state.Put("error", err)
    51  		ui.Error(err.Error())
    52  		return multistep.ActionHalt
    53  	}
    54  
    55  	ui.Say("Uploading VirtualBox guest additions ISO...")
    56  	if err := comm.Upload(config.GuestAdditionsPath, f); err != nil {
    57  		state.Put("error", fmt.Errorf("Error uploading guest additions: %s", err))
    58  		return multistep.ActionHalt
    59  	}
    60  
    61  	return multistep.ActionContinue
    62  }
    63  
    64  func (s *stepUploadGuestAdditions) Cleanup(state multistep.StateBag) {}