106 lines
5.4 KiB
Markdown
106 lines
5.4 KiB
Markdown
# Алгоритмы обнаружения ресурсов и параметров API Deck
|
||
|
||
Этот документ описывает последовательность действий для получения полного списка ресурсов и их конфигурационных параметров через API Deck (`https://deck-api.ngcloud.ru/api/v1`).
|
||
|
||
---
|
||
|
||
## 1. Получение списка всех инстансов (Resources)
|
||
|
||
Для получения всех ресурсов, которыми владеет текущий пользователь:
|
||
|
||
1. **Запрос:** `GET /v1/index.cfm/instances`
|
||
2. **Параметры:** `?fields=instanceUid,displayName,serviceId,svc,state,explainedStatus`
|
||
3. **Алгоритм обработки:**
|
||
- Итерировать по массиву `results`.
|
||
- Для каждого инстанса:
|
||
- `instanceUid`: Уникальный ID (используется для импорта в TF).
|
||
- `svc`: Человеческое название типа сервиса.
|
||
- `state.params`: Текущие примененные параметры (Discovery).
|
||
- `state.out`: Выходные данные от оркестратора (IP, имена сетей и т.д.).
|
||
|
||
---
|
||
|
||
## 2. Получение списка доступных типов сервисов (Service Inventory)
|
||
|
||
Для понимания того, какие сервисы в принципе можно создать:
|
||
|
||
1. **Запрос:** `GET /v1/index.cfm/services`
|
||
2. **Результат:** Список объектов сервисов.
|
||
3. **Ключевые поля:**
|
||
- `svcId`: ID сервиса (нужен для создания операций).
|
||
- `svc`: Название (например, "Виртуальный датацентр").
|
||
- `orchestratorName`: Имя бэкенда.
|
||
|
||
---
|
||
|
||
## 3. Обнаружение схемы параметров для сервиса (Parameter Scheme Discovery)
|
||
|
||
Поскольку прямого эндпоинта со списком всех определений параметров нет, используется паттерн "Черновик операции".
|
||
|
||
### Шаг А: Создание черновика
|
||
1. **Запрос:** `POST /v1/index.cfm/instanceOperations`
|
||
2. **Тело:**
|
||
```json
|
||
{
|
||
"operation": "create",
|
||
"serviceId": <svcId_из_шага_2>,
|
||
"instanceUid": null
|
||
}
|
||
```
|
||
3. **Результат:** Заголовок `Location` или тело ответа содержат `instanceOperationUid` (UUID).
|
||
|
||
### Шаг Б: Получение метаданных параметров
|
||
1. **Запрос:** `GET /v1/index.cfm/instanceOperations/{instanceOperationUid}?fields=cfsParams`
|
||
2. **Анализ `cfsParams`:**
|
||
- `svcOperationCfsParamId`: Числовой ID параметра (например, `8`). **Критично для работы провайдера.**
|
||
- `label`: Имя поля в UI (например, "UUID VDC").
|
||
- `dataType`: Тип (`string`, `boolean`, `list`, `uuid`).
|
||
- `isRequired`: Обязательность.
|
||
- `descr`: Подсказка по заполнению.
|
||
|
||
---
|
||
|
||
## 4. Маппинг параметров при импорте (Discovery Recipe)
|
||
|
||
При импорте существующего ресурса (Data Source в TF), необходимо сопоставить значения из `instance.state.params` с `svcOperationCfsParamId`.
|
||
|
||
**Прямой связи по ключам нет**, поэтому используется эвристика или ручной маппинг:
|
||
1. Смотрим `instance.state.params` -> находим ключ, например, `vdcUid`.
|
||
2. Смотрим `cfsParams` из Шага 3 -> находим параметр с `label`, похожим на "VDC UUID".
|
||
3. Используем его `svcOperationCfsParamId` для последующих операций `modify`.
|
||
|
||
---
|
||
|
||
## Примеры фильтрации через `curl` и `jq`
|
||
|
||
**Список всех Edge Gateway:**
|
||
```bash
|
||
curl -s -H "Authorization: Bearer $TOKEN" \
|
||
"https://deck-api.ngcloud.ru/api/v1/index.cfm/instances?fields=instanceUid,displayName,serviceId,svc" | \
|
||
jq '.results[] | select(.serviceId == 22)'
|
||
```
|
||
|
||
**Все параметры для создания VM (serviceId 28):**
|
||
```bash
|
||
# 1. Создать черновик
|
||
OP_UID=$(curl -s -H "Authorization: Bearer $TOKEN" -X POST ... -d '{"operation":"create","serviceId":28,"instanceUid":null}' | jq -r .instanceOperationUid)
|
||
|
||
# 2. Прочитать схему
|
||
curl -s -H "Authorization: Bearer $TOKEN" \
|
||
"https://deck-api.ngcloud.ru/api/v1/index.cfm/instanceOperations/$OP_UID?fields=cfsParams" | jq .cfsParams
|
||
```
|
||
|
||
---
|
||
|
||
## 5. Эталонный snapshot реальных Output-полей
|
||
|
||
Сохранён baseline-снимок реальных output-полей по инстансам в статусах `running`/`suspended`:
|
||
|
||
- Каталог: `docs/70_api/output_inventory_snapshot_2026-03-02/`
|
||
- Основной файл для docs: `running_suspended_output_fields_for_docs.json`
|
||
- Описание и сводка: `README.md`
|
||
|
||
Назначение:
|
||
- использовать как шаблон при наполнении страниц `Output params`;
|
||
- затем перепроверять актуальность на live API, так как состав полей в облаке может меняться.
|