PowerCLIВиртуализация VMware

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.

Related Post

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

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

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