На прошлой конференции VMworld 2021 компания VMware представила решение Project Ensemble, которое предназначено для мультиоблачных инфраструктур, построенных на базе комбинации различных частных и публичных облаков, где требуется предоставление пользователям единого и подстроенного под них интерфейса, ориентированного на приложения.
Данное решение родилось из растущей необходимости предприятий организовать простой доступ пользователей к инфраструктуре приложений, которая на нижних уровнях выглядит вовсе непросто. Компании сейчас используют публичные облака от различных вендоров, а также собственную гетерогенную инфраструктуру - и все это объединяется с помощью средств управления, которыми заведуют команды Enterprise-администраторов.
Частая проблема такой организации - трудность управления сущностями (например, виртуальными машинами), которые контролируются из различных компонентов виртуальной инфраструктуры. Виртуальную машину может создать сервер управления vCenter, но не только. Ее можно развернуть в рамках рабочего процесса vRealize Automation, тогда она получит его ID.
Операции с ВМ и их модификацией могут осуществлять такие продукты, как vRealize Operations, vRealize Network Insight и другие - все это вовлекает новые идентификаторы и собственные их базы данных в разных продуктах:
При выполнении операций, например, при мониторинге инфраструктуры средствами vRealize Operations (vROPs), продукту vRealize Automation (vRA) очень было бы полезно знать некоторую информацию из vROPs.
Если мы, к примеру, хотим удостовериться, что развернутое из vRealize Automation приложение сейчас в здоровом статусе в vRealize Operations, то нужно понимать и вызывать два разных API от обоих продуктов. Потом нужно как-то сопоставить эту информацию и использовать ее дальше в сценарии автоматизации. А теперь представим, что подобного рода объектов тысячи или десятки тысяч в большой инфраструктуре.
Для решения этой проблемы и нужен
VMware Project Ensemble. Он предоставляет различным сервисам единую поверхность потребления информации об объектах, которые находятся под контролем различных компонентов виртуальной инфраструктуры (Ensemble по-французски означает "вместе").
Итак, Project Ensemble получает все данные от различных служб (например, vRealize Operations, vRealize Automation и vRealize Network Insight) и нормализует эти данных в рамках унифицированной модели common object model.
Далее в рамках концепции подхода API First можно получать различные данные об объекте в рамках лишь одного API-вызова. Вот так это визуализуется в консоли Project Ensemble для сервиса NSX Edge:
Многие пользователи VMware уже привыкли к RESTful API и Swagger, для которых VMware имеет большой объем документации. Но в данном случае Project Ensemble использует GraphQL для получения данных. В этом фреймворке есть 3 операции:
Query - получение информации об объектах
Mutation - запрос на выполнение действия с объектом
Subscription - возможность отслеживать изменения в системе, когда они происходят
Project Ensemble педоставляет удобную оболочку разработки веб-IDE для GraphQL (на базе проекта GraphiQL):
Вот тут рассказано об API этого проекта, а мы посмотрим несколько примеров.
Объекты в среде Ensemble называются сущностями (entities). Обратиться к ним можно в рамках простого поиска по имени. Например, найдем объекты виртуальные машины, в имени которых содержится строка "Dina":
В ответе мы увидим данные от таких продуктов, как vRealize Automation, vRealize Operations и vRealize Network Insight:
Мы видим, что в каждом сервисе есть определенные ID данного объекта. Но для того, чтобы получить какие-то свойства объекта через Ensemble можно просто использовать универсальный Ensemble entity ID.
Например, мы хотим узнать CPU usage из решения vRealize Operations. Для этого можно сформировать вот такой запрос:
В качестве ответа мы получим актуальное значение метрики из vROPs:
Также можно выполнять действия через механизм mutations. Вот таким запросом мы можем сначала узнать о доступных действиях с объектом:
В ответе будет список только доступных действий. Вот так, например, будет выглядеть ответ для включенной виртуальной машины (у нее, само собой, нет действия Power on):
Кстати, обратите внимание, что ранее в запросе было поле actionRequests - это список действий, которые выполнялись с этой сущностью:
Итак, чтобы выполнить запрос на mutation, нужно создать вот такую конструкцию, содержащую entityId и actionDefinitionId из результатов запроса выше:
После этого мы увидим, что действие начало выполняться:
Через несколько минут оно перейдет в статус выполненного:
Вот таким образом VMware Project Ensemble позволит унифицировать операции с объектами под управлением различных сущностей в инфраструктуре виртуальных машин и приложений на основе API First подхода.