Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 8eeef825c0 | |||
| 9a7a7b6f36 |
31
CHANGELOG.md
31
CHANGELOG.md
@@ -1,32 +1,5 @@
|
||||
## Version 1.8.1
|
||||
## Version 1.8.2
|
||||
|
||||
### Feature
|
||||
|
||||
- Add NumaAffinity, CPUPin and HPBacked fields to model CreateRequest in cloudapi/kvmx86 and cloudbroker/kvmx86
|
||||
- Add NumaAffinity, CPUPin and HPBacked fields to model UpdateRequest in cloudapi/compute and cloudbroker/compute
|
||||
- Add ReservedNodeCpus field to models ItemCompute, RecordCompute in cloudapi/compute and to models ItemCompute, InfoCompute in cloudbroker/compute
|
||||
- Add VFNIC as possible NetType value in Interfaces field in model CreateRequest in cloudapi/kvmx86 and cloudbroker/kvmx86
|
||||
- Add VFNIC as possible NetType value in model NetAttachRequest in cloudapi/compute and cloudbroker/compute
|
||||
- Add WithoutBootDisk field to models CreateRequest, CreateBlankRequest, MassCreateRequest in cloudapi/kvmx86 and cloudbroker/kvmx86
|
||||
- Set optional fields BootDisk, SEPID, Pool in model CreateBlankRequest in cloudapi/kvmx86 and cloudbroker/kvmx86
|
||||
- Set optional field ImageID in model CreateRequest in cloudapi/kvmx86 and cloudbroker/kvmx86
|
||||
- Add field VNFDevID in models ListRequest (cloudbrocker/vins/list) and ListDeletedRequest (cloudapi/vins/list_deleted)
|
||||
- Add new endpoints /cloudbroker/disks/present and /cloudbroker/disks/depresent
|
||||
- Add field AuditID in model ListRequest (cloudbrocker/tasks/list, cloudapi/tasks/list)
|
||||
- Add field ClientIDs in model ListRequest (cloudbrocker/flipgroup/list, cloudapi/flipgroup/list)
|
||||
- Add field Depresent in model StopRequest (cloudbrocker/compute/stop)
|
||||
- Add new endpoint /cloudbroker/image/uploadImageFile
|
||||
|
||||
### Bugfix
|
||||
|
||||
- Change the return value of the method ReplicationStatus from interface to string in cloudapi/disks and cloudbroker/disks
|
||||
- Fix type field Replication in models ItemComputeDisk (cloudapi/compute), ItemDisk (cloudapi/disks, cloudbroker/disks), RecordDisk (cloudapi/disks), InfoDisk (cloudbroker/compute). Add type ItemReplication in models cloudapi/disks, cloudbroker/disks, cloudapi/compute, cloudbroker/compute
|
||||
- Rename field Async to AsyncMode in cloudapi/compute, cloudbroker/compute, cloudbroker/backup
|
||||
- Fix url tags in fields UpdateTimeAt and UpdateTimeTo in models ListRequest (cloudapi/tasks/list, cloudbroker/tasks/list)
|
||||
- Fix type field Completed in models ListRequest (cloudapi/tasks/list, cloudbroker/tasks/list)
|
||||
- Fix type field Shared in models ListRequest (cloudapi/disk/list, cloudbroker/disk/list)
|
||||
- Fix type field Shared in models ListDeletedRequest (cloudapi/disk/list_deleted, cloudbroker/disk/list_deleted)
|
||||
- Fix type field Public, HotResize, Bootable in models ListRequest (cloudapi/image/list, cloudbroker/image/list)
|
||||
- Fix type field Active, ServiceAccount in model ListRequest (cloudbroker/user/list)
|
||||
- Change required type and correct description in field ImageID in model MassCreateRequest (cloudbroker/kvmx86/mass_create)
|
||||
- Delete field AccountID in model ListLBRequest (cloudbroker/rg/listLB, cloudapi/rg/listLB)
|
||||
- Add universal client for connections
|
||||
135
README.md
135
README.md
@@ -69,6 +69,13 @@ Decort SDK - это библиотека, написанная на языке G
|
||||
- [Пример выполнения запроса](#пример-выполнения-запроса-2)
|
||||
- [Пример валидации запросов, имеющих в своей структуре поле RAM (или MasterRam/WorkerRAM)](#пример-валидации-запросов-имеющих-в-своей-структуре-поле-ram-или-masterramworkerram)
|
||||
- [Пример выполнения запроса](#пример-выполнения-запроса-3)
|
||||
- [Работа с универсальным клиентом](#работа-с-универсальным-клиентом)
|
||||
- [Настройка конфигурации универсального клиента](#настройка-конфигурации-универсального-клиента)
|
||||
- [Пример конфигурации универсального клиента](#пример-конфигурации-универсального-клиента)
|
||||
- [Парсинг универсальной конфигурации из файла](#парсинг-универсальной-конфигурации-из-файла)
|
||||
- [Создание универсального клиента](#создание-универсального-клиента)
|
||||
- [Пример создания универсального клиента](#пример-создания-универсального-клиента)
|
||||
- [Пример выполнения запроса](#пример-выполнения-запроса-4)
|
||||
|
||||
## Установка
|
||||
|
||||
@@ -166,7 +173,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
|
||||
| SSLSkipVerify | bool | Нет | Пропуск проверки подлинности сертификата |
|
||||
| Token | string | Нет | JWT токен |
|
||||
|
||||
#### Пример конфигурации клиента
|
||||
##### Пример конфигурации клиента
|
||||
|
||||
```go
|
||||
import (
|
||||
@@ -1455,4 +1462,130 @@ func main() {
|
||||
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)
|
||||
}
|
||||
```
|
||||
|
||||
#### Пример выполнения запроса
|
||||
|
||||
```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,
|
||||
}
|
||||
|
||||
legacyCfg.SetTimeout(5 * time.Minute)
|
||||
|
||||
cfg := config.UniversalConfig{
|
||||
LegacyConfig: &legacyCfg,
|
||||
}
|
||||
|
||||
// Создание клиента
|
||||
universalClient := decort.NewUniversal(cfg)
|
||||
|
||||
// Создание структуры запроса
|
||||
// CreateRequest - реквест на создание виртуальной машины
|
||||
req := kvmx86.CreateRequest{
|
||||
RGID: 123,
|
||||
Name: "compute",
|
||||
CPU: 4,
|
||||
RAM: 4096,
|
||||
ImageID: 321,
|
||||
}
|
||||
|
||||
// Выполнение запроса
|
||||
res, err := universalClient.CloudAPI().KVMX86().Create(context.Background(), req)
|
||||
if err != nil {
|
||||
log.Fatal(err)
|
||||
}
|
||||
|
||||
fmt.Println(res)
|
||||
}
|
||||
```
|
||||
@@ -54,7 +54,7 @@ func New(cfg config.Config) *DecortClient {
|
||||
},
|
||||
},
|
||||
},
|
||||
cfg: cfg,
|
||||
cfg: trimConfig(&cfg),
|
||||
expiryTime: expiryTime,
|
||||
mutex: &sync.Mutex{},
|
||||
}
|
||||
@@ -369,3 +369,9 @@ func valueToString(a any) string {
|
||||
func trimString(el reflect.StructField) string {
|
||||
return strings.TrimSuffix(el.Tag.Get("url"), ",omitempty")
|
||||
}
|
||||
|
||||
func trimConfig(cfg *config.Config) config.Config {
|
||||
cfg.SSOURL = strings.TrimSuffix(cfg.SSOURL, "/")
|
||||
cfg.DecortURL = strings.TrimSuffix(cfg.DecortURL, "/")
|
||||
return *cfg
|
||||
}
|
||||
|
||||
@@ -54,7 +54,7 @@ func NewBVS(cfg config.BVSConfig) *BVSDecortClient {
|
||||
},
|
||||
},
|
||||
},
|
||||
cfg: cfg,
|
||||
cfg: trimBVSConfig(&cfg),
|
||||
mutex: &sync.Mutex{},
|
||||
}
|
||||
}
|
||||
@@ -387,3 +387,9 @@ func (bdc *BVSDecortClient) do(req *http.Request, ctype string) ([]byte, error)
|
||||
err = fmt.Errorf("%s", respBytes)
|
||||
return nil, fmt.Errorf("could not execute request: %w", err)
|
||||
}
|
||||
|
||||
func trimBVSConfig(cfg *config.BVSConfig) config.BVSConfig {
|
||||
cfg.SSOURL = strings.TrimSuffix(cfg.SSOURL, "/")
|
||||
cfg.DecortURL = strings.TrimSuffix(cfg.DecortURL, "/")
|
||||
return *cfg
|
||||
}
|
||||
|
||||
8
config/universal-config.go
Normal file
8
config/universal-config.go
Normal file
@@ -0,0 +1,8 @@
|
||||
package config
|
||||
|
||||
// UniversalConfig combines configurations for different types of clients
|
||||
type UniversalConfig struct {
|
||||
Decs3oConfig *Config `json:"decs3oConfig,omitempty" yaml:"decs3oConfig,omitempty"`
|
||||
BVSConfig *BVSConfig `json:"bvsConfig,omitempty" yaml:"bvsConfig,omitempty"`
|
||||
LegacyConfig *LegacyConfig `json:"legacyConfig,omitempty" yaml:"legacyConfig,omitempty"`
|
||||
}
|
||||
@@ -50,7 +50,7 @@ func NewLegacy(cfg config.LegacyConfig) *LegacyDecortClient {
|
||||
},
|
||||
},
|
||||
},
|
||||
cfg: cfg,
|
||||
cfg: trimLegacyConfig(&cfg),
|
||||
expiryTime: expiryTime,
|
||||
mutex: &sync.Mutex{},
|
||||
}
|
||||
@@ -241,3 +241,8 @@ func (ldc *LegacyDecortClient) do(req *http.Request, ctype string) ([]byte, erro
|
||||
err = fmt.Errorf("%s", respBytes)
|
||||
return nil, fmt.Errorf("could not execute request: %w", err)
|
||||
}
|
||||
|
||||
func trimLegacyConfig(cfg *config.LegacyConfig) config.LegacyConfig {
|
||||
cfg.DecortURL = strings.TrimSuffix(cfg.DecortURL, "/")
|
||||
return *cfg
|
||||
}
|
||||
|
||||
37
universal-client.go
Normal file
37
universal-client.go
Normal file
@@ -0,0 +1,37 @@
|
||||
package decortsdk
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"reflect"
|
||||
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi"
|
||||
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker"
|
||||
)
|
||||
|
||||
type ClientInterface interface {
|
||||
CloudAPI() *cloudapi.CloudAPI
|
||||
CloudBroker() *cloudbroker.CloudBroker
|
||||
}
|
||||
|
||||
func NewUniversal(cfg config.UniversalConfig) (ClientInterface, error) {
|
||||
countConfigs := 0
|
||||
var client ClientInterface
|
||||
|
||||
switch {
|
||||
case cfg.Decs3oConfig != nil && reflect.TypeOf(*cfg.Decs3oConfig) == reflect.TypeOf(config.Config{}):
|
||||
client = New(*cfg.Decs3oConfig)
|
||||
countConfigs++
|
||||
case cfg.BVSConfig != nil && reflect.TypeOf(*cfg.BVSConfig) == reflect.TypeOf(config.BVSConfig{}):
|
||||
client = NewBVS(*cfg.BVSConfig)
|
||||
countConfigs++
|
||||
case cfg.LegacyConfig != nil && reflect.TypeOf(*cfg.LegacyConfig) == reflect.TypeOf(config.LegacyConfig{}):
|
||||
client = NewLegacy(*cfg.LegacyConfig)
|
||||
countConfigs++
|
||||
}
|
||||
if countConfigs != 1 {
|
||||
return nil, fmt.Errorf("only 1 config can be used at a time")
|
||||
}
|
||||
|
||||
return client, nil
|
||||
}
|
||||
Reference in New Issue
Block a user