Поговорим о PowerCLI

advertisement
Поговорим о PowerCLI
Новые возможности и рекомендации от VMware
Павел Димитров
05.11.2014
© 2014 VMware Inc. All rights reserved.
Поговорим о PowerCLI
Новые возможности и рекомендации от VMware
• Новости в продукте: PowerCLI 5.5 R2, PowerCLI 5.8 R1
• Лучшие практики при написании PowerCLI скриптов
– Что такое OBN и как им пользоваться чтобы не замедлять ваши скрипты.
– PowerCLI Views. Полный доступ к vSphere API.
– PowerCLI extension properties. Как добавить новые свойства к объектам, используемым в ваших
скриптах.
– PowerShell расширенные функции. Создайте ваши собственные командлеты.
CONFIDENTIAL
2
Новые возможности
PowerCLI 5.5 R2 и PowerCLI 5.8 R1
•
Доступ к публичному API vCenter SRM
• Поддержка создания и удаления тегов и теговых категорий. Фильтрование по тегам в
Get-* командах
• Security policies для стандартных vSphere коммутаторов и портовых групп
• Поддержка PowerShell 4.0
• Поддержка IPv6
• Storage Policy Based Management командлеты
• Улучшенная поддержка загрузки и конфигурации OVF/OVA
• Поддержка vCloud Air и vCloud Director через новейший vCD APIs (vCD 5.6.3)
CONFIDENTIAL
4
Доступ к публичному API vCenter SRM
При помощи Connect-SRMServer и Disconnect-SRMServer командлетов вы можете
подключатся к SRM серверу, получая полный доступ к публичному API продукта через
глобальную переменную $global:DefaultSrmServers.
• Подключение к SRM серверу и извлечение точки доступа к публичному API
$srmConnection = Connect-SrmServer 10.23.83.220
$srmApi = $srmConnection.ExtensionData
• Извлечение защищённых групп и виртуальных машин первой из защищённых групп
$ProtectionGroups=$SrmApi.Protection.ListProtectionGroups()
$ProtectionGroups[0].ListProtectedVMs()
Больше информации можно получить на блоге Кена Вернебурга:
Ken Werneburg - Senior Technical Marketing Architect at VMware for Business Continuity /
Disaster Recovery solutions.
http://blogs.vmware.com/vsphere/author/ken_werneburg
CONFIDENTIAL
5
Поддержка создания и удаления тегов и теговых категорий.
Фильтрование по тегам в Get-* командах
Полная поддержка функционала для работы с тегами уже доступна.
$tagCategory = New-TagCategory -Name "vmType" -Cardinality "Multiple"
-EntityType "VirtualMachine"
$tag = New-Tag -Name "clientVM" –Category $tagCategory
Get-VM "*clientVM" | New-TagAssignment -Tag $tag
Get-VM –Tag "clientVM"
Фильтрование по тегам: Get-Cluster, Get-DatastoreCluster, Get-Folder, Get-ResourcePool,
Get-DistributedSwitch, Get-Datacenter, Get-VApp
CONFIDENTIAL
6
Security policies для стандартных vSphere коммутаторов и
портовых групп
Добавлена поддержка извлечения и модифицирования политики безопасности стандартных
коммутаторов и портовых групп.
Get-VmHost “myHost” | Get-VirtualSwitch | Get-SecurityPolicy |
Set-SecurityPolicy -AllowPromiscuous $true
CONFIDENTIAL
7
Storage Policy Based Management командлеты
•
•
•
•
•
•
Get-SpbmStoragePolicy
New-SpbmStoragePolicy
Set-SpbmStoragePolicy
Remove-SpbmStoragePolicy
Export-SpbmStoragePolicy
Import-SpbmStoragePolicy
• New-SpbmRule
• New-SpbmRuleSet
• Get-SpbmCapability
• Get-SpbmCompatibleStorage
• Get-SpbmEntityConfiguration
• Set-SpbmEntityConfiguration
CONFIDENTIAL
8
Storage Policy Based Management командлеты. Примеры.
• Получаем все SPBM схемы возможностей, которые принадлежат пространству имен
"VSAN" и категории "Performance"
Get-SpbmCapability –Namespace "VSAN" –Category "Performance"
• Создаем новую политику хранения с именем "MyPolicy", описанием "MyPolicyDescription"
и наборами правил $ruleset1, $ruleset2 и $ruleset3
New-SpbmStoragePolicy –Name "MyPolicy" –Description "MyPolicyDescription"
–AnyOfRuleSets $ruleset1, $ruleset2, $ruleset3
• Создаем новую виртуальную машину на хранилище данных совместимым с политикой
хранения "MyPolicy"
New-VM –Name VM1 –VM base-sles-01a –Datastore (Get-SpbmCompatibleStorage
–StoragePolicy "MyPolicy“) –VMHost esx-01a.corp.local –DiskStorageFormat
thin
CONFIDENTIAL
9
Подробнее о SPBM командлетах
Больше информации можно получить на блоге Джо Кука:
Joe Cook - Senior Technical Marketing Manager at VMware
http://blogs.vmware.com/vsphere/author/joe_cook
CONFIDENTIAL
10
Улучшенная поддержка загрузки и конфигурации OVF/OVA
Добавлена поддержка OVF/OVA параметров
Извлекаем OvfConfiguration объект из наличного .ovf файла, задаем значения
интересующих нас конфигураций и передаем его в качестве параметра Import-Vapp
командлету
$ovfConfig = Get-OvfConfiguration "myOvfTemplate.ovf"
$ovfConfig.NetworkMapping.Network.Value = "Network 2"
$ovfConfig.vami.VM_1.ip0.Value = "10.23.101.2"
$ovfConfig.vami.VM_2.ip0.Value = "10.23.101.3"
Import-VApp $ovfPath -OvfConfiguration $ovfConfig -VMHost $vmHost
CONFIDENTIAL
11
Поддержка vCloud Air и vCloud Director через новейший vCD
API (vCD 5.6.3)
Подключение к vCloud Air Virtual Data Center через PowerCLI:
• Подключаемся к vCloud Air порталу
CONFIDENTIAL
12
Поддержка vCloud Air и vCloud Director через новейший vCD
API (vCD 5.6.3)
• Выбираем VIRTUAL DATA CENTER, к которому будем подключатся
CONFIDENTIAL
13
Поддержка vCloud Air и vCloud Director через новейший vCD
API (vCD 5.6.3)
• ,
CONFIDENTIAL
14
Поддержка vCloud Air и vCloud Director через новейший vCD
API (vCD 5.6.3)
Выделяем из URL имя vCloud Director инстанции и имя организации:
“https://p3v11-vcd.vchs.vmware.com:443/cloud/org/M721996213-5020/”
Вызываем Connect-CIServer с теми же именем и паролем, с которыми мы заходили на
vCloud Air портал
Connect-CIServer p3v11-vcd.vchs.vmware.com -User <username> -Password <pass>
-Org "M721996213-5020"
Получаем доступ к функционалу VMware vSphere PowerCLI for Tenants 5.8. Release 1
исключая командлет Get-CIRole
CONFIDENTIAL
15
Рекомендации от VMware
Что такое OBN и как им пользоваться?
• Как работает выбор объектов по имени (Object By Name)
Start-VM –VM “PsDemo”
Get-VM –Name “PsDemo” | Start-VM
• Пример плохо написанного скрипта:
$vmList = Get-VM –Location “Datacenter1”
$vmList | foreach {
Set-VM –VM $_ –MemoryGB 4
Move-VM –VM $_ -Destination “Datacenter2”
}
CONFIDENTIAL
17
Что такое OBN и как им пользоваться?
• Правильно написанный скрипт:
$vmList = Get-VM –Location “Datacenter1”
$destinationDatacenter = Get-Datacenter “Datacenter2”
$vmList | foreach {
Set-VM –VM $_ –MemoryGB 4
Move-VM –VM $_ -Destination $destinationDatacenter
}
CONFIDENTIAL
18
PowerCLI Views. Полный доступ к vSphere API.
• PowerCLI Views покрывают полностью публичный vSphere API
• PowerCLI Views это .NET объекты, которые соответствуют объектам, живущим на vCenter
сервере
• Views представляют статичные копии серверных объектов. Обновление их состояния
производится при помощи UpdateViewData метода.
CONFIDENTIAL
19
Как получить доступ к PowerCLI Views
• При помощи Get-View командлета
$vmView = Get-VM “testVM” | Get-View
$vmView = Get-View –ViewType VirtualMachine –Filter @{"Name" = "^testVM$"}
• При помощи ExtensionData свойству PowerCLI объектов
$vm = Get-VM “testVM”
$vm.ExtensionData
CONFIDENTIAL
20
Если мы интересуемся только конкретными свойствами
объектов
Когда мы интересуемся только конкретными свойствами объектов, стоит специфицировать
их вместо того, чтобы получать полную дефиницию объекта.
Measure-Command {Get-View -ViewType VirtualMachine}
…
Seconds
: 7
Milliseconds
: 898
Заявка с того же сервера, но читаем только интересующие нас свойства (количество
виртуальных машин 258):
Measure-Command {Get-View -ViewType VirtualMAchine -Property "Name",
"Runtime.PowerState"}
…
Seconds
: 0
Milliseconds
: 255
CONFIDENTIAL
21
PowerCLI extension properties. Как добавить новые свойства
к объектам, используемым в ваших скриптах.
• Команда New-VIProperty позволяет вам добавлять свойства к любому PowerCLI объекту
(оттуда и название – «Расширенные свойства»)
• Расширенные свойства существуют только в той сессии, в которой они созданы. Чтобы
создать расширенные свойства, существующие в каждой PowerShell сессии, необходимо
создавать эти свойства в вашем профильном скрипте.
• Чтобы создать расширенное свойство вам необходимо указать:
– Имя свойства
– Тип, для которого оно будет существовать
– Формулу, по которой будет вычисляться его значение.
CONFIDENTIAL
22
Вычисление значения расширенного свойства.
• Вычисление значения на базе модифицируемого объекта. В данном примере $args[0]
представляет модифицированный объект.
New-VIProperty -Name MemoryUsagePercent -ObjectType VMHost -Value {
$args[0].MemoryUsageMB/$Args[0].MemoryTotalMB*100 }
• Вычисление значения на базе свойства из View репрезентации (ExtensionData)
модифицируемого объекта
New-VIProperty -ObjectType VMHost -Name Status -ValueFromExtensionProperty
'OverallStatus‘
• Вычисление значения на базе свойства View репрезентации модифицируемого объекта
при использовании агрегирующих функций (Возможные агрегирующие функции: SUM,
AVG, MIN, MAX, UNIQUE и COUNT)
New-VIProperty -Name VMCount -ObjectType Datastore ValueFromExtensionProperty 'COUNT vm'
CONFIDENTIAL
23
Вычисление значения расширенного свойства.
• Вычисление значения на базе скриптового блока и свойств View репрезентации
модифицируемого объекта (ExtensionData)
New-VIProperty -Name ProvisionedGB -ObjectType Datastore -Value {
param($ds)
[Math]::Round(($ds.ExtensionData.Summary.Capacity $ds.ExtensionData.Summary.FreeSpace +
$ds.ExtensionData.Summary.Uncommitted)/1GB,1)
} -BasedOnExtensionProperty 'Summary'
CONFIDENTIAL
24
Расширенные функции (сценарные командлеты)
Function Get-VMHostOverallStatus
{
<#
.SYNOPSIS
Retrieves the status of a VMHost
.DESCRIPTION
This cmdlet retrieves the overall status of a VMHost
.PARAMETER VMHost
The VMHost(s) that you want to retrieve the status of
.EXAMPLE
Get-VMHostOverallStatus $vmhost
.EXAMPLE
Get-VMHost 10.23.65.130 | Get-VMHostOverallStatus
#>
[CmdletBinding()]
Param
(
[Parameter(Mandatory=$True,ValueFromPipeline=$True)]
[VMware.VimAutomation.Types.VMHost[]]
$VMHost
)
PROCESS
{
ForEach($currentHost In $VMHost)
{
Get-View -Id $currentHost.Id -Property Name, OverallStatus |
Select @{N="HostName";E={$_.Name}},@{N="HostStatus";E={$_.OverallStatus}}
}
}
}
CONFIDENTIAL
25
PowerShell advanced functions.
Наша расширенная функция ведет себя, как стандартный командлет
PS H:\> Get-VMHost | Get-VMHostOverallStatus
HostName
-------10.23.83.21
10.23.83.38
10.23.83.56
10.23.83.30
10.23.83.168
HostStatus
---------yellow
yellow
green
yellow
green
CONFIDENTIAL
26
PowerShell advanced functions.
Вызываем помощь тем же путем, как и для стандартного командлета
PS H:\> Get-Help Get-VMHostOverallStatus
NAME
Get-VMHostOverallStatus
SYNOPSIS
Retrieves the status of a VMHost
SYNTAX
Get-VMHostOverallStatus [-VMHost] <VMHost[]> [<CommonParameters>]
DESCRIPTION
This cmdlet retrieves the overall status of a VMHost
RELATED LINKS
REMARKS
To see the examples, type: "get-help Get-VMHostOverallStatus -examples".
For more information, type: "get-help Get-VMHostOverallStatus -detailed".
For technical information, type: "get-help Get-VMHostOverallStatus -full".
CONFIDENTIAL
27
PowerShell advanced functions.
Примеры исполнения тоже, как у стандартного командлета
PS H:\> Get-Help Get-VMHostOverallStatus -Examples
NAME
Get-VMHostOverallStatus
SYNOPSIS
Retrieves the status of a VMHost
-------------------------- EXAMPLE 1 -------------------------C:\PS>Get-VMHostOverallStatus $vmhost
-------------------------- EXAMPLE 2 -------------------------C:\PS>Get-VMHost 10.23.65.130 | Get-VMHostOverallStatus
CONFIDENTIAL
28
Упаковывание и дистрибуция расширенных функций
• Сохраните вашу расширенную функцию в PowerShell модуль (файл с расширением
.psm1)
• Создайте папку с именем вашего модуля в одной из папок, указанных в системной
переменной $env:PSModulePath
• Копируйте туда ваш модуль
CONFIDENTIAL
29
Полезные ссылки
• PowerCLI сообщество
https://communities.vmware.com/community/vmtn/automationtools/powercli
• PowerCLI блог
http://blogs.vmware.com/PowerCLI/
• Блог Люка Дикенса
http://www.lucd.info/
• Блог Алана Реньова
www.virtu-al.net/
CONFIDENTIAL
30
Вопросы?
Спасибо за внимание!
Павел Димитров, команда PowerCLI
padimitrov@vmware.com
Download