Estou usando ESXi 6.0 e PowerCLI. Criei um clone de uma VM de produção:
$Source_VM = Get-VM -Name "MyProductionServer"
$Target_VMHost = Get-VMHost -VM $Source_VM
$Cloned_VM = (New-VM -Name "MyPreProdServer" -VM $Source_VM -VMHost $Target_VMHost)
Meu MyProductionServer possui um endereço IP estático definido no lado do sistema operacional. Se eu iniciar o $ Cloned_VM terei um IP duplicado na mesma sub-rede. O que eu gostaria de fazer é DESCONECTAR a NIC na VM clonada antes de iniciar esta.
O que descobri é:
1) Em uma VM ligada:
Get-NetworkAdapter -VM $Cloned_VM | Set-NetworkAdapter -Connected:$false -StartConnected:$false -Confirm:$false
Isso está funcionando, mas não posso fazer isso devido ao estado da VM clonada.
2) Remova a NIC da VM:
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec
$spec.deviceChange[0].Operation = "Remove"
$spec.DeviceChange[0].Device = $Cloned_VM.ExtensionData.Config.Hardware.Device | ?{$_.DeviceInfo.Label -eq "Network adapter 1"}
$Cloned_VM.ExtensionData.ReconfigVM_Task($spec)
Fonte:https://communities.vmware.com/thread/454525
Isso também está funcionando, mas não é exatamente o que eu gostaria.
Gostaria de DESCONECTAR a NIC atual para permitir inicializar a VM clonada, alterando o endereço IP e depois CONECTAR a NIC (+ reinicialização) para que a VM clonada funcione com outro endereço IP.
Em palavras simples, eu gostaria de fazer 1) em uma VM desligada. Isso é possível ?
Responder1
Então, testei isso no ambiente de teste e está funcionando.
# Saving the NIC
$Saved_NIC = $Cloned_VM.ExtensionData.Config.Hardware.Device | ?{$_.DeviceInfo.Label -eq "Network adapter 1"}
# Removing the NIC
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec
$spec.deviceChange[0].Operation = "Remove"
$spec.DeviceChange[0].Device = $Saved_NIC
$Cloned_VM.ExtensionData.ReconfigVM_Task($spec)
# Modifying my VM (boot + launch script + poweroff)
# Adding the NIC
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$spec.deviceChange = New-Object VMware.Vim.VirtualDeviceConfigSpec
$spec.deviceChange[0].Operation = "Add"
$spec.DeviceChange[0].Device = $Saved_NIC
$Cloned_VM.ExtensionData.ReconfigVM_Task($spec)
# Boot again my VM and test to reach the internet: WORKING!
Start-VM -VM $Cloned_VM
Parece estar tudo bem, verei isso mais tarde no ambiente Pré-Prod :)