builder/vmware: for remote builds, put VMX in temp dir

This commit is contained in:
Mitchell Hashimoto 2013-11-07 21:02:12 -08:00
parent a4b54f1cf3
commit b228723903
1 changed files with 25 additions and 4 deletions

View File

@ -26,9 +26,11 @@ type vmxTemplateData struct {
//
// Produces:
// vmx_path string - The path to the VMX file.
type stepCreateVMX struct{}
type stepCreateVMX struct {
tempDir string
}
func (stepCreateVMX) Run(state multistep.StateBag) multistep.StepAction {
func (s *stepCreateVMX) Run(state multistep.StateBag) multistep.StepAction {
config := state.Get("config").(*config)
isoPath := state.Get("iso_path").(string)
ui := state.Get("ui").(packer.Ui)
@ -91,7 +93,23 @@ func (stepCreateVMX) Run(state multistep.StateBag) multistep.StepAction {
// Set this so that no dialogs ever appear from Packer.
vmxData["msg.autoAnswer"] = "true"
vmxPath := filepath.Join(config.OutputDir, config.VMName+".vmx")
vmxDir := config.OutputDir
if config.RemoteType != "" {
// For remote builds, we just put the VMX in a temporary
// directory since it just gets uploaded anyways.
vmxDir, err = ioutil.TempDir("", "packer-vmx")
if err != nil {
err := fmt.Errorf("Error preparing VMX template: %s", err)
state.Put("error", err)
ui.Error(err.Error())
return multistep.ActionHalt
}
// Set the tempDir so we clean it up
s.tempDir = vmxDir
}
vmxPath := filepath.Join(vmxDir, config.VMName+".vmx")
if err := WriteVMX(vmxPath, vmxData); err != nil {
err := fmt.Errorf("Error creating VMX file: %s", err)
state.Put("error", err)
@ -104,7 +122,10 @@ func (stepCreateVMX) Run(state multistep.StateBag) multistep.StepAction {
return multistep.ActionContinue
}
func (stepCreateVMX) Cleanup(multistep.StateBag) {
func (s *stepCreateVMX) Cleanup(multistep.StateBag) {
if s.tempDir != "" {
os.RemoveAll(s.tempDir)
}
}
// This is the default VMX template used if no other template is given.