Введение
Данная статья является продолжением предыдущей статьи, в которой я упоминал средство управления 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 объектность является мощным и удобным инструментом, наглядное эффективное применение которой продемонстрировано в данной статье.