В предыдущей статье описана реализация основных процессов взаимодействия vRealize Orchestrator и Яндекс.Облака. Новая версия пакета направлена на управление Яндекс-инстансами из vRA через объекты Dymamic Types. Разработаны необходимые процессы, создан набор объектов для vRA: ресурсы, действия, блюпринты.
При первом знакомстве с API Яндекс.Облака у меня возникло множество вопросов к документации и поддержке. Результатом нашего общения с поддержкой стала доработанная документация по передаче метаданных при создании инстансов.
Все процессы первой версии пакета, описанного в статье vRO: интеграция с Яндекс.Облаком, доработаны и включены в новую версию пакета.
Пакет интеграции vRA – Яндекс.Облако
v1.5.0
Dymamic Types
Работа с Яндекс-инстансами в vRA реализована через объект DymamicTypes:Yandex.Instance. Его работу обеспечивает набор стандартных для DymamicTypes процессов:
- “Find all Yandex objects” – возвращает все объекты указанного типа;
- “Find relation Yandex objects” – для заданного объекта возвращает все его дочерние объекты по имени связи;
- “Find Yandex object by ID” – возвращает объект по его типу и ID;
- “Has Yandex object children” – определяет, есть ли у объекта дочерние объекты.
Проверка статуса выполнения
Выполнение любой задачи, запускаемой в облаке, не происходит мгновенно. После отправки API-запроса на выполнение каких-либо действий с инстансами вместо результата Вы получите объект запущенной операции:
{ "done": false, "metadata": { "@type": "type.googleapis.com/yandex.cloud.compute.v1.CreateInstanceMetadata", "instanceId": "fhmpm25jr3r4li0ud70g" }, "id": "fhmpbea994ufleduq322", "description": "Create instance", "createdAt": "2019-12-05T05:57:32Z", "createdBy": "aje6*********thio", "modifiedAt": "2019-12-05T05:57:32Z" }
Поле done содержит текущий статус операции: false – операция ещё выполняется, true – операция завершена. Если операция завершена, то дополнительно будет возвращено одно из полей error или response. Объект error содержит поля code, message и details, описывающие ошибку. Объект response будет содержать целевой ресурс операции, если такой есть. Например, для приведенного выше описания операции, это будет объект instance (см. также https://cloud.yandex.ru/docs/api-design-guide/concepts/operation).
Для отслеживания результата выполнения операций, потребовалось создание в vRO ещё одного REST-хоста Yandex_Operation и новой операции: getOperation. Также разработано два процесса:
- “Get operation” – получение статуса операции по её ID;
- “Wait operation” – ожидание выполнения указанной операции. Процесс в цикле каждые delay секунд получает статус выполнения операции и анализирует ответ. Если операция завершена успешно, то возвращается объект response, иначе – генерируется ошибка.
Дополнительные процессы
Процессы для работы XaaS-блюпринтов vRA и действий с инстансами:
- “Create instance” – запрос на создание нового инстанса и ожидание выполнения запроса. Возвращает объект DymamicTypes:Yandex.Instance;
- “Day2 operation” – вызывает нужное действие для инстанса и ожидает его выполнения. Различные действия с инстансом из интерфейса vRA вызывают данный процесс с разными входными параметрами;
- “Register instance” – по ID инстанса возвращает объект DymamicTypes:Yandex.Instance для публикации на портале vRA;
- “Unregister instance” – ничего не делает, если нужно будет что-то выполнить при удалении объекта с портала vRA, то пишите в этом процессе, например, удаление DNS-записей.
Подготовка пакета к работе
1. Установка пакета в vRealize Orchestrator:
- ВНИМАНИЕ! НЕ нужно импортировать пакет ru.zabedu.yandex.package из архива ‘vRA-Yandex.Cloud-Integration.zip’ через вкладку Packages. Пакет содержит настройки DynamicTypes, которые не будут применены при импорте;
- Перейдите во вкладку ‘Workflows’, Library->Dynamic Types->Configuration, запустите процесс «Import Configuration From Package» и выберите файл ‘ru.zabedu.yandex.package’;
- Проверьте, что все элементы успешно импортированы: процессы, действия, конфигурационные элементы, новые типы DynamicTypes.
2. Подготовка к работе процесса получения JWT-ключа:
- Создайте сервисный аккаунт на Yandex.Облако и авторизованный ключ (см. vRO: интеграция с Яндекс.Облаком);
- Поместите скрипт get-yandex-jwt-token.py и закрытую часть авторизованного ключа на сервер с SSH-доступом (для работы скрипта требуются модули python PyJWT и cryptography);
- Укажите в данном скрипте ID сервисного аккаунта (service_account_id), ID используемого ключа (key_id) и путь до закрытого ключа;
- Пропишите путь скрипта на сервере SSH в конфигурационный элемент yandexCloud в аттрибут getJwtTokenScriptPath;
- Замените в процессе “Get JWT token” процесс “Run SSH command (vrassh)” на свой процесс выполнения SSH-команд и настройте его параметры;
- Проверьте работу процесса, он должен возвращать JWT-ключ.
3. Запустите процесс начальной настройки “Initialize”, который выполняет:
- Сохранение ID рабочего каталога и ID сервисного аккаунта в конфигурационном элементе yandexCloud;
- Запускает процесс регистрации REST хостов (5 шт) и сохраняет ссылки на них в конфигурационном элементе: процесс “Add Yandex REST hosts”;
- Запускает процесс регистрации на хостах REST-операций: “Add Yandex REST operations”;
- Запускает процесс получения и сохранения нового IAM-токена: “Get new IAM token”;
- Создаёт расписание для обновления IAM-токена.
4. Импортируйте пакет в vRealize Automation:
- Подключитесь к vRA из vRealize CloudClient:
$ vra login userpass --user user@zabedu.ru --tenant zabedu --server https://vra.zabedu.ru
- Импортируйте пакет в vRA:
$ vra content import --path /home/as/vRA-Yandex.zip --resolution OVERWRITE --verbose
- Настройте доступ к блюпринтам, разрешите действия с ними «Start», «Stop», «Restart», «Delete» и «Unregister».
Файлы к статье
vRA-Yandex.Cloud-Integration.zip – пакет интеграции.