diff --git a/builder/vmware/vmx/step_clone_vmx.go b/builder/vmware/vmx/step_clone_vmx.go index bd644ca30..482adb46b 100644 --- a/builder/vmware/vmx/step_clone_vmx.go +++ b/builder/vmware/vmx/step_clone_vmx.go @@ -22,8 +22,10 @@ func (s *StepCloneVMX) Run(_ context.Context, state multistep.StateBag) multiste driver := state.Get("driver").(vmwcommon.Driver) ui := state.Get("ui").(packer.Ui) + // initially we need to stash the path to the original .vmx file vmxPath := filepath.Join(s.OutputDir, s.VMName+".vmx") + // so first, let's clone the source path to the vmxPath ui.Say("Cloning source VM...") log.Printf("Cloning from: %s", s.Path) log.Printf("Cloning to: %s", vmxPath) @@ -31,13 +33,16 @@ func (s *StepCloneVMX) Run(_ context.Context, state multistep.StateBag) multiste state.Put("error", err) return multistep.ActionHalt } + ui.Say("Successfully cloned source VM to: %s", vmxPath) + // now we read the .vmx so we can determine what else to stash vmxData, err := vmwcommon.ReadVMX(vmxPath) if err != nil { state.Put("error", err) return multistep.ActionHalt } + // figure out the disk filename by walking through all device types var diskName string if _, ok := vmxData["scsi0:0.filename"]; ok { diskName = vmxData["scsi0:0.filename"] @@ -53,19 +58,25 @@ func (s *StepCloneVMX) Run(_ context.Context, state multistep.StateBag) multiste state.Put("error", err) return multistep.ActionHalt } + log.Printf("Found root disk filename: %s", diskName) + // determine the network type by reading out of the .vmx var networkType string - if _, ok := vmxData["ethernet0.connectionType"]; ok { - networkType = vmxData["ethernet0.connectionType"] + if _, ok := vmxData["ethernet0.connectiontype"]; ok { + networkType = vmxData["ethernet0.connectiontype"] + log.Printf("Discovered the network type: %s", networkType) } if networkType == "" { networkType = "nat" - log.Printf("Defaulting to network type : nat") + log.Printf("Defaulting to network type: %s", networkType) } + ui.Say("Using network type: %s", networkType) - state.Put("vmnetwork", networkType) - state.Put("full_disk_path", filepath.Join(s.OutputDir, diskName)) + // we were able to find everything, so stash it in our state. state.Put("vmx_path", vmxPath) + state.Put("full_disk_path", filepath.Join(s.OutputDir, diskName)) + state.Put("vmnetwork", networkType) + return multistep.ActionContinue }