Поговорим о 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