angle-left

миграция виртуальных машин возможностями PowerCli

Введение

Данная статья является продолжением предыдущей статьи, в которой я упоминал средство управления VmWare PowerCli

PowerCli является модулем для PowerShell позволяющим управлять всей инфраструктурой VmWare. Его возможности несколько шире, чем возможности VmWare vSphere Management Assistant (vMA), ввиду более глубокого уровня абстракции.Подробней о возможностях можно почитать в официальной документации.

В данной статье я опишу реализацию задачи, описанной мной ранее, с применением PowerCli.

Следует отметить, что являясь модулем для PowerShell, PowerCli так же оперирует объектами, в чем мы убедимся дальше.

PowerCli

Установив PowerCli на машину, добавляем модуль в PowerShell

Add-PSSnapin VMware.VimAutomation.Core -ErrorAction:SilentlyContinue

 

Коннектимся к vCenter серверу. 
Для сохранения учетных данных, предварительно нужно выполнить комманду

#Connect to vCenter and save credentials
Connect-VIServer $vSphere -User "username" -Password "password" -SaveCredentials

Или добавить новую запись в credential store 

#New Credentials
New-VICredentialStoreItem -Host $vSphere  -User "username" -Password "password"

 

После добавления используем комманду

#Connect to vCenter
Connect-VIServer $vSphere


После соединения с vSphere мы можем получить список виртуальных машин, последовательной выборкой из объектов : датацент - хост - виртуальная машина
Ниже представлен пример получения виртуальных машин с определенного хоста $hostname

$vms_host=Get-Datacenter| Get-VMHost -Name $hostname |get-vm

Важно то, что машины мы получаем в виде объектов, и получить информацию, оперировать ими мы будем именно как объектами.Наглядно это отображено в последовательном выводе комманд

Получаем объект Датацентра ( в моей конфигурации датацентр один)

PS C:\Logs> Get-Datacenter

Name
----
DATACENTER

 

Получаем объекты Хостов датацентра

PS C:\Logs> Get-Datacenter|get-vmhost

Name                 ConnectionState PowerState NumCpu CpuUsageMhz CpuTotalMhz   MemoryUsageGB
----                 --------------- ---------- ------ ----------- -----------   -------------
$hostname     		 Connected       PoweredOn       8         517       18664          12.235
$hostname_2  		 Connected       PoweredOn       8         1049      18664          17.430

Получаем объект конкретного хоста по его имени

PS C:\Logs> Get-Datacenter|get-vmhost $hostname

Name                 ConnectionState PowerState NumCpu CpuUsageMhz CpuTotalMhz   MemoryUsageGB
----                 --------------- ---------- ------ ----------- -----------   -------------
$hostname 		     Connected       PoweredOn       8         579       18664          12.254

Получаем объекты виртуальных машин с определенного хоста

PS C:\Logs> Get-Datacenter|get-vmhost $hostname|get-vm

Name                 PowerState Num CPUs MemoryGB
----                 ---------- -------- --------
VM_1	             PoweredOff 2        4.000
VM_2  				 PoweredOff 1        2.000
VM_3      		     PoweredOn  1        2.000
VM_4      		     PoweredOn  2        4.000
VM_5       		     PoweredOn  2        2.000
VM_6       		     PoweredOn  1        2.000
VM_7     		     PoweredOn  1        2.000
VM_8  	    	     PoweredOn  1        2.000

 

Итак, не будем отвлекаться, займемся миграцией!
Для того, чтобы в последствии вернуть машины на свои хосты, в vMA приходилось сохранять их названия. Конечно, применение такого способа при использовании PowerCli, мягко говоря является извращением,- мы ведь работаем с объектами! И на для этого мы будем использовать Export-Clixml, позволяющее создать файловое XML представление объекта(объектов).

#Format date for name file
$private:date=(date).tostring().Replace('/','.').Replace(':','.')
#Save VMs to variable
$vms_host=Get-Datacenter| Get-VMHost -Name $hostname_1 |get-vm 
#Export VMs to file
echo $vms_host| Export-Clixml  "$path$hostname shutdown $date" 

 

Для миграции используем команду Move-VM, в качестве аргумента передаем виртуальные машины, а в качестве аргумента -Destination указываем целевой хост

Move-VM $vms_host -Destination ( Get-VMHost $general_host )

 

При обратной миграции мы можем воспользоваться  Import-Clixml с указанием в качестве аргумента ранее сохраненного файла 

$host_vms=import-Clixml $file

 

Выводы

Содержимое данной статьи демонстрирует базовые возможности и способы использования VmWare PowerCli. На мой взгляд, несмотря на многие  х̶о̶л̶и̶в̶а̶р̶ы̶̶  споры, реализованная в PowerShell объектность является мощным и удобным инструментом, наглядное эффективное применение которой продемонстрировано в данной статье.