Недавно у меня была работа по массовой миграции виртуальных машин между кластерами. Я столкнулся с проблемой при миграции в виде ошибок и варнингов на тему того что в дисководе виртуальной машины имеется некоторые Datastore ISO файлы. Это конечно же недоработка которая была не учтена когда инфра разворачивалась с помощью Terraform. Однако проблему нужно было решать, и решил я ее радикально. Прочесать все машины на предмет подключенных ISO и «извлечь». Под катом тело скрипта.
Тыкни
Connect-VIServer -Server vcenter.site -Credential (Get-Credential administrator@vsphere.local)
$servers = get-vm * | select Folder, Name, VMHost
#Машины обрабатываются по папке в VCenter но это можно удалить и пройтись по всем машинам в VCenter если закомментить оператора IF
$foldername = "LinuxInfra"
Foreach($serv in $servers){
if($serv.folder.name -eq $foldername){
$vm = Get-VM "$($serv.Name)"
$cd = Get-CDDrive -VM $vm
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec
$cdSpec = New-Object VMware.Vim.VirtualDeviceConfigSpec
$cdSpec.Operation = [VMware.Vim.VirtualDeviceConfigSpecOperation]::Edit
$cdSpec.Device = $cd.ExtensionData
$cdSpec.Device.Backing = New-Object VMware.Vim.VirtualCdromRemoteAtapiBackingInfo
$cdSpec.Device.Backing.DeviceName = $null
$cdSpec.Device.Connectable.Connected = $false
$cdSpec.Device.Connectable.StartConnected = $false
$cdSpec.Device.Connectable.AllowGuestControl = $true
$spec.DeviceChange += $cdSpec
$task = $vm.ExtensionData.ReconfigVM_Task($spec)
Write-Host "Ожидание завершения операции..."
while ($task.Info.State -eq "running" -or $task.Info.State -eq "queued") {
Start-Sleep -Seconds 1
$task = Get-View -Id $task.MoRef
}
Write-Host "ISO диск отключен от $($serv.Name)"
}
}
Добавить комментарий