Decort SDK - это библиотека, написанная на языке GO, позволяющая взаимодействовать с API облачной платформы **DECORT**. Библиотека содеражит в себе структуры и методы, необходимые для отправки запросов. Decort SDK имеет встроенный http-клиент и поддерживает разные способы авторизации на платформе. Библиотека так же содержит в себе модели ответов от платформы.
-`cloudapi` - пользовательская группа, которая позволяет воспользоваться всем стардартным функционалом платформы;
-`cloudbroker` - административная группа, которая позволяет воспользоваться всем стандартным функционалом платформы и расширенными возможностями, включающими в себя управление пользователями, ресурсами, платформами размещения ресурсов и т.д.
### Cloudapi
`Cloudapi` позволяет выполнять запросы к группе пользовательских конечных точек
Данная группа ручек позволяет выполнять следующие операции в платформе:
-`Account` - управление аккаунтами - внутренними учетными записями платформы, которые являются владельцами вычислительных ресурсов;
-`BService` - управление группами виртуальных машин (computes);
-`Compute` - управление виртуальными машинами (индивидуально);
-`ComputeCI` - управление конвейром для создания виртуальных машин;
-`Disks` - управление виртуальными дисками;
-`ExtNet` - управление виртуальными сетями, отвечающими за внешний доступ;
-`FLIPgroup` - управление группами "плавающими" ip - адресами;
-`Image` - управление образами операционных систем;
-`K8CI` - управление конвейром для создания кластера;
-`K8S` - управление кластерами kubernetes;
-`KVMPPC` - создание виртуальной машины Power PC (IBM);
-`KVMx86` - создание виртуальной машины x86;
-`LB` - управление балансировщиками нагрузки;
-`Locations` - получение информации о grid площадки;
-`RG` - управление ресурсными группами аккаунта;
-`Sizes` - получение информации о потребляемых ресурсах виртуальными машинами и дисками;
-`Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
-`VINS` - управление виртуальными изолированными сетями.
### Cloudbroker
`Cloudbroker` позволяет выполнять запросы к группе пользовательских конечных точек
Данная группа ручек позволяет выполнять следующие операции в платформе:
-`Account` - управление аккаунтами - внутренними учетными записями платформы, которые являются владельцами вычислительных ресурсов;
-`Compute` - управление виртуальными машинами (индивидуально);
-`Disks` - управление виртуальными дисками;
-`ExtNet` - управление виртуальными сетями, отвечающими за внешний доступ;
-`Grid` - управление площадками;
-`Image` - управление образами операционных систем;
-`K8CI` - управление конвейром для создания кластера;
-`K8S` - управление кластерами kubernetes;
-`KVMPPC` - создание виртуальной машины Power PC (IBM);
-`KVMx86` - создание виртуальной машины x86;
-`LB` - управление балансировщиками нагрузки;
-`RG` - управление ресурсными группами аккаунта;
-`SEP` - управление storage endpoint (sep);
-`Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
-`VINS` - управление виртуальными изолированными сетями.
## Работа с библиотекой
Алгоритм работы с библиотекой выглядит следующим образом:
Создание клиента происходит с помощью функции-строителя `New` из основного пакета `decort-sdk`, для избежания проблем с именами, пакету можно присвоить алиас `decort`. Функция принимает конфигурацию, возвращает структуру `DecortClient`, с помощью которой можно взаимодействовать с платформой.
// CreateRequest - реквест на создание виртуальной машины
req := kvmx86.CreateRequest{
RGID: 123,
Name: "compute",
CPU: 4,
RAM: 4096,
ImageID: 321,
}
}
```
### Выполнение запроса
Чтобы выполнить запрос, необходимо:
1. Вызвать у клиента метод, отвечаеющий за определение группы API для взаимодействия, это может быть `.CloudAPI()`, либо `.CloudBroker()`. Данные методы возвращаеют соответствующие структуры, с помощью которых можно соверать запросы.
2. Вызвать у возвращенной структуры метод, определяющий группу ручек для взаимодействия.
Доступные методы для `.CloudAPI()`:
-`.Account()` - для работы с`Account`
-`.BService()` - для работы с`BService`
-`.Compute()` - для работы с`Compute`
-`.ComputeCI()` - для работы с`ComputeCI`
-`.Disks()` - для работы с`Disks`
-`.ExtNet()` - для работы с`ExtNet`
-`.FLIPgroup()` - для работы с`FLIPGroup`
-`.Image()` - для работы с`Image`
-`.K8CI()` - для работы с`K8CI`
-`.K8S()` - для работы с`K8S`
-`.KVMPPC()` - для работы с`KVMPPC`
-`.KVMx86()` - для работы с`KVMX86`
-`.LB()` - для работы с`LB`
-`.Locations()` - для работы с`Locations`
-`.RG()` - для работы с`RG`
-`.Sizes()` - для работы с`Sizes`
-`.Tasks()` - для работы с`Tasks`
-`.VINS()` - для работы с`VINS`
Доступные методы для `.CloudBroker()`:
-`.Account()` - для работы с`Account`
-`.Compute()` - для работы с`Compute`
-`.Disks()` - для работы с`Disks`
-`.ExtNet()` - для работы с`ExtNet`
-`.Grid()` - для работы с`Grid`
-`.Image()` - для работы с`Image`
-`.K8CI()` - для работы с`K8CI`
-`.K8S()` - для работы с`K8S`
-`.KVMPPC()` - для работы с`KVMPPC`
-`.KVMx86()` - для работы с`KVMX86`
-`.LB()` - для работы с`LB`
-`.RG()` - для работы с`RG`
-`.SEP()` - для работы с`SEP`
-`.Tasks()` - для работы с`Tasks`
-`.VINS()` - для работы с`VINS`
3. Вызвать метод, отвечающий за выполнение запроса и передать в него:
- контекст;
- структуру запроса.
У кождой группы ручек API имеются свои доступные методы, которые определяются платформой.
4. Обработать результат и ошибки.
Т.к. все вызовы методов идут последовательно, можно их объеденить в конвейер:
Для каждого `ListRequest` в SDK есть группа функций для фильтрации ответа платформы. Для того чтобы произвести фильтрацию по заданным полям, достаточно описать анонимную функцию (предикат) в `.FilterFunc()`, например:
// Функции сортировки имеют параметр inverse (bool):
// При значении false -> сортировка по возрастанию
// При true -> сортировка по убыванию
sorted := resp.
SortByCPU(false).
SortByRAM(false).
SortByCreatedTime(true)
// ....
```
### Сериализация
Результат преобразований легко сериализовать в JSON при помощи функции `.Serialize()`. Она принимает в себя 2 необязательных аргумента: префикс (prefix) и отступ (Indent).
В случае если функция вызывается без аргументов, то маршализация пройдет успешно, но без отступов и префиксов.
```go
// Сериализация данных с префиксом "" и отступом "\t"
Также возможно создать переменную конфигурации из JSON или YAML файла, используя функцию `ParseLegacyConfigJSON` (или `ParseLegacyConfigYAML`) из пакета config.
<br>
*См. пример файлов конфигурации ниже и в директории `samples/`.*
Создание клиента происходит с помощью функции-строителя `NewLegacy` из основного пакета `decort-sdk`, для избежания проблем с именами, пакету можно присвоить алиас `decort`. Функция принимает конфигурацию, возвращает структуру `DecortClient`, с помощью которой можно взаимодействовать с платформой.