В двух предыдущих статьях рассматривалась работа 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;
- Создайте и настройте блюпринты.
