Loading

Change Boot Device Priority on guest VMware VM machine

13.08.2015 - 12:15

После долгого перерыва, решил что-то добавить из своих наработок.
Сейчас я работаю над миграцией и модернизацией ИТ-инфраструктуры на крупном предприятии. В кратце: используется гипервизор VMware, каждый день создаются/настраиваются десятки фиртуальных машин различных конфигураций и платформ. Надеюсь, я успешно закончу публикацию серии скриптов, которые я использую для автоматизации процессов. Первое, с чего начну - изменение порядка загрузки ВМ. Так получилось, что около 30-40% ВМ - RHEL6.5 - 6.6, для которых трудно применить Deploy from Template. Поэтому приходится прикручивать CD/DVD + ISO image и проводить загрузку с него. Но вот незадача, нужно, также, прикручивать Floppy + ISO image с какой-то дополнительной конфигурацией. В процессе загрузки, ВМ начинает грузиться с флопика и ругаться. Если бы дело было в одной ВМ - зайти в биос и изменить не проблема, но что, если таких ВМ 8-12 в день? Ниже показана часть скрипта, которая именяет порядок загрузочных устройств на ВМ.

Для работы используется библиотека PowerCLI от VMware
Скрипт рабочий для версии 5.0 и выше.

#Подгружаем модуль PowerShell для работы с VMware
Add-PSSnapin VMware.VimAutomation.Core -ErrorAction SilentlyContinue -WarningAction SilentlyContinue -ErrorVariable SnapInError

#Устанавливаем параметры конфигурации
Set-PowerCLIConfiguration -DefaultVIServerMode Multiple -Confirm:$false -DisplayDeprecationWarnings:$false -InvalidCertificateAction Ignore -Scope session | out-null

#Подключаемся к VCenter хосту
$vSphere_Connection = Connect-VIServer -Server <VCenterHostName>

#"Ловим" необходимую ВМ
$vm = get-vm <VM>

# Получаем данные объекта ВМ и отсеиваем только информацию о девайсах, нам необходим параметр Key для HDD, чтобы его поставить на второе место в списке загрузки
$HDD = (get-vm "$vm" | get-view).Config.Hardware.Device | Where-Object {$_.DeviceInfo.Label -eq "Hard Disk 1"}

#создаём 2 класса с параметрами устройств
$oBootableHDisk = New-Object -TypeName VMware.Vim.VirtualMachineBootOptionsBootableDiskDevice -Property @{"DeviceKey" = $HDD.Key}
$oBootableCDRom = New-Object -Type VMware.Vim.VirtualMachineBootOptionsBootableCdromDevice

#создаём спецификацию с параметрами загрузки
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec -Property @{"BootOptions" = New-Object VMware.Vim.VirtualMachineBootOptions -Property @{BootOrder = $oBootableCDRom, $oBootableHDisk}}

# применяем конфигурацию
$VM.ExtensionData.ReconfigVM_Task($spec)

#запускаем ВМ и радуемся
Start-VM -VM $VM

Голосов пока нет