Как создать виртуальную машину VMware с помощью PowerCLI.

Недавно мне на глаза попалась книга по автоматизации задач обслуживания инфраструктуры VMware. Книга очень занимательная, и, не смотря на то, что написана она еще во времена актуальности Vsphere 4.1, почти все написанное легко применить и сегодня. Давайте познакомимся с выдержками из этой книги, посвященными развертыванию виртуальных машин VMware с помощью PowerCLI.

Читайте как создать или развернуть виртуальную машину из шаблона с помощью клиента Vsphere.

В этой статье описывается как создать виртуальную машину c помощью PowerCLI . О том, как развернуть похожим способом виртуальную машину из шаблона или с помощью клонирования, читайте здесь

О массовом развертывании виртуальных машин написано в этой статье.

Как создать виртуальную машину VMware с помощью PowerCLI.

«Итак, вы создали свою среду vSphere. Хосты загружены, хранилище выделено, и vCenter Server готов к работе. Теперь пришло время создать несколько виртуальных машин. В этой главе мы начнем с базового фона командлета PowerCLI New-VM. Мы рассмотрим различные методы создания новых виртуальных машин. Затем мы углубимся в API vSphere, где исследуем передовые методы и приемы. Мы расскажем о пользовательских атрибутах и их использовании, а также рассмотрим установку VMware Tools.

Используйте командлет New-VM

Командлет New-VM используется для добавления, создания, клонирования или регистрации новой виртуальной машины (VM). Он вырос за последние четыре версии PowerCLI и является довольно мощным. Однако он не завершен, и есть некоторые вещи, которые нельзя сделать в PowerCLI. Нам нравится сравнивать использование командлетов PowerCLI с говорением на иностранном языке. По большей части вы говорите все то же самое, но вы говорите их в другом порядке. Если графический интерфейс vSphere является вашим родным языком, будьте готовы сделать что-то не в порядке.

Командлет New-VM обеспечивает высокоуровневую абстракцию всего процесса создания виртуальной машины. В результате этой абстракции New-VM использует некоторые значения по умолчанию. Если явно не указано иное, командлет New-VM всегда будет создавать виртуальную машину со спецификациями, перечисленными в таблице 5.1.

Таблица 5.1 PowerCLI New-VM default values

ParameterDefault value
DiskMB4096
DiskStorageFormatThick
GuestIdwinXPProGuest
MemoryMB256
NumCpu1
Version7

NOTE: Based on VMware vSphere PowerCLI 4.1 build 264274

 

Когда командлет может выполнять одну или несколько функций, PowerShell группирует параметры для каждой функции в набор параметров. Командлет New-VM включает четыре набора параметров или четыре отдельные функции:

 NewVM

 Template

 RegisterVm

 CloneVm

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

Итак, как PowerCLI выбирает, какой набор параметров использовать? Каждый набор параметров имеет как минимум один уникальный параметр. Набор параметров по умолчанию принимается до тех пор, пока PowerCLI не найдет тот уникальный параметр, который отличает текущее приложение от настроенного по умолчанию. В случае командлета New-VM набор параметров NewVM предполагается до тех пор, пока не будет найден параметр, используемый в другом месте.

Независимо от набора параметров есть два обязательных параметра: Name и VMHost. При подключении напрямую к хосту vSphere PowerCLI принимает параметр VMHost. Это означает, что когда вы подключены напрямую к хосту vSphere, создать новую виртуальную машину так же просто, как New-VM —Name VM01.

Читайте также:  Vmware проброс usb в виртуальную машину.

Хотя это и классная демонстрация, но в реальном мире она не очень полезна. Тем не менее, полезно понять, почему это работает. PowerCLI выводит как VMHost, так и набор параметров. Затем он принял оставшийся обязательный параметр Name и создал новую виртуальную машину, используя значения по умолчанию, указанные в таблице 5.1. Мы делаем эту точку, потому что PowerCLI и его базовый движок PowerShell делают все возможное, чтобы «помочь» вам; В 99,9% случаев предположение верно, но имейте в виду, что без явных указаний PowerCLI всегда будет использовать эти значения по умолчанию.

Creating a New Virtual Machine

Удивительно, но PowerCLI не часто используется для создания новых виртуальных машин. Каким-то образом сообщество в целом упустило огромное преимущество, которое PowerCLI предлагает на этой арене. Если ваша организация использует корпоративные системы обеспечения, такие как Microsoft System Center Configuration Manager (SCCM) или HP Business Service Automation (HP-BSA), вы можете воспользоваться автоматизацией создания новой виртуальной машины. Даже если вы используете базовый инструмент установки операционной системы, такой как Windows Deployment Services, Symantec Ghost, Linux KickStart или Solaris JumpStart, вы все равно выиграете, если будете уверены, что базовое виртуальное оборудование всегда одинаково!

Как вы можете создать виртуальную машину? Ну, как правило, вы решаете любую проблему в PowerCLI, начиная с утверждения или вопроса. Например: «Я хочу создать виртуальную машину REHL5 с жестким диском 10 ГБ с тонким предоставлением и 1 ГБ оперативной памяти. Я хочу смонтировать ISO в datastore0, и сеть должна быть в VLAN 22». Теперь вы просто разбираете его на командлеты, как показано в листинге 5.1.

Listing 5.1 Cmdlets to create a New-VM

New-VM -Name REL5_01  -DiskMB 10240  -DiskStorageFormat thin -MemoryMB 1024  -GuestId rhel5Guest  -NetworkName vSwitch0_VLAN22  -CD | Get-CDDrive | Set-CDDrive -IsoPath “[datastore0] /REHL5.2_x86.iso”  -StartConnected:$true  -Confirm:$False

Первое, что вы заметите, это то, что для выполнения этой задачи нам пришлось использовать несколько командлетов. Хотя принято считать, что все это можно выполнить с помощью одного командлета, это не относится к PowerCLI. Это связано с тем, что каждый командлет отвечает только за одну небольшую задачу или функцию. Поэтому нам нужно объединить много командлетов в конвейер, чтобы выполнить всю задачу. Например, командлет New-VM создаст только пустое оборудование. Все, что за этим — как подключение CD — должно быть сделано после того, как виртуальная машина была создана.

Возможно, вы заметили довольно загадочный -GuestId. Вы можете найти список действительных идентификаторов гостей в справке New-VM. К сожалению, список, расположенный в справке, не так легко прочитать. Вы всегда можете проверить документацию vSphere API – посетите www.vmware.com/support/developer/vc-sdk/visdk41pubs/ApiReference/ index.html  и проверьте Enumerated Types ➢ VirtualMachineGuestOsIdentifier. Но если вы хотите хранить данные в PowerShell, где вы можете ими манипулировать, используйте функцию в листинге 5.2, чтобы запросить vCenter Server о поддерживаемых операционных системах и соответствующих гостевых идентификаторах.

Листинг 5.2. Запрос vCenter Server для операционных систем и гостевых идентификаторов

Function Get-VMGuestId

{

     <#

     .SYNOPSIS

 Query VMHost for a list of the supported Operating systems, and their GuestIds.

     .DESCRIPTION

 Query VMHost for a list of the supported Operating systems, and their GuestIds.

     .NOTES

Source: Automating vSphere Administration

 Authors: Luc Dekens, Arnim van Lieshout, Jonathan Medd,

   Alan Renouf, Glenn Sizemore

     .PARAMETER

 VMHost VMHost to query for the list of Guest Id’s

     .PARAMETER

Version Virtual Machine Hardware version, if not supplied the default for that host will be returned. I.E. ESX3.5 = 4, vSphere = 7

     .EXAMPLE

 Get-VMGuestId -VMHost vSphere1

              .EXAMPLE

Get-VMGuestId -VMHost vSphere1 | Where {$_.family -eq ‘windowsGuest’}

#>

[CmdletBinding()] Param(

[Parameter(Mandatory=$true

 , HelpMessage=”VMHost object to scan.”

 , ValueFromPipeline=$true

 )]

       [VMware.VimAutomation.ViCore.Impl.V1.Inventory.VMHostImpl]

$VMHost

 ,

 [int]

 $Version

 )

Process

 {

$HostSystem = Get-View -VIObject $VMHost

 $compResource = Get-View –id

 $HostSystem.Parent

 $EnvironmentBrowser = `

 Get-View –Id $compResource.EnvironmentBrowser

 $VMConfigOptionDescriptors = `

$EnvironmentBrowser.QueryConfigOptionDescriptor()

if ($Version) {

$Key = $VMConfigOptionDescriptors |

 Where-Object {$_.key -match “$($Version)$”} |

 Select-Object -ExpandProperty Key

}

Else {

$Key = $VMConfigOptionDescriptors |

 Where-Object {$_.DefaultConfigOption} |

 Select-Object -ExpandProperty Key

}

$EnvironmentBrowser.QueryConfigOption($Key,

 $HostSystem.MoRef) |

 Select-Object -ExpandProperty GuestOSDescriptor |

 Select-Object @{

Name=’GuestId’ Expression={$_.Id}

},

 @{

Name=’GuestFamily’ Expression={$_.Family}

},

 @{

Name=’FullName’

Expression={$_.FullName}

 }

 }

 }

 

Читайте также:  Как подключиться к хосту ESXi по SSH

При запуске функция Get-VMGuestId возвращает коллекцию всех поддерживаемых гостевых объектов. Затем вы можете отфильтровать указанную коллекцию с помощью Where-Object и отправить ее в файл, на принтер, в CSV – на ваш выбор. Мы предлагаем направить вывод в Out-GridView. Командлет Out-GridView был создан для подобных ситуаций. Он позволяет вам фильтровать, сортировать и разбираться в больших наборах данных, как показано на рисунке 5.1.

Как создать виртуальную машину VMware с помощью PowerCLI.

А как насчет более сложной виртуальной машины — скажем, SQL Server? Давайте создадим виртуальную машину Windows Server 2008 R2 со следующими спецификациями:

  4 виртуальных ЦП

  8 ГБ ОЗУ

  Жесткий диск с 40 ГБ ОС с тонким предоставлением

  Жесткий диск толщиной 100 ГБ и 10 ГБ

  Два сетевых адаптера VMXNET3 на VLAN 22 и VLAN 100

Эта новая виртуальная машина должна быть размещена в пуле ресурсов SQL на кластере PROD01. В листинге 5.3 показано, как выполнить эту задачу.

Листинг 5.3. Создание сложной виртуальной машины

$Cluster = Get-Cluster -Name ‘PROD01’

 $ResourcePool = Get-ResourcePool -Name ‘SQL’ -Location $Cluster

 $VM = New-VM -Name ‘SQL01’ `

 -NumCpu 4 `

-MemoryMB 8096 `

 -DiskStorageFormat ‘Thin’ `

 -DiskMB 40960 `

 -GuestId ‘windows7Server64Guest’ `

 -VMHost (Get-VMHost -Location $Cluster|Get-Random) `

 -ResourcePool $ResourcePool

# remove the default e1000 nic that PowerCLI added

 $vm | Get-NetworkAdapter | Remove-NetworkAdapter

 #Add VMXNET3 Network Adapters

 New-NetworkAdapter -NetworkName ‘dvSwitch0_VLAN22’ `

                -StartConnected `

 -Type ‘Vmxnet3’ `

 -VM $VM

New-NetworkAdapter -NetworkName ‘dvSwitch0_VLAN100’ `

                -StartConnected `

 -Type ‘Vmxnet3’ `

 -VM $VM

 

#Add additional hard drives

 New-HardDisk -CapacityKB (100GB/1KB) -VM $vm

 New-HardDisk -CapacityKB (10GB/1KB) -VM $vm

 

Листинг 5.3 немного сложнее, чем предыдущий, но его все же легко понять. К сожалению, это примерно так далеко, как PowerCLI может изначально пойти. Если вы хотите добавить паравиртуальный контроллер SCSI для ваших дисков с данными, вы должны обратиться к API.»

Описание командлета New-VM на сайте Vmware: https://www.vmware.com/support/developer/PowerCLI/PowerCLI41/html/New-VM.html

Вот такая получилась «коротенькая» статейка о том, как создать виртуальную машину VMware с помощью PowerCLI.)) О том как с ее же помощью развернуть виртуальную машину из шаблона или с помощью клонирования существующей смотрите в следующих статьях. 

 

Поделиться ссылкой:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.