@ -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
}