В двух предыдущих статьях рассматривалась работа vRealize Automation 8 с Ansible Open Source. В нашей инфраструктуре для работы с Ansible уже используется Polemarch, а интеграции с ним в vRA 8 нет. Чтобы не ждать разработки интеграции от VMware, сделаем её самостоятельно с помощью Custom Resources и Dynamic Types.
Polemarch — система управления инфраструктурой на основе Ansible, имеющая простой веб-интерфейс и API. Polemarch сфокусирован на самом необходимом функционале — это спартанский конкурент Ansible Tower.
Пакет интеграции vRA – Polemarch
v1.0.0
В данной версии реализованы основные процессы для работы с объектами Polemarch, а также процессы для интеграции с vRA, включающие:
- создание и настройку инвентори;
- передачу пользовательских переменных;
- задание списка плейбуков и их запуск после развёртывания VM;
- задание списка плейбуков и их запуск перед удалением VM.
vRA. Custom Resource
Если в vRA 7 любой процесс из оркестратора можно было опубликовать как XaaS и использовать его при создании блюпринтов, то в версии vRA 8 это уже не так (текущая версия 8.1). С портала vRA по-прежнему можно предоставить доступ с к любому процессу, настраивается это в Service Broker. А для использования workflow в составе блюпринтов требуется создание Custom Resource (пользовательский ресурс). Это мощный инструмент, с помощью него Вы можете значительно расширить функционал блюпринтов, поскольку не будете ограничены набором типов vRA. Для нового Custom Resource требуется указать тип создаваемого объекта. Правильными считаются два варианта: разработка нового типа в Plug-in SDK или создание собственного типа DynamicTypes. Для второго не нужно быть продвинутым программистом, и его функционала достаточно для большинства задач.
Данный пакет интеграции включает тип DynamicTypes:Polemarch.Playbook и все необходимые процессы. С точки зрения Polemarch, этот тип правильнее было назвать Inventory а не Playbook, потому что для каждого такого объекта создаётся выделенный инвентори, в нём регистрируются хосты и пользовательские переменные. После создания всех объектов запускаются на выполнение плейбуки из списка provision. Если список de_provision не содержит плейбуков, то инвертори сразу удаляется, чтобы в vRO не скопилась куча старых объектов (инвертори в Polemarch можно и не удалять, в запросе списка инвентори используется фильтр по переменной: variables=active:true, достаточно установить её в false). Custom Resource создаётся для типа DynamicTypes:Polemarch.Playbook (см. скриншот справа).
vRA. Блюпринты
Входные параметры процесса “Start provision playbooks” (этот процесс указан при создании Custom Resource в поле Lifecycle Actions – Create) будут доступны как редактируемые поля после добавления нашего ресурса в блюпринт.
Пример блюпринта с одной виртуальной машиной:
formatVersion: 1 name: Polemarch SingleVM version: 1 inputs: {} resources: Config_VM: type: Custom.Polemarch.Playbook dependsOn: - VM properties: hosts: '${resource.VM.address}' inventoryName: 'vRA_${env.deploymentId}' playbooks: - provision: - centod_config.yml hostVariables: | deploy_server: true server_type: vRA env_type: test VM: type: Cloud.Machine properties: image: CentOS_7 flavor: small customizationSpec: tmp-linux-vra networks: - network: '${resource.vSphere_Network.id}' assignment: static vSphere_Network: type: Cloud.vSphere.Network properties: networkType: existing
Пример блюпринта с несколькими виртуальными машинами и двумя Custom Resource:
formatVersion: 1 name: Polemarch MultiVM version: 1 inputs: {} resources: Install_App: type: Custom.Polemarch.Playbook dependsOn: - App_VMs - Install_DB properties: hosts: '${join(resource.App_VMs.address, ",")}' inventoryName: '${join(["vRA", env.deploymentId, "app"], "_")}' playbooks: - provision: - centos_config.yml - soft_install.yml hostVariables: | deploy_server: true server_type: vRA env_type: test install_tomcat: true Install_DB: type: Custom.Polemarch.Playbook dependsOn: - DB_VMs properties: hosts: '${resource.DB_VMs.address}' inventoryName: '${join(["vRA", env.deploymentId, "db"], "_")}' playbooks: - provision: - centos_config.yml - soft_install.yml de_provision: - db_backup.yml hostVariables: | deploy_server: true server_type: vRA env_type: test install_postgresql: true pg_version: 12 App_VMs: type: Cloud.Machine properties: count: 3 image: CentOS_7 flavor: small customizationSpec: tmp-linux-vra networks: - network: '${resource.vSphere_Network.id}' assignment: static DB_VMs: type: Cloud.Machine properties: image: CentOS_7 flavor: medium customizationSpec: tmp-linux-vra networks: - network: '${resource.vSphere_Network.id}' assignment: static vSphere_Network: type: Cloud.vSphere.Network properties: networkType: existing
Код блюпринтов доступен на https://github.com/isas2/vra.
Подготовка пакета к работе
1. Установите пакет в vRealize Orchestrator:
- Скачайте vRO пакет ru.zabedu.polemarch.package;
- ВНИМАНИЕ! НЕ нужно импортировать пакет ru.zabedu.polemarch.package через вкладку Packages, он содержит настройки DynamicTypes, которые не будут применены при импорте;
- Перейдите во вкладку Workflows, Library->Dynamic Types->Configuration, запустите процесс «Import Configuration From Package» и выберите файл “ru.zabedu.polemarch.package”;
- Убедитесь, что все элементы успешно импортированы: процессы, действия, конфигурационные элементы, новые типы DynamicTypes.
2. Запустите процесс начальной настройки «Initialize», который выполнит:
- Регистрацию REST хост – «Add Polemarch REST host» и сохранение ссылки на хост в конфигурационном элементе polemarchConfig;
- Запуск процесса регистрации используемых REST-операций: «Add Polemarch REST operations»;
- Получение и сохранение токена Polemarch: «New token»;
- Сохранение в конфигурационном элементе polemarchConfig ID основного проекта в Polemarch и имени удалённого пользователя для доступа к виртуальным машинам.
- Имена проекта и пользователя можно указать в блюпринте, но если их указать в конфигурационном элементе, то в блюпринтах можно опускать.
3. Создайте Custom Resource и блюпринты в vRA:
- Создайте новый Custom Resource для типа DynamicTypes:Polemarch.Playbook;
- Создайте и настройте блюпринты.