@ -1,6 +1,6 @@
# Decort SDK
Decort SDK - это библиотека, написанная на языке GO, позволяющая взаимодействовать с API облачной платформы **DECORT** . Библиотека содержит в с е б е структуры и методы, необходимые для отправки запросов. Decort SDK имеет встроенный http-клиент и поддерживает разные способы авторизации на платформе. Библиотека так же содержит в с е б е модели ответов от платформы.
Decort SDK - это библиотека, написанная на языке GO, позволяющая взаимодействовать с API облачной платформы **DECORT** . Библиотека содера жит в с е б е структуры и методы, необходимые для отправки запросов. Decort SDK имеет встроенный http-клиент и поддерживает разные способы авторизации на платформе. Библиотека так же содержит в с е б е модели ответов от платформы.
## Версии
@ -11,16 +11,9 @@ Decort SDK - это библиотека, написанная на языке G
- Версия 1.4.x Decort-SDK соответствует 3.8.6 версии платформы
- Версия 1.5.x Decort-SDK соответствует 3.8.7 версии платформы
- Версия 1.6.x Decort-SDK соответствует 3.8.8 версии платформы
- Версия 1.7.х Decort-SDK соответствует 3.8.9 версии платформы
- Версия 1.8.х Decort-SDK соответствует 4.0.0 версии платформы
- Версия 1.9.х Decort-SDK соответствует 4.1.0 версии платформы
- Версия 1.10.х Decort-SDK соответствует 4.2.0 версии платформы
## Оглавление
- [Decort SDK ](#decort-sdk )
- [Версии ](#версии )
- [Оглавление ](#оглавление )
- [Установка ](#установка )
- [Список API ](#список-api )
- [Cloudapi ](#cloudapi )
@ -32,20 +25,11 @@ Decort SDK - это библиотека, написанная на языке G
- [Пример JSON конфигурации ](#пример-json-конфигурации )
- [Пример YAML конфигурации ](#пример-yaml-конфигурации )
- [Создание клиента ](#создание-клиента )
- [Пример ](#пример )
- [Создание структуры запроса ](#создание-структуры-запроса )
- [Пример комментариев структуры ](#пример-комментариев-структуры )
- [Пример создания запроса для развертывания виртуальной машины: ](#пример-создания-запроса-для-развертывания-виртуальной-машины )
- [Создание структуры запроса ](#cо зда ние -структуры-запроса )
- [Выполнение запроса ](#выполнение-запроса )
- [Пример выполнения запроса ](#пример-выполнения-запроса )
- [Пример выполнения GetRaw и ListRaw запросов ](#пример-выполнения-getraw-и-listraw-запросов )
- [Фильтрация ](#фильтрация )
- [Использование на примере `compute.FilterByK8SID`: ](#использование-на-примере-computefilterbyk8sid )
- [Сортировка ](#сортировка )
- [Сериализация ](#сериализация )
- [Комплексный пример ](#комплексный-пример )
- [Получение списка уникальных идентификаторов ID объекта ](#получение-списка-уникальных-идентификаторов-id-объекта )
- [Методы поля Result для группы tasks ](#методы-поля-result-для-группы-tasks )
- [Работа с legacy клиентом ](#работа-с -legacy-клиентом )
- [Настройка конфигурации legacy клиента ](#настройка-конфигурации-legacy-клиента )
- [Пример конфигурации legacy клиента ](#пример-конфигурации-legacy-клиента )
@ -53,31 +37,8 @@ Decort SDK - это библиотека, написанная на языке G
- [Пример legacy JSON конфигурации ](#пример-legacy-json-конфигурации )
- [Пример legacy YAML конфигурации ](#пример-legacy-yaml-конфигурации )
- [Создание legacy клиента ](#создание-legacy-клиента )
- [Пример создания legacy клиента ](#пример-создания-legacy-клиента )
- [Пример выполнения запроса ](#пример-выполнения-запроса-1 )
- [Работа с BVS клиентом ](#работа-с -bvs-клиентом )
- [Настройка параметров BVS в кабинете администратора ](#настройка-параметров-bvs-в-кабинете-администратора )
- [Настройка конфигурации BVS клиента ](#настройка-конфигурации-bvs-клиента )
- [Описание структуры token ](#описание-структуры-token )
- [Пример конфигурации BVS клиента ](#пример-конфигурации-bvs-клиента )
- [Парсинг BVS конфигурации из файла ](#парсинг-bvs-конфигурации-из-файла )
- [Парсинг BVS токена из файла ](#парсинг-bvs-токена-из-файла )
- [Пример BVS JSON конфигурации ](#пример-bvs-json-конфигурации )
- [Пример BVS YAML конфигурации ](#пример-bvs-yaml-конфигурации )
- [Создание BVS клиента ](#создание-bvs-клиента )
- [Пример создания BVS клиента ](#пример-создания-bvs-клиента )
- [Пример получения BVS токена ](#пример-получения-bvs-токена )
- [Пример обновления BVS токена ](#пример-обновления-bvs-токена )
- [Пример выполнения запроса ](#пример-выполнения-запроса-2 )
- [Пример валидации запросов, имеющих в своей структуре поле RAM (или MasterRam/WorkerRAM) ](#пример-валидации-запросов-имеющих-в-своей-структуре-поле-ram-или-masterramworkerram )
- [Пример выполнения запроса ](#пример-выполнения-запроса-3 )
- [Работа с универсальным клиентом ](#работа-с -универсальным-клиентом )
- [Настройка конфигурации универсального клиента ](#настройка-конфигурации-универсального-клиента )
- [Пример конфигурации универсального клиента ](#пример-конфигурации-универсального-клиента )
- [Парсинг универсальной конфигурации из файла ](#парсинг-универсальной-конфигурации-из-файла )
- [Создание универсального клиента ](#создание-универсального-клиента )
- [Пример создания универсального клиента ](#пример-создания-универсального-клиента )
- [Пример выполнения запроса ](#пример-выполнения-запроса-4 )
- [Создание структуры запроса ](#cо зда ние -структуры-запроса )
- [Выполнение запроса ](#выполнение-запроса )
## Установка
@ -100,23 +61,22 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
Данная группа ручек позволяет выполнять следующие операции в платформе:
- `Account` - управление аккаунтами - внутренними учетными записями платформы, которые являются владельцами вычислительных ресурсов;
- `Audit` - получение информации о событиях системы;
- `BService` - управление группами виртуальных машин (computes);
- `Compute` - управление виртуальными машинами (индивидуально);
- `Disks` - управление виртуальными дисками;
- `DPDK` - управление виртуальными сетями DPDK;
- `ExtNet` - управление виртуальными сетями, отвечающими за внешний доступ;
- `FLIPgroup` - управление группами "плавающими" ip - адресами;
- `Image` - управление образами операционных систем;
- `K8CI` - получение информации о конвейере для создания кластера;
- `K8S` - управление кластерами kubernetes;
- `KVMPPC` - создание виртуальной машины Power PC (IBM);
- `KVMx86` - создание виртуальной машины x86;
- `LB` - управление балансировщиками нагрузки;
- `Locations` - получение информации о grid площадки;
- `RG` - управление ресурсными группами аккаунта;
- `Sizes` - получение информации о потребляемых р е с у р с а х виртуальными машинами и дисками;
- `Stack` - получение информации о вычислительных узлах;
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
- `VFPool` - управление пулом виртуальных сетевых функций;
- `VINS` - управление виртуальными изолированными сетями.
### Cloudbroker
@ -125,12 +85,10 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
Данная группа ручек позволяет выполнять следующие операции в платформе:
- `Account` - управление аккаунтами - внутренними учетными записями платформы, которые являются владельцами вычислительных ресурсов;
- `Audit` - получение информации о событиях системы;
- `APIAccess` - управление доступом к API и е г о объектам;
- `Backup` - управление резервным копированием;
- `Compute` - управление виртуальными машинами (индивидуально);
- `Disks` - управление виртуальными дисками;
- `DPDK` - управление виртуальными сетями DPDK;
- `ExtNet` - управление виртуальными сетями, отвечающими за внешний доступ;
- `FLIPGroup` - управление группами с «плавающими» ip адресами;
- `Grid` - управление площадками;
@ -138,9 +96,9 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `Image` - управление образами операционных систем;
- `K8CI` - управление конвейром для создания кластера;
- `K8S` - управление кластерами kubernetes;
- `KVMPPC` - создание виртуальной машины Power PC (IBM);
- `KVMx86` - создание виртуальной машины x86;
- `LB` - управление балансировщиками нагрузки;
- `Node` - управление нодами платформы;
- `PCIDevice` - управление устройствами;
- `RG` - управление ресурсными группами аккаунта;
- `SEP` - управление storage endpoint (sep);
@ -148,7 +106,6 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
- `User` - управление пользователями (индивидуально);
- `VGPU` - управление виртуальными графическими процессорами;
- `VFPool` - управление пулом виртуальных сетевых функций;
- `VINS` - управление виртуальными изолированными сетями.
## Работа с библиотекой
@ -176,7 +133,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
| SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата |
| Token | string | Нет | JWT токен |
##### Пример конфигурации клиента
#### Пример конфигурации клиента
```go
import (
@ -210,7 +167,7 @@ import (
func main() {
// Парсинг конфигурации из JSON-файла
cfg, _ := config.ParseConfigJSON("< PATH > ")
cfg := config.ParseConfigJSON("< PATH > ")
}
```
@ -282,32 +239,29 @@ func main() {
- **cloudapi** :
- `pkg/cloudapi/account` - для `Account`
- `pkg/cloudapi/audit` - для `Audit`
- `pkg/cloudapi/bservice` - для `Basic Service`
- `pkg/cloudapi/compute` - для `Compute`
- `pkg/cloudapi/disks` - для `Disks`
- `pkg/cloudapi/dpdknet` - для `DPDK`
- `pkg/cloudapi/extnet` - для `ExtNet`
- `pkg/cloudapi/flipgroup` - для `FLIPGroup`
- `pkg/cloudapi/image` - для `Image`
- `pkg/cloudapi/k8ci` - для `K8CI`
- `pkg/cloudapi/k8s` - для `K8S`
- `pkg/cloudapi/kvmppc` - для `KVMPPC`
- `pkg/cloudapi/kvmx86` - для `KVMX86`
- `pkg/cloudapi/lb` - для `LB`
- `pkg/cloudapi/locations` - для `Locations`
- `pkg/cloudapi/rg` - для `RG`
- `pkg/cloudapi/sizes` - для `Sizes`
- `pkg/cloudapi/stack` - для `Stack`
- `pkg/cloudapi/tasks` - для `Tasks`
- `pkg/cloudapi/vfpool` - для `VFPool`
- `pkg/cloudapi/vins` - для `VINS`
- **cloudbroker** :
- `pkg/cloudbroker/account` - для `Account`
- `pkg/cloudbroker/audit` - для `Audit`
- `pkg/cloudbroker/apiaccess` - для `APIAccess`
- `pkg/cloudbroker/backup` - для `Backup`
- `pkg/cloudbroker/compute` - для `Compute`
- `pkg/cloudbroker/disks` - для `Disks`
- `pkg/cloudbroker/dpdknet` - для `DPDK`
- `pkg/cloudbroker/extnet` - для `ExtNet`
- `pkg/cloudbroker/flipgroup` - для `FLIPGroup`
- `pkg/cloudbroker/grid` - для `Grid`
@ -315,9 +269,9 @@ func main() {
- `pkg/cloudbroker/image` - для `Image`
- `pkg/cloudbroker/k8ci` - для `K8CI`
- `pkg/cloudbroker/k8s` - для `K8S`
- `pkg/cloudbroker/kvmppc` - для `KVMPPC`
- `pkg/cloudbroker/kvmx86` - для `KVMX86`
- `pkg/cloudbroker/lb` - для `LB`
- `pkg/cloudbroker/node` - для `Node`
- `pkg/cloudbroker/pcidevice` - для `PCIDevice`
- `pkg/cloudbroker/rg` - для `RG`
- `pkg/cloudbroker/sep` - для `SEP`
@ -325,7 +279,6 @@ func main() {
- `pkg/cloudbroker/tasks` - для `Tasks`
- `pkg/cloudbroker/user` - для `User`
- `pkg/cloudbroker/vgpu` - для `VGPU`
- `pkg/cloudbroker/vfpool` - для `VFPool`
- `pkg/cloudbroker/vins` - для `VINS`
В с е поля структуры имеют описание, в которых содержится:
@ -416,7 +369,9 @@ type CreateRequest struct {
// Required: false
IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"`
// Reason for action
// Required: false
Reason string `url:"reason,omitempty" json:"reason,omitempty"`
}
```
@ -466,34 +421,31 @@ func main() {
Доступные методы для `.CloudAPI()` :
- `.Account()` - для работы с `Account`
- `.Audit()` - для работы с `Audit`
- `.BService()` - для работы с `BService`
- `.Compute()` - для работы с `Compute`
- `.Disks()` - для работы с `Disks`
- `.DPDKNet()` - для работы с `DPDK`
- `.ExtNet()` - для работы с `ExtNet`
- `.FLIPgroup()` - для работы с `FLIPGroup`
- `.Image()` - для работы с `Image`
- `.K8CI()` - для работы с `K8CI`
- `.K8S()` - для работы с `K8S`
- `.KVMPPC()` - для работы с `KVMPPC`
- `.KVMx86()` - для работы с `KVMX86`
- `.LB()` - для работы с `LB`
- `.Locations()` - для работы с `Locations`
- `.RG()` - для работы с `RG`
- `.Sizes()` - для работы с `Sizes`
- `.Stack()` - для работы с `Stack`
- `.Tasks()` - для работы с `Tasks`
- `.VFPool()` - для работы с `VFPool`
- `.VINS()` - для работы с `VINS`
Доступные методы для `.CloudBroker()` :
- `.Account()` - для работы с `Account`
- `.Audit()` - для работы с `Audit`
- `.APIAccess()` - для работы с `APIAccess`
- `.Backup()` - для работы с `Backup`
- `.Compute()` - для работы с `Compute`
- `.Disks()` - для работы с `Disks`
- `.DPDKNet()` - для работы с `DPDK`
- `.ExtNet()` - для работы с `ExtNet`
- `.FLIPGroup()` - для работы с `FLIPGroup`
- `.Grid()` - для работы с `Grid`
@ -501,9 +453,9 @@ func main() {
- `.Image()` - для работы с `Image`
- `.K8CI()` - для работы с `K8CI`
- `.K8S()` - для работы с `K8S`
- `.KVMPPC()` - для работы с `KVMPPC`
- `.KVMx86()` - для работы с `KVMX86`
- `.LB()` - для работы с `LB`
- `.Node()` - для работы с `Node`
- `.PCIDevice()` - для работы с `PCIDevice`
- `.RG()` - для работы с `RG`
- `.SEP()` - для работы с `SEP`
@ -511,7 +463,6 @@ func main() {
- `.Tasks()` - для работы с `Tasks`
- `.User()` - для работы с `User`
- `.VGPU()` - для работы с `VGPU`
- `.VFPool()` - для работы с `VFPool`
- `.VINS()` - для работы с `VINS`
3. Вызвать метод, отвечающий за выполнение запроса и передать в него:
@ -576,56 +527,6 @@ func main() {
}
```
Для запросов Get и List реализованы запросы GetRaw и ListRaw, которые возвращают ответ не в виде соответствующей структуры, а в виде массива байт (JSON).
Выполнение таких запросов происходит аналогично.
#### Пример выполнения GetRaw и ListRaw запросов
```go
package main
import (
"log"
"fmt"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
)
func main() {
// Настройка конфигурации
cfg := config.Config{
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://sso.digitalenergy.online",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
// Создание клиента
client := decort.New(cfg)
// 1. Создание структуры запроса GetRequest на получение информации о б аккаунте и выполнение GetRaw запроса с помощью конвейера
req1 := account.GetRequest{
AccountID: 123,
}
res1, err := client.CloudAPI().Account().GetRaw(context.Background(), req1)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(res1))
// 2. Создание структуры запроса ListRequest на получение информации о б аккаунтах и выполнение ListRaw запроса с помощью конвейера
req2 := account.ListRequest{}
res2, err := client.CloudAPI().Account().ListRaw(context.Background(), req2)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(res2))
}
```
### Фильтрация
Для каждого `ListRequest` в SDK есть группа функций для фильтрации ответа платформы. Для того чтобы произвести фильтрацию по заданным полям, достаточно описать анонимную функцию (предикат) в `.FilterFunc()` , например:
@ -683,7 +584,7 @@ filtered := resp.
```go
func main() {
// Чтение конфигурации из файла
cfg, _ := config.ParseConfigJSON("< PATH > ")
cfg := config.ParseConfigJSON("< PATH > ")
// Создание клиента
client := decort.New(cfg)
@ -815,133 +716,6 @@ func main() {
```
### Получение списка уникальных идентификаторов ID объекта
Для всех структур, имеющих поля с о списками объектов с уникальными числовыми идентификаторами (ID), добавлены методы IDs(), возвращающие массивы уникальных идентификаторов объектов в этих списках.
```go
package main
import (
"log"
"fmt"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
)
func main() {
// Настройка конфигурации
cfg := config.Config{
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://sso.digitalenergy.online",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
// Создание клиента
client := decort.New(cfg)
// Создание структуры запроса GetRequest на получение информации о сервисе и выполнение запроса с помощью конвейера
req := bservice.GetRequest{
ServiceID: 123,
}
res, err := client.CloudAPI().BService().Get(context.Background(), req)
if err != nil {
log.Fatal(err)
}
// Получение списков ID ComputeIDs и GroupIDs экземпляра res типа RecordBasicService по полям Computes и Groups, соответственно
computeIDs := res.Computes.IDs()
groupIDs := res.Groups.IDs()
fmt.Println(computeIDs)
fmt.Println(groupIDs)
}
```
### Методы поля Result для группы tasks
Поле Result внутри структур группы tasks имеет тип интерфейс и может содержать:
- строку о результате выполнения задачи, например `true`
- массив, содержащий ID и имя созданного р е с у р с а , например `[12345, "resource_name"]`
- массив, содержащий информацию о восстновленных дисках, например `[{"computeId": 123, "diskId": 456}, {"computeId": 789, "diskId": 10}]`
Соответственно, для получения информации из поля Result доступны следующие методы:
- ToString(): строковое представление результата выполнения задачи
- ID() и Name(): получение ID и имени созданного в результате выполнения задачи р е с у р с а
- ToMaps(): получение списка карт, содержащих информацию о дисках, восстановленных в результате выполнения задачи.
В с е методы оборудованы возвратом ошибок. Непустая ошибка означает, что из поля Result нельзя получить информацию, которую предоставляет метод.
```go
package main
import (
"log"
"fmt"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/tasks"
tasks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/tasks"
)
func main() {
// Настройка конфигурации
cfg := config.Config{
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://sso.digitalenergy.online",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
// Создание клиента
client := decort.New(cfg)
// Создание структуры запроса GetRequest на получение информации о конкретной задаче и выполнение запроса с помощью конвейера
getReq := tasks.GetRequest{
AuditID: "b6316",
}
task, err := client.CloudAPI().Tasks().Get(context.Background(), getReq)
if err != nil {
log.Fatal(err)
}
// Получение списка карт с информацией о восстановленных дисках
maps, err := task.Result.ToMaps()
if err != nil {
log.Fatal(err)
}
fmt.Println(maps)
// Получение строкового результата выполнения задачи task
res, _ := task.Result.ToString()
fmt.Println(res)
// Создание структуры запроса ListRequest на получение информации о всех задачах и выполнение запроса с помощью конвейера
listReq := tasks_cb.ListRequest{}
tasks, err := client.CloudBroker().Tasks().List(context.Background(), listReq)
if err != nil {
log.Fatal(err)
}
for _, t := range tasks {
// Получение id р е с у р с а , созданного в результате выполнения задачи t
id, err := task.Result.ID()
if err != nil {
log.Fatal(err)
}
fmt.Println(id)
// Получение имени р е с у р с а , созданного в результате выполнения задачи t
name, _ := task.Result.Name()
fmt.Println(name)
}
}
```
## Работа с legacy клиентом
Работа с legacy клиентом применяется для пользователей, которые не используют для авторизации decs3o.
@ -993,7 +767,7 @@ import (
func main() {
// Парсинг конфигурации из YAML-файла
legacyCfg, _ := config.ParseLegacyConfigYAML("< PATH > ")
legacyCfg := config.ParseLegacyConfigYAML("< PATH > ")
}
```
@ -1045,500 +819,7 @@ func main() {
legacyCfg.SetTimeout(5 * time.Minute)
// Создание клиента
legacyClient := decort.NewLegacy(legacyCfg)
}
```
#### Пример выполнения запроса
```go
package main
import (
"fmt"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
)
func main() {
// Настройка конфигурации
legacyCfg := config.LegacyConfig{
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
Domain: "dynamix",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
// Создание клиента
legacyClient := decort.NewLegacy(legacyCfg)
// Создание структуры запроса
// CreateRequest - реквест на создание виртуальной машины
req := kvmx86.CreateRequest{
RGID: 123,
Name: "compute",
CPU: 4,
RAM: 4096,
ImageID: 321,
}
// Выполнение запроса
res, err := legacyClient.CloudAPI().KVMX86().Create(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
```
## Работа с BVS клиентом
Работа с BVS клиентом применяется для пользователей, которые используют для авторизации BVS.
### Настройка параметров BVS в кабинете администратора
Для корректной работы функции обновления токена необходимо соблюдать следующие условия:
на странице администратора по следующему пути: домены-< имя вашего домена>-(символ i)-токены
- параметр "Время жизни токена доступа" - устанавливается для всего домена. Н е применяется есть по следующему пути: безопасность-клие нтс кие _с ис те мы-(символ i)-токены-"Время жизни токена доступа" не выставлено иное время, которое имеет больший приоритет для конкретной клиентской системы
- параметр "Время простоя сессии" - время жизни токена обновления. В случае указания количества минут меньше, чем время жизни токена, то обновление токена будет работать некорректно. Редомендуется указывать время или равное или больше времени жизни токена
- параметр "Максимальное время жизни сессии" - время в течение которого возможно производить обновление токена. Если данный параметр будет равен времени жизни токена, то обновление токена будет работать некорректно. Редомендуется указывать время больше времени жизни токена
### Настройка конфигурации BVS клиента
Сначала, необходимо создать переменную конфигурации клиента. Конфигурация состоит как из обязательных, так и необязательных полей.
| Поле | Тип | Обязательный | Описание |
| ------------- | --------------------------------------------- | ------------ | ------------------------------------------------------------------ |
| Username | string | Да | username пользователя |
| Password | string | Да | пароль пользователя |
| AppID | string | Да | app_id ключа для выполнения запросов |
| AppSecret | string | Да | app_secret ключ для выполнения запроса |
| DecortURL | string | Да | URL адрес платформы, с которой будет осуществляться взаимодействие |
| SSOURL | string | Да | URL адрес сервиса аутентификации и авторизации |
| Domain | string | Да | Имя домена |
| Retries | uint | Нет | Кол-во неудачных попыток выполнения запроса, по умолчанию - 5 |
| Timeout | config.Duration | Нет | Таймаут HTTP клиента, по умолчанию - без ограничений |
| SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата |
| Token | struct{} [см. ниже ](#описание-структуры-token )| Нет | JWT токен |
| PathCfg | string | Нет | Путь записи конфигурации в файл |
| PathToken | string | Нет | Путь записи токена в файл |
| TimeToRefresh | uint | Нет | Количество минут, за сколько до истечения срока действия токена выполнится е г о обновление, по умолчанию - 1 минута |
### Описание структуры token
| Параметр | Тип | Описание |
| ------------ | ------ | ------------------------------- |
| AccessToken | string | Токен |
| TokenType | string | Тип токена |
| RefreshToken | string | Токен для запроса на обновление |
| Expiry | time | Время жизни токена |
#### Пример конфигурации BVS клиента
```go
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
)
func main(){
// Настройка конфигурации
BvsCfg := config.BVSConfig{
AppID: "< APP_ID > ",
AppSecret: "< APP_SECRET > ",
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
SSOURL: "https://bvs-delta.qa.loc:8443",
DecortURL: "https://delta.qa.loc",
Domain: "dynamix",
Retries: 5,
}
BvsCfg.SetTimeout(5 * time.Minute)
}
```
#### Парсинг BVS конфигурации из файла
Также возможно создать переменную конфигурации из JSON или YAML файла, используя функцию `ParseConfigBVSJSON` (или `ParseConfigBVSYAML` ) из пакета config.
< br >
*См. пример файлов конфигурации ниже и в директории `samples/` .*
```go
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
)
func main() {
// Парсинг конфигурации из YAML-файла
BVSCfg, _ := config.ParseConfigBVSYAML("< PATH > ")
}
```
#### Парсинг BVS токена из файла
Также возможно создать переменную токена из JSON или YAML файла, используя функцию `ParseTokenBVSJSON` (или `ParseTokenBVSYAML` ) из пакета config.
< br >
*См. пример файлов конфигурации ниже и в директории `samples/` .*
```go
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
)
func main() {
// Парсинг токена из json-файла
BVSToken, _ := config.ParseTokenBVSJSON("< PATH > ")
}
```
#### Пример BVS JSON конфигурации
```json
{
"username": "< USERNAME > ",
"password": "< PASSWORD > ",
"appId": "< APP_ID > ",
"appSecret": "< APP_SECRET > ",
"ssoUrl": "https://bvs-delta.qa.loc:8443",
"decortUrl": "https://delta.qa.loc",
"domain": "dynamix",
"token": {
"access_token": "string_token",
"token_type": "bearer",
"refresh_token": "string_refresh_token",
"expiry": "2023-11-24T12:40:27.954150524+03:00"
},
"retries": 5,
"sslSkipVerify": true,
"timeout": "5m",
"path_cfg": "config",
"path_token": "token",
"timeToRefresh": 5
}
```
#### Пример BVS YAML конфигурации
```yaml
username: < USERNAME >
password: < PASSWORD >
appId: < APP_ID >
appSecret: < APP_SECRET >
ssoUrl: https://bvs-delta.qa.loc:8443
decortUrl: https://delta.qa.loc
domain: dynamix
token":
access_token: string_token
token_type: bearer
refresh_token: string_refresh_token
expiry: 2023-11-24T12:40:27.954150524+03:00
retries: 5
sslSkipVerify: true
timeout: 5m
path_cfg: config
path_token: token
timeToRefresh: 5
```
### Создание BVS клиента
Создание клиента происходит с помощью функции-строителя `NewBVS` из основного пакета `decort-sdk` , для избежания проблем с именами, пакету можно присвоить алиас `decort` . Функция принимает конфигурацию, возвращает структуру `DecortClient` , с помощью которой можно взаимодействовать с платформой.
#### Пример создания BVS клиента
```go
package main
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
)
func main() {
// Настройка конфигурации
BVSCfg := config.BVSConfig{
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://bvs-delta.qa.loc:8443",
DecortURL: "https://mr4.digitalenergy.online",
Domain: "dynamix",
Retries: 5,
}
BVSCfg.SetTimeout(5 * time.Minute)
// Создание клиента
BVSClient := decort.NewBVS(BVSCfg)
}
```
#### Пример получения BVS токена
В случае указания значения в переменной конфигурации `PathCfg` токен и конфигурация будут записаны в файл в формате `json` , переменная `PathToken` служит для записи токена в файл в формате `json`
```go
package main
import (
"fmt"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
)
func main() {
// Настройка конфигурации
BVSCfg := config.BVSConfig{
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://bvs-delta.qa.loc:8443",
DecortURL: "https://mr4.digitalenergy.online",
Domain: "dynamix",
PathCfg: "config",
Retries: 5,
}
// Создание клиента
BVSClient := decort.NewBVS(BVSCfg)
// Выполнение запроса на получение токена
token, err := BVSClient.GetToken(context.Background())
if err != nil {
log.Fatal(err)
}
fmt.Println(token)
}
```
#### Пример обновления BVS токена
В случае указания значения в переменной конфигурации `PathCfg` обновленный токен и конфигурация будут записаны в файл в формате `json` , переменная `PathToken` служит для записи токена в файл в формате `json`
```go
package main
import (
"fmt"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
)
func main() {
// Настройка конфигурации
BVSCfg := config.BVSConfig{
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://bvs-delta.qa.loc:8443",
DecortURL: "https://mr4.digitalenergy.online",
Domain: "dynamix",
PathToken: "token",
Retries: 5,
}
// Создание клиента
BVSClient := decort.NewBVS(BVSCfg)
// Выполнение запроса на обновление токена
token, err := BVSClient.RefreshToken(context.Background())
if err != nil {
log.Fatal(err)
}
fmt.Println(token)
}
```
#### Пример выполнения запроса
```go
package main
import (
"fmt"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
)
func main() {
// Настройка конфигурации
BVSCfg := config.BVSConfig{
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://bvs-delta.qa.loc:8443",
DecortURL: "https://mr4.digitalenergy.online",
Domain: "dynamix",
Retries: 5,
}
// Создание клиента
BVSClient := decort.NewBVS(BVSCfg)
// Создание структуры запроса
// CreateRequest - реквест на создание виртуальной машины
req := kvmx86.CreateRequest{
RGID: 123,
Name: "compute",
CPU: 4,
RAM: 4096,
ImageID: 321,
}
// Выполнение запроса
res, err := BVSClient.CloudAPI().KVMX86().Create(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
```
#### Пример валидации запросов, имеющих в своей структуре поле RAM (или MasterRam/WorkerRAM)
Если структура запроса содержит поле RAM (или MasterRam/WorkerRAM), то он может быть проверен на валидность. Для этого запрос должен быть передан в функцию ValidateRAM. Вторым аргументом ValidateRAM ожидает число uint64. Рекомендуется использовать константу constants.RAM_DIVISIBILITY. Функция проверит кратно ли значение поля RAM (или MasterRam/WorkerRAM) этому числу.
#### Пример выполнения запроса
```go
package main
import (
"context"
"fmt"
"log"
"os"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/kvmx86"
)
func main() {
// Настройка конфигурации
cfg := config.Config{
AppID: "< APPID > ",
AppSecret: "< APPSECRET > ",
SSOURL: "https://sso-delta.qa.loc:8443",
DecortURL: "https://delta.qa.loc",
Retries: 5,
SSLSkipVerify: true,
}
// Создание клиента
client := decort.New(cfg)
// Создание структуры запроса
// CreateRequest - реквест на создание виртуальной машины
req := kvmx86.CreateRequest{
Name: "kvmx86",
RGID: 907,
CPU: 2048,
RAM: 1024,
ImageID: 161,
}
// Валидация запроса
err := validators.ValidateRAM(req, constants.RAM_DIVISIBILITY)
if err != nil {
log.Fatalf("unable to validate request: %v", err)
}
//Выполнение запроса с помощью конвейера
res, err := client.CloudBroker().KVMX86().Create(context.Background(), req)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
log.Println(res)
}
```
## Работа с универсальным клиентом
Работа с универсальным клиентом позволяет использовать любой тип авторизации
### Настройка конфигурации универсального клиента
| Параметр | Тип | Обязательный | Описание |
| --- | --- | --- | --- |
| Decs3oConfig | *Config | Нет | Конфигурация Decs3o |
| BVSConfig | *BVSConfig | Нет | Конфигурация BVS |
| LegacyConfig | string | Нет | Конфигурация Legacy |
В универсальном клиенте можно использовать только один тип конфигурации одновременно.
#### Пример конфигурации универсального клиента
```go
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
)
func main(){
// Настройка конфигурации
BVSConfig := config.BVSConfig{
AppID: "< APP_ID > ",
AppSecret: "< APP_SECRET > ",
SSOURL: "https://sso.digitalenergy.online",
DecortURL: "https://mr4.digitalenergy.online",
Username: "< Username > ",
Password: "< Password > ",
Retries: 5,
}
BVSConfig.SetTimeout(5 * time.Minute)
cfg := config.UniversalConfig{
BVSConfig: & BVScfg,
}
}
```
#### Создание универсального клиента
Создание клиента происходит с помощью функции-строителя `NewUniversal` из основного пакета `decort-sdk` , для избежания проблем с именами, пакету можно присвоить алиас `decort` . Функция принимает конфигурацию, возвращает структуру `ClientInterface` , с помощью которой можно взаимодействовать с платформой.
#### Пример создания универсального клиента
```go
package main
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
)
func main() {
// Настройка конфигурации
legacyCfg := config.LegacyConfig{
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
legacyCfg.SetTimeout(5 * time.Minute)
cfg := config.UniversalConfig{
LegacyConfig: & legacyCfg,
}
// Создание клиента
universalClient := decort.NewUniversal(cfg)
legacyClient := decort.NewLegacy(cfg)
}
```
@ -1559,19 +840,12 @@ func main() {
legacyCfg := config.LegacyConfig{
Username: "< USERNAME > ",
Password: "< PASSWORD > ",
Domain: "dynamix",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
legacyCfg.SetTimeout(5 * time.Minute)
cfg := config.UniversalConfig{
LegacyConfig: & legacyCfg,
}
// Создание клиента
universalClient := decort.NewUniversal (cfg)
legacyClient := decort.NewLegacy(cfg)
// Создание структуры запроса
// CreateRequest - реквест на создание виртуальной машины
@ -1584,11 +858,10 @@ func main() {
}
// Выполнение запроса
res, err := universalC lient.CloudAPI().KVMX86().Create(context.Background(), req)
res, err := c lient.CloudAPI().KVMX86().Create(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
```