четверг, 1 февраля 2018 г.

PowerCLI. Использование API. Get-VIObjectByVIView.

Ранее, в статье PowerCLI. Использование Get-View. Часть 2. я упоминал командлет Get-VIObjectByVIView в контексте совместного использования командлетов Get-View и Get-VM. 

В данной статье я хочу рассказать про использование данного командлета немного подробнее. 

Напомню, что Get-VIObjectByVIView - это командлет, который конвертирует  vSphere View object в VIObject. 
VIObject - это объект PowerCLI (ВМ, Хост ESXi, датасторе и т.д.)

Но применение Get-VIObjectByVIView не ограничивается только  лишь случаями совместного использования командлетов Get-View и Get-VM.
Для начала немного теории.

В VMware vSphere имеется application programming interface (API), что переводится как программный интерфейс приложения
API (application programming interface) - это набор готовых классов, функций, процедур, структур и констант. Вся эта информация предоставляется самим приложением (или операционной системой). При этом пользователю не обязательно понимать, что это API технология обеспечивает взаимодействие модулей. Цель предоставленной информации – использование этих данных при взаимодействии с внешними программами.
В VMware PowerCLI есть два способа использования VMware vSphere API. 
1. Использование свойства ExtensionData, имеющееся у большинства объектов PowerCLI. Свойство ExtensionData является прямой ссылкой на vSphere API-объект, связанный с объектом PowerCLI.
2. Использование командлета GetView для извлечения объекта API vSphere, связанного с объектом PowerCLI.

Для лучшего понимания VMware vSphere API и Get-VIObjectByVIView рассмотрим пример получения информации о хранилищах, используемых для Heartbeat Datastore.
Примечание: Heartbeat Datastore служит для обработки сбоев в VMware HA. 


В свою очередь для комфортной работы с примерами необходимо свободно ориентироваться и перемещаться по объектам, получаемым при выполнении командлетов. 

Нам понадобятся командлеты:
1. Get-Member - выводит информацию о свойствах и методах объекта.
-MemberType - позволяет фильтровать вывод.
Мы будем использовать Properties и Method.
2. Format-List - показывает объект в виде списка, в котором каждое свойство имеет метку и отображается в отдельной строке. Он позволяет использовать подстановочные знаки в качестве значения параметра Property. Это дает возможность отображать подробные сведения.
Format-List -Property * - выводит все значения.
Format-List имеет аллиас fl.

Итак, давайте исследуем кластер.
$Cluster = Get-Cluster -Name ИМЯ
$Cluster | Format-List -Property *

Не густо, прямо скажем. 

Идем дальше, посмотрим что нам вообще доступно
 $Cluster | Get-Member

Вероятно больше информации нас ожидает в ExtensionData.
$Cluster.ExtensionData
Вывод данного командлета показывает нам что-то не очень понятное.



Снова обращаемся к 
$Cluster.ExtensionData | Get-Member
Вывод слишком большой, поэтому применим фильтры.
$Cluster.ExtensionData | Get-Member -MemberType Properties

и затем 
$Cluster.ExtensionData | Get-Member -MemberType Method

Да, все самое вкусное находится именно в ExtensionData.

В выводе $Cluster.ExtensionData | Get-Member -MemberType Properties мы видим поле Summary
$Cluster.ExtensionData.Summary
$Cluster.ExtensionData.Summary.UsageSummary

Теперь вернемся опять в $Cluster.ExtensionData | Get-Member -MemberType Properties, и на этот раз обратимся к полю Datastore
$Cluster.ExtensionData.Datastore
Опять что-то непонятное. И вот теперь используем Get-VIObjectByVIView
$Cluster.ExtensionData.Datastore | Get-VIObjectByVIView

Теперь все красиво.

В качестве эксперимента применим Get-VIObjectByVIView к $Cluster.ExtensionData.Summary.
$Cluster.ExtensionData.Summary | Get-VIObjectByVIView
 

Упс, ошибка.
Все дело в ManagedObjectReference (MOR).

ManagedObjectReference (MOR) - это не что иное, как типизированный идентификатор (строка) для объекта (хоста, виртуальной машины, хранилища данных ...) на ESX или в VC, уникальном для каждого экземпляра VC. PowerCLI не может напрямую выполнять операции с этими объектами, а только посредством application programming interface (API), о котором я говорил выше. А вот уже результат операции мы можем конвертировать в формат PowerCLI c помощью Get-VIObjectByVIView. 
Поскольку  тип ExtensionData.Summary - не VMware.Vim.ManagedObjectReference[] Datastore {get;}, а VMware.Vim.ComputeResourceSummary Summary {get;}, т.е. изначально в формате PowerCLI, то при попытке конвертации мы получаем ошибку. 

Теперь, видя в выводе командлета Get-Member строку ManagedObjectReference мы будем знать, что это означает и как можно привести выходные данные в читабельный вид.

Выше я обещал разобрать пример получения информации о хранилищах, используемых для Heartbeat Datastore. Но он сам по себе не очень легкий, поэтому я решил ограничиться примером с ExtensionData.Datastore.

Комментариев нет:

Отправить комментарий