diff --git a/builder/vmware/common/step_clean_vmx.go b/builder/vmware/common/step_clean_vmx.go index 9c677e3a8..df7b42763 100644 --- a/builder/vmware/common/step_clean_vmx.go +++ b/builder/vmware/common/step_clean_vmx.go @@ -42,26 +42,17 @@ func (s StepCleanVMX) Run(state multistep.StateBag) multistep.StepAction { } vmxData["floppy0.present"] = "FALSE" - if isoPathRaw, ok := state.GetOk("iso_path"); ok { - isoPath := isoPathRaw.(string) + devRe := regexp.MustCompile(`^ide\d:\d\.`) + for k, v := range vmxData { + ide := devRe.FindString(k) + if ide == "" || v != "cdrom-image" { + continue + } ui.Message("Detaching ISO from CD-ROM device...") - devRe := regexp.MustCompile(`^ide\d:\d\.`) - for k, _ := range vmxData { - match := devRe.FindString(k) - if match == "" { - continue - } - filenameKey := match + "filename" - if filename, ok := vmxData[filenameKey]; ok { - if filename == isoPath { - // Change the CD-ROM device back to auto-detect to eject - vmxData[filenameKey] = "auto detect" - vmxData[match+"devicetype"] = "cdrom-raw" - } - } - } + vmxData[ide+"devicetype"] = "cdrom-raw" + vmxData[ide+"filename"] = "auto detect" } // Rewrite the VMX diff --git a/builder/vmware/common/step_clean_vmx_test.go b/builder/vmware/common/step_clean_vmx_test.go index 73a8abf45..ea30fb54a 100644 --- a/builder/vmware/common/step_clean_vmx_test.go +++ b/builder/vmware/common/step_clean_vmx_test.go @@ -88,7 +88,6 @@ func TestStepCleanVMX_isoPath(t *testing.T) { t.Fatalf("err: %s", err) } - state.Put("iso_path", "foo") state.Put("vmx_path", vmxPath) // Test the run @@ -135,6 +134,7 @@ floppy0.filetype = "file" ` const testVMXISOPath = ` +ide0:0.devicetype = "cdrom-image" ide0:0.filename = "foo" ide0:1.filename = "bar" foo = "bar" diff --git a/builder/vmware/common/step_shutdown.go b/builder/vmware/common/step_shutdown.go index 1b5b95f95..5aad45fd0 100644 --- a/builder/vmware/common/step_shutdown.go +++ b/builder/vmware/common/step_shutdown.go @@ -137,10 +137,14 @@ LockWaitLoop: } } - if runtime.GOOS == "windows" && !s.Testing { + if runtime.GOOS != "darwin" && !s.Testing { // Windows takes a while to yield control of the files when the - // process is exiting. We just sleep here. In the future, it'd be - // nice to find a better solution to this. + // process is exiting. Ubuntu will yield control of the files but + // VMWare may overwrite the VMX cleanup steps that run after this, + // so we wait to ensure VMWare has exited and flushed the VMX. + + // We just sleep here. In the future, it'd be nice to find a better + // solution to this. time.Sleep(5 * time.Second) }