Decort SDK - это библиотека, написанная на языке GO, позволяющая взаимодействовать с API облачной платформы DECORT. Библиотека содеражит в себе структуры и методы, необходимые для отправки запросов. Decort SDK имеет встроенный http-клиент и поддерживает разные способы авторизации на платформе. Библиотека так же содержит в себе модели ответов от платформы.
- Версия 1.0.x Decort-SDK соответствует 3.8.4 версии платформы
- Версия 1.1.x Decort-SDK соответствует 3.8.5 версии платформы
- Версия 1.2.x Decort-SDK соответствует 3.8.5 версии платформы
Выполните команду в терминале:
go get -u github.com/rudecs/decort-sdk
Библиотека поддерживает две группы API платформы:
cloudapi
- пользовательская группа, которая позволяет воспользоваться всем стардартным функционалом платформы;cloudbroker
- административная группа, которая позволяет воспользоваться всем стандартным функционалом платформы и расширенными возможностями, включающими в себя управление пользователями, ресурсами, платформами размещения ресурсов и т.д.
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
позволяет выполнять запросы к группе пользовательских конечных точек
Данная группа ручек позволяет выполнять следующие операции в платформе:
Account
- управление аккаунтами - внутренними учетными записями платформы, которые являются владельцами вычислительных ресурсов;Compute
- управление виртуальными машинами (индивидуально);Disks
- управление виртуальными дисками;ExtNet
- управление виртуальными сетями, отвечающими за внешний доступ;Grid
- управление площадками;Image
- управление образами операционных систем;K8CI
- управление конвейром для создания кластера;K8S
- управление кластерами kubernetes;KVMPPC
- создание виртуальной машины Power PC (IBM);KVMx86
- создание виртуальной машины x86;LB
- управление балансировщиками нагрузки;RG
- управление ресурсными группами аккаунта;SEP
- управление storage endpoint (sep);Tasks
- получение информации о ходе выполнения асинхронных задач (например, создание кластера);VINS
- управление виртуальными изолированными сетями.
Алгоритм работы с библиотекой выглядит следующим образом:
- Настройка конфигурации клиента.
- Создание клиента.
- Создание структуры запроса.
- Выполнение запроса.
Сначала, необходимо создать переменную конфигурации клиента. Конфигурация состоит как из обязательных, так и необязательных полей.
Поле | Тип | Обязательный | Описание |
---|---|---|---|
AppID | string | Да | app_id ключа для выполнения запросов |
AppSecret | string | Да | app_secret ключ для выполнения запроса |
SSOURL | string | Да | URL адрес сервиса аутентификации и авторизации |
DecortURL | string | Да | URL адрес платформы, с которой будет осуществляться взаимодействие |
Retries | uint | Нет | Кол-во неудачных попыток выполнения запроса, по умолчанию - 5 |
SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата, по умолчанию - true |
Token | string | Нет | JWT токен |
Пример кода:
import (
"github.com/rudecs/decort-sdk/config"
)
func main(){
// Настройка конфигурации
cfg := config.Config{
AppID: "<APP_ID>",
AppSecret: "<APP_SECRET>",
SSOURL: "https://sso.digitalenergy.online",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
}
Создание клиента происходит с помощью функции-строителя New
из основного пакета decort-sdk
, для избежания проблем с именами, пакету можно присвоить алиас decort
. Функция принимает конфигурацию, возвращает структуру DecortClient
, с помощью которой можно взаимодействовать с платформой.
package main
import (
"github.com/rudecs/decort-sdk/config"
decort "github.com/rudecs/decort-sdk"
)
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)
}
Структуры запросов определены в пакетах:
pkg/cloudapi
- дляcloudapi
pkg/cloudbroker
- дляcloudbroker
В каждом пакете находятся пакеты групп API:
- cloudapi:
pkg/cloudapi/account
- дляAccount
pkg/cloudapi/bservice
- дляBasic Service
pkg/cloudapi/compute
- дляCompute
pkg/cloudapi/computeci
- дляComputeCI
pkg/cloudapi/disks
- дляDisks
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
- дляRG
pkg/cloudapi/tasks
- дляTasks
pkg/cloudapi/vins
- дляVINS
- cloudbroker:
pkg/cloudbroker/account
- дляAccount
pkg/cloudbroker/compute
- дляCompute
pkg/cloudbroker/disks
- дляDisks
pkg/cloudbroker/extnet
- дляExtNet
pkg/cloudbroker/grid
- дляGrid
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/rg
- дляRG
pkg/cloudbroker/sep
- дляSEP
pkg/cloudbroker/tasks
- дляTasks
pkg/cloudbroker/vins
- дляVINS
Все поля структуры имеют описание, в которых содержится:
- Их назначение;
- Обязательный или нет - поле required в комментариях;
- Доп. информация (допустимые значения, значения по умолчанию).
type CreateRequest struct {
// ID of the resource group, which will own this VM
// Required: true
RGID uint64 `url:"rgId"`
// Name of this VM.
// Must be unique among all VMs (including those in DELETED state) in target resource group
// Required: true
Name string `url:"name"`
// Number CPUs to allocate to this VM
// Required: true
CPU uint64 `url:"cpu"`
// Volume of RAM in MB to allocate to this VM
// Required: true
RAM uint64 `url:"ram"`
// ID of the OS image to base this VM on;
// Could be boot disk image or CD-ROM image
// Required: true
ImageID uint64 `url:"imageId"`
// Size of the boot disk in GB
// Required: false
BootDisk uint64 `url:"bootDisk,omitempty"`
// ID of SEP to create boot disk on.
// Uses images SEP ID if not set
// Required: false
SEPID uint64 `url:"sepId,omitempty"`
// Pool to use if SEP ID is set, can be also empty if needed to be chosen by system
// Required: false
Pool string `url:"pool,omitempty"`
// Network type
// Should be one of:
// - VINS
// - EXTNET
// - NONE
// Required: false
NetType string `url:"netType,omitempty"`
// Network ID for connect to,
// for EXTNET - external network ID,
// for VINS - VINS ID,
// when network type is not "NONE"
// Required: false
NetID uint64 `url:"netId,omitempty"`
// IP address to assign to this VM when connecting to the specified network
// Required: false
IPAddr string `url:"ipAddr,omitempty"`
// Input data for cloud-init facility
// Required: false
Userdata string `url:"userdata,omitempty"`
// Text description of this VM
// Required: false
Description string `url:"desc,omitempty"`
// Start VM upon success
// Required: false
Start bool `url:"start,omitempty"`
// Stack ID
// Required: false
StackID uint64 `url:"stackId,omitempty"`
// System name
// Required: false
IS string `url:"IS,omitempty"`
// Compute purpose
// Required: false
IPAType string `url:"ipaType,omitempty"`
// Reason for action
// Required: false
Reason string `url:"reason,omitempty"`
}
package main
import (
"github.com/rudecs/decort-sdk/config"
decort "github.com/rudecs/decort-sdk"
"github.com/rudecs/decort-sdk/pkg/cloudapi/kvmx86"
)
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)
// Создание структуры запроса
// CreateRequest - реквест на создание виртуальной машины
req := kvmx86.CreateRequest{
RGID: 123,
Name: "compute",
CPU: 4,
RAM: 4096,
ImageID: 321,
}
}
Чтобы выполнить запрос, необходимо:
-
Вызвать у клиента метод, отвечаеющий за определение группы API для взаимодействия, это может быть
.CloudAPI()
, либо.CloudBroker()
. Данные методы возвращаеют соответствующие структуры, с помощью которых можно соверать запросы. -
Вызвать у возвращенной структуры метод, определяющий группу ручек для взаимодействия.
Доступные методы для
.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
-
Вызвать метод, отвечающий за выполнение запроса и передать в него:
- контекст;
- структуру запроса. У кождой группы ручек API имеются свои доступные методы, которые определяются платформой.
- Обработать результат и ошибки.
Т.к. все вызовы методов идут последовательно, можно их объеденить в конвейер: Общий вид вонвейра будет выглядеть так:
client.<API>.<группа>.<метод>
package main
import (
"log"
"fmt"
"github.com/rudecs/decort-sdk/config"
decort "github.com/rudecs/decort-sdk"
"github.com/rudecs/decort-sdk/pkg/cloudapi/kvmx86"
)
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)
// Создание структуры запроса
// CreateRequest - реквест на создание виртуальной машины
req := kvmx86.CreateRequest{
RGID: 123,
Name: "compute",
CPU: 4,
RAM: 4096,
ImageID: 321,
}
//Выполнение запроса с помощью конвейера
res, err := client.CloudAPI().KVMX86().Create(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
Работа с legacy клиентом применяется для пользователей, которые не используют для авторизации decs3o.
Сначала, необходимо создать переменную конфигурации клиента. Конфигурация состоит как из обязательных, так и необязательных полей.
Поле | Тип | Обязательный | Описание |
---|---|---|---|
Username | string | Да | username legacy пользователя |
Password | string | Да | пароль legacy пользователя |
DecortURL | string | Да | URL адрес платформы, с которой будет осуществляться взаимодействие |
Retries | uint | Нет | Кол-во неудачных попыток выполнения запроса, по умолчанию - 5 |
SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата, по умолчанию - true |
Token | string | Нет | JWT токен |
Пример кода:
import (
"github.com/rudecs/decort-sdk/config"
)
func main(){
// Настройка конфигурации
legacyCfg := config.LegacyConfig{
Username: "<USERNAME>",
Password: "<PASSWORD>",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
}
Создание клиента происходит с помощью функции-строителя NewLegacy
из основного пакета decort-sdk
, для избежания проблем с именами, пакету можно присвоить алиас decort
. Функция принимает конфигурацию, возвращает структуру DecortClient
, с помощью которой можно взаимодействовать с платформой.
package main
import (
"github.com/rudecs/decort-sdk/config"
decort "github.com/rudecs/decort-sdk"
)
func main() {
// Настройка конфигурации
legacyCfg := config.LegacyConfig{
Username: "<USERNAME>",
Password: "<PASSWORD>",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
// Создание клиента
legacyClient := decort.NewLegacy(cfg)
}