Я пытаюсь выполнить сценарий (powershell/powercli) клонирования нашей среды QA (261 сервер). В основном я хочу создать новую копию каждого сервера, просто изменив имя виртуальной машины, имя хоста и IP-адрес. В идеале, мне нужен новый клон в домене (90% из них - ОС Windows). И на многих моих серверах есть много больших жестких дисков, которые не будут вписываться ни в один хранилище данных, поэтому я должен иметь возможность клонировать несколько хранилищ данных.clone vm change network identity
Я начал с New-VM для серверов, которые были достаточно маленькими, чтобы вписаться в один хранилище данных, но OSCustomization работает только около 30% времени. В остальное время мне нужно войти в Windows и вручную удалить из домена, чтобы переименовать имя хоста. В большинстве случаев работает Set-OSCustomizationNicMapping. Но указание -Domain -DomainUsername/Password никогда не работает (в лучшем случае он переименовывает сервер и помещает в рабочую группу «имя домена», но никогда не присоединяется к нему).
Чтобы обойти проблему с несколькими хранилищами, я обнаружил $ vm.ExtensionData.CloneVM с помощью VMWare.Vim.VirtualMachineRelocateSpec, чтобы указать, какие жесткие диски идут в какие хранилища данных и что отлично работает, но я не знаю, как настроить имя хоста или NIC настройки.
Итак, основные требования: клонировать несколько хранилищ данных, изменяя имя хоста и настройки IP. Есть ли у кого-нибудь рекомендации или решения?
Вот некоторые из моих фрагментов кода:
Настройка OSCustomizationSpec для Нью-VM
$spec = New-OSCustomizationSpec -Name "PowerCLI Scripting for $NewHostName" -Spec "PowerCLI Scripting" -WhatIf:$False
Set-OSCustomizationSpec $spec -Workgroup "WORKGROUP" -DomainUsername "[email protected]" -DomainPassword (Get-Password -Username "qa\qajoin") -ProductKey $ProductKey -AdminPassword (Get-Password $Script:LuserName) | Out-Null
Get-OSCustomizationSpec "PowerCLI Scripting for $NewHostName" `
| Get-OSCustomizationNicMapping `
| Set-OSCustomizationNicMapping `
-IPMode:UseStaticIP `
-IPAddress $NewIPAddress `
-SubnetMask "255.255.248.0" `
-DNS "10.26.40.115","10.26.40.116" `
-DefaultGateway $NewDFGW | Out-Null
Команда New-VM:
$VM = New-VM -VMHost $VMHost -VM $Hostname -Name $NewHostName -Description "$Description" -OSCustomizationSpec "PowerCLI Scripting for $NewHostName" -Location (Get-Folder -Id $Location) -Datastore $MostFreeSpace -ErrorAction Stop
Вот несколько хранилищу Клонирование:
$VMXtargetDatastore = Get-Datastore ($MapInfo | Where-Object {$_.Name -eq "Hard disk 1"}).NewDataStore
#Create an empty CloneSpec
$spec = New-Object VMware.Vim.VirtualMachineCloneSpec
$spec.Template = $false
$spec.PowerOn = $false
#Create a RelocateSpec (datastore is target for .vmx)
$spec.Location = New-Object VMware.Vim.VirtualMachineRelocateSpec
$spec.Location.Datastore = $targetDatastore.ExtensionData.MoRef
#For each disk in the current vm
# create a new DiskLocator spec
# populate the datastore and diskid from the current harddisk
# add the spec to RelocateSpec from above
Get-HardDisk -VM $Origvm | %{
$disk = New-Object VMware.Vim.VirtualMachineRelocateSpecDiskLocator
$disk.diskId = $_.ExtensionData.Key #2001,2002,2003,...
$DiskLabel = $_.ExtensionData.DeviceInfo.Label
#$disk.datastore = $_.ExtensionData.Backing.Datastore #type=datastore value=datastore-2790
$dsname = ($MapInfo | Where-Object {$_.Name -eq $DiskLabel}).NewDataStore
$ds = Get-Datastore -Name $dsname
$disk.datastore = $ds.id
$spec.Location.Disk += $disk
}
$CustSpec = New-Object VMware.Vim.CustomizationSpec
$origvm.ExtensionData.CloneVM((Get-Folder -Id $folder).ExtensionData.MoRef, $targetName, $spec)
Я предполагаю, что следующий шаг с использованием метода ExtensionData.CloneVM заключается в объявлении нового объекта CustomizationIdentitySettings, но документация (http://pubs.vmware.com/vi3/sdk/ReferenceGuide/vim.vm.customization.IdentitySettings.html), которую я могу найти, не очень полезна (возможно, потому что настройки меняются в зависимости от ОС?), А затем добавьте этот объект для моего объекта $ spec. То же самое можно было бы сделать для OSCustomizationNicMapping (http://www.vmware.com/support/developer/PowerCLI/PowerCLI41U1/html/OSCustomizationNicMapping.html), но я не могу получить достаточную информацию из пабов, чтобы выяснить, как построить мой объект $ spec.
Спасибо за комментарий. К сожалению нет я не могу сделать изолированную среду, из-за проблем с лицензированием и размером некоторые из моих серверов являются единичным экземпляром, а те, которые я клонирую, должны иметь возможность маршрутизировать в одни и те же экземпляры. – Arluin
Я построю что-то подобное для большой больницы. Им нужна среда OTA, в которой они могут иметь точные копии своих производственных виртуальных машин. Мне не разрешили изменять IP-адрес виртуальных машин. Я построил отдельную VLAN, в которой я развернул виртуальные машины и вставил брандмауэр vShield Edge в качестве NAT-маршрутизатора. Таким образом, машины в тестовой среде могут получить доступ к этим серверам. И их большой рак-лечение-сканер (который стоит над миллионным евро) не может быть скопирован, конечно, поэтому я поставил перед ним дополнительный NAT-маршрутизатор. В зависимости от сценария он будет маршрутизировать или тестировать. – Gabrie
Если вам нужно больше информации e-mail me (thegabeman at gmail) – Gabrie