Compare commits

...

12 Commits

Author SHA1 Message Date
dayterr
c2c810504d v1.14.1 2026-02-27 17:02:27 +03:00
dayterr
b834e5d074 v1.14.0 2026-02-20 17:08:59 +03:00
e1f0d354af v1.13.8 2026-02-11 12:22:01 +03:00
dayterr
d149ba19fd v1.13.7 2026-02-06 17:14:17 +03:00
c17b6f2336 v1.13.6 2026-01-30 16:47:43 +03:00
dayterr
b1fbd6872d v1.13.5 2026-01-26 11:21:34 +03:00
asteam
365a4991d2 v1.13.4 2026-01-16 16:52:26 +03:00
bb90a2d511 v1.13.3 2025-12-29 14:16:28 +03:00
dayterr
f111bf25fc v1.13.2 2025-12-23 17:39:58 +03:00
dayterr
055b256d6b v1.13.1 2025-12-16 14:22:57 +03:00
asteam
f0dee6360a v1.13.0 2025-12-08 16:16:35 +03:00
a267d35ddf v1.12.10 2025-11-18 14:42:39 +03:00
185 changed files with 1820 additions and 1633 deletions

View File

@@ -1,73 +1,70 @@
## Version 1.12.9 ## Version 1.14.1
Методы `Audits` в cloudapi/compute, cloudbroker/compute, cloudapi/account, cloudbroker/account, cloudapi/vins, cloudbroker/vins, cloudapi/rg и cloudbroker/rg стали deprecated и в следующих версиях будут удалены, вместо них необходимо использовать метод `List` в cloudapi/audit и cloudbroker/audit с соответствующими фильтрами Методы `Audits` в cloudapi/compute, cloudbroker/compute, cloudapi/account, cloudbroker/account, cloudapi/vins, cloudbroker/vins, cloudapi/rg и cloudbroker/rg стали deprecated и в следующих версиях будут удалены, вместо них необходимо использовать метод `List` в cloudapi/audit и cloudbroker/audit с соответствующими фильтрами
Метод `ListStacks` в cloudbroker/image стал deprecated и в следующих версиях будет удалён
Методы `AccessGrant`, `AccessGrantToPool`, `AccessRevoke`, `AccessRevokeToPool` в cloudbroker/sep стали deprecated и в следующих версиях будут удалены Методы `AccessGrant`, `AccessGrantToPool`, `AccessRevoke`, `AccessRevokeToPool` в cloudbroker/sep стали deprecated и в следующих версиях будут удалены
Методы `ComputeCISet`, `ComputeCIUnset`, `GetAudits` в cloudbroker/compute и `GetAudits` в cloudapi/compute стали deprecated и будут удалены в следующих версиях
Методы `ComputeCISet`, `ComputeCIUnset` в cloudbroker/image стали deprecated и будут удалены в следующих версиях
Все методы группы `.SDN()` находятся в альфа-версии. Все методы группы `.SDN()` находятся в альфа-версии.
### Добавлено ### Добавлено
#### address pool #### account
| Идентификатор<br>задачи | Описание | | Идентификатор<br>задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-515 | Группа методов address pool в sdn | | BGOS-780 | Вычисляемое поле `DeletedBy` в структуру ответа `ItemAccount` в cloudapi/account |
#### compute #### compute
| Идентификатор<br>задачи | Описание | | Идентификатор<br>задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-650 | Поля `BusNumber`, `EnableSecGroups`, `LibvirtSettings`, `MTU`, `NodeID`, `SDNInterfaceID`, `SecurityGroups`, `TrunkTags` в структуру ответа `RecordNetAttach` в compute/cloudapi и compute/cloudbroker | | BGOS-777 | Структура ответа `RecordCloneAbort` в cloudbroker/compute |
| BGOS-774 | Опциональное поле `Weight` в структуру запроса `UpdateRequest` в cloudbroker/compute |
#### default security policies | BGOS-774 | Вычисляемое поле `Weight` в структуры ответа `InfoCompute` и `RecordCompute` в cloudbroker/compute и в структуры ответа `RecordCompute` и `ItemCompute` в cloudapi/compute |
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-516 | Группа методов default security policies в sdn |
#### image
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-648 | Поле `ToClean` в структурах ответа `RecordImage` в cloudapi/image и `RecordImage`, `ItemImage` cloudbroker/image |
#### network object groups
| Идентификатор<br>задачи | Описание |
| --- | --- |
| Идентификатор<br>задачи | Описание |
| BGOS-520 | Группа методов network object groups в sdn |
#### logical ports
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-519 | Группа методов logical ports в sdn |
#### security policies
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-521 | Группа методов security policies в sdn |
#### sdn external networks
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-517 | Группа методов external networks в sdn |
#### sdn floating ips
| Идентификатор<br>задачи | Описание |
|--- | --- |
| BGOS-594 | Группа методов floating ips в sdn |
#### sdn routers
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-524 | Группа методов external routers в sdn |
#### sdn segments
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-523 | Группа методов segments в sdn |
### Исправлено
#### kvmx86 #### kvmx86
| Идентификатор<br>задачи | Описание | | Идентификатор<br>задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-652 | Структура `Interface` заменена на `InterfaceMassCreate` в структуре `MassCreateRequest` в cloudbroker/kvmx86 | | BGOS-775 | Опциональное поле `Weight` в структуры запроса `CreateRequest`, `CreateBlankRequest` и `MassCreateRequest` в cloudbroker/kvmx86 |
#### rg
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-776 | Вычисляемое поле `Email` в структуры ответа `ItemACL` в cloudapi/rg и в `ACL` в cloudbroker/rg |
| BGOS-779 | Опциональные поля `RGID` и `ComputeID` в структуру запроса `ListRequest` в cloudapi/rg и в cloudbroker/rg |
#### stpolicy
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-784 | Вычисляемое поле `Usage` в структуру ответа `InfoStoragePolicyWithID` в cloudbroker/stpolicy |
### Изменено
#### compute
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-777 | Тип возвращаемого значения метода `CloneAbort` с `bool` на `[]RecordCloneAbort` в cloudbroker/compute |
### Удалено
#### compute
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-781 | Опциональное поле `DiskType` из структур `DiskAddRequest` и `DiskAttachRequest` в cloudapi/compute и в cloudbroker/compute |
| BGOS-785 | Вычисляемое поле `Type` из структур `ItemDisk`, `RecordDisk` и `ItemDiskUnattached` в cloudapi/compute и из структуры `InfoDisk` в cloudbroker/compute |
#### disks
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-781 | Структура запросов `ListTypesRequest`, структура ответов `ListTypes`, метод `ListTypes` в cloudapi/disks и в cloudbroker/disks |
| BGOS-781 | Опциональное поле `Type` из структур `ListRequest`, `ListDeletedRequest` и `ListUnattachedRequest` в cloudapi/disks и в cloudbroker/disks |
#### kvmx86
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-773 | Опциональные поля `IS` и `IPAType` из структур запроса `CreateRequest` в cloudapi/kvmx86 и в cloudbroker/kvmx86 |
#### stpolicy
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-784 | Вычисляемое поле `StoragePolicyID` из структуры ответа `InfoStoragePolicyWithID` в cloudbroker/stpolicy |

View File

@@ -17,6 +17,8 @@ Decort SDK - это библиотека, написанная на языке G
- Версия 1.10.х Decort-SDK соответствует 4.2.0 версии платформы - Версия 1.10.х Decort-SDK соответствует 4.2.0 версии платформы
- Версия 1.11.х Decort-SDK соответствует 4.3.0 версии платформы - Версия 1.11.х Decort-SDK соответствует 4.3.0 версии платформы
- Версия 1.12.х Decort-SDK соответствует 4.4.0 версии платформы - Версия 1.12.х Decort-SDK соответствует 4.4.0 версии платформы
- Версия 1.13.х Decort-SDK соответствует 4.5.0 версии платформы
- Версия 1.14.х Decort-SDK соответствует 4.6.0 версии платформы
## Оглавление ## Оглавление
@@ -83,6 +85,8 @@ Decort SDK - это библиотека, написанная на языке G
- [Пример выполнения запроса](#пример-выполнения-запроса-4) - [Пример выполнения запроса](#пример-выполнения-запроса-4)
- [Проверка соответствия версии платформы и версии dynamix](#проверка-соответствия-версии-платформы-и-версии-dynamix) - [Проверка соответствия версии платформы и версии dynamix](#проверка-соответствия-версии-платформы-и-версии-dynamix)
- [Пример выполнения запроса](#пример-выполнения-запроса-5) - [Пример выполнения запроса](#пример-выполнения-запроса-5)
- [Создание mock клиента](#создание-mock-клиента)
- [Пример создания mock клиента](#пример-создания-mock-клиента)
## Установка ## Установка
@@ -123,7 +127,6 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `RG` - управление ресурсными группами аккаунта; - `RG` - управление ресурсными группами аккаунта;
- `Security group` управление группами безопасности; - `Security group` управление группами безопасности;
- `SEP` - управление storage endpoint (sep); - `SEP` - управление storage endpoint (sep);
- `Stack` - получение информации о вычислительных узлах;
- `Storage policy` получение информации о политиках хранения; - `Storage policy` получение информации о политиках хранения;
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера); - `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
- `Trunk` - получение информации о транковых портах; - `Trunk` - получение информации о транковых портах;
@@ -160,7 +163,6 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `RG` - управление ресурсными группами аккаунта; - `RG` - управление ресурсными группами аккаунта;
- `Security group` управление группами безопасности; - `Security group` управление группами безопасности;
- `SEP` - управление storage endpoint (sep); - `SEP` - управление storage endpoint (sep);
- `Stack` - получение информации о вычислительных узлах;
- `Storage policy` управление политиками хранения; - `Storage policy` управление политиками хранения;
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера); - `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
- `Trunk` - управление транковыми портами; - `Trunk` - управление транковыми портами;
@@ -335,7 +337,6 @@ func main() {
- `pkg/cloudapi/rg` - для `RG` - `pkg/cloudapi/rg` - для `RG`
- `pkg/cloudapi/secgroup` - для `Security group` - `pkg/cloudapi/secgroup` - для `Security group`
- `pkg/cloudapi/sep` - для `SEP` - `pkg/cloudapi/sep` - для `SEP`
- `pkg/cloudapi/stack` - для `Stack`
- `pkg/cloudapi/stpolicy` - для `Storage policy` - `pkg/cloudapi/stpolicy` - для `Storage policy`
- `pkg/cloudapi/tasks` - для `Tasks` - `pkg/cloudapi/tasks` - для `Tasks`
- `pkg/cloudapi/trunk` - для `Trunk` - `pkg/cloudapi/trunk` - для `Trunk`
@@ -367,7 +368,6 @@ func main() {
- `pkg/cloudbroker/rg` - для `RG` - `pkg/cloudbroker/rg` - для `RG`
- `pkg/cloudbroker/secgroup` - для `Security group` - `pkg/cloudbroker/secgroup` - для `Security group`
- `pkg/cloudbroker/sep` - для `SEP` - `pkg/cloudbroker/sep` - для `SEP`
- `pkg/cloudbroker/stack` - для `Stack`
- `pkg/cloudbroker/stpolicy` - для `Storage policy` - `pkg/cloudbroker/stpolicy` - для `Storage policy`
- `pkg/cloudbroker/tasks` - для `Tasks` - `pkg/cloudbroker/tasks` - для `Tasks`
- `pkg/cloudbroker/trunk` - для `Trunk` - `pkg/cloudbroker/trunk` - для `Trunk`
@@ -464,19 +464,9 @@ type CreateRequest struct {
// Required: false // Required: false
Start bool `url:"start,omitempty" json:"start,omitempty"` Start bool `url:"start,omitempty" json:"start,omitempty"`
// Stack ID // Node ID
// Required: false // Required: false
StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` NodeID uint64 `url:"nodeId,omitempty" json:"nodeId,omitempty"`
// System name
// Required: false
IS string `url:"IS,omitempty" json:"IS,omitempty"`
// Compute purpose
// Required: false
IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"`
} }
``` ```
@@ -543,7 +533,6 @@ func main() {
- `.RG()` - для работы с `RG` - `.RG()` - для работы с `RG`
- `.SecurityGroup()` - для работы с `Security Group` - `.SecurityGroup()` - для работы с `Security Group`
- `.SEP()` - для работы с `SEP` - `.SEP()` - для работы с `SEP`
- `.Stack()` - для работы с `Stack`
- `.StPolicy()` - для работы с `Storage Policy` - `.StPolicy()` - для работы с `Storage Policy`
- `.Tasks()` - для работы с `Tasks` - `.Tasks()` - для работы с `Tasks`
- `.Trunk()` - для работы с `Trunk` - `.Trunk()` - для работы с `Trunk`
@@ -577,7 +566,6 @@ func main() {
- `.RG()` - для работы с `RG` - `.RG()` - для работы с `RG`
- `.SecurityGroup()` - для работы с `Security Group` - `.SecurityGroup()` - для работы с `Security Group`
- `.SEP()` - для работы с `SEP` - `.SEP()` - для работы с `SEP`
- `.Stack()` - для работы с `Stack`
- `.StPolicy()` - для работы с `Storage Policy` - `.StPolicy()` - для работы с `Storage Policy`
- `.Tasks()` - для работы с `Tasks` - `.Tasks()` - для работы с `Tasks`
- `.Trunk()` - для работы с `Trunk` - `.Trunk()` - для работы с `Trunk`
@@ -1710,3 +1698,34 @@ func main(){
checkInfo, err := client.Check() checkInfo, err := client.Check()
} }
``` ```
# Создание mock клиента
Создание клиента происходит с помощью функции-строителя `NewMockDecortClient` из основного пакета `decort-sdk`. Функция принимает mock реализацию интерфейса interfaces.Calller, возвращает структуру `MockDecortClient`, с помощью которой можно производить unit тестирование API Decort SDK без подключения к серверу
#### Пример создания mock клиента
```go
package unit_test
import (
"testing"
"go.uber.org/mock/gomock"
decortsdk "repository.basistech.ru/BASIS/decort-golang-sdk"
)
// Пример юнит тестирования на моках
func TestClient(t *testing.T) {
ctrl := gomock.NewController(t)
// Создаем mock интерфейса Caller
mockCaller := decortsdk.NewMockCaller(ctrl)
// Создаем mock интерфейса DecortClient
mockClient := decortsdk.NewMockDecortClient(mockCaller)
// ....
}
```
Пример юнит теста можно посмотреть в файле [samples/client/client_test.go](samples/client/client_test.go)
При редактировании интерфеса interface.Caller необходимо перегенерировать Mock :
``` shell
make gen-mock
```

32
client_mock.go Normal file
View File

@@ -0,0 +1,32 @@
package decortsdk
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/sdn"
)
type MockDecortClient struct {
apiCaller *MockCaller
}
func NewMockDecortClient(apiCaller *MockCaller) ClientInterface {
return &MockDecortClient{
apiCaller: apiCaller,
}
}
// CloudAPI builder
func (mdc *MockDecortClient) CloudAPI() *cloudapi.CloudAPI {
return cloudapi.New(mdc.apiCaller)
}
// CloudBroker builder
func (mdc *MockDecortClient) CloudBroker() *cloudbroker.CloudBroker {
return cloudbroker.New(mdc.apiCaller)
}
// SDN builder
func (mdc *MockDecortClient) SDN() *sdn.SDN {
return sdn.New(mdc.apiCaller)
}

86
client_mock_gen.go Normal file
View File

@@ -0,0 +1,86 @@
// Code generated by MockGen. DO NOT EDIT.
// Source: interfaces/caller.go
//
// Generated by this command:
//
// mockgen -package decortsdk -source interfaces/caller.go
//
// Package decortsdk is a generated GoMock package.
package decortsdk
import (
context "context"
reflect "reflect"
gomock "go.uber.org/mock/gomock"
)
// MockCaller is a mock of Caller interface.
type MockCaller struct {
ctrl *gomock.Controller
recorder *MockCallerMockRecorder
isgomock struct{}
}
// MockCallerMockRecorder is the mock recorder for MockCaller.
type MockCallerMockRecorder struct {
mock *MockCaller
}
// NewMockCaller creates a new mock instance.
func NewMockCaller(ctrl *gomock.Controller) *MockCaller {
mock := &MockCaller{ctrl: ctrl}
mock.recorder = &MockCallerMockRecorder{mock}
return mock
}
// EXPECT returns an object that allows the caller to indicate expected use.
func (m *MockCaller) EXPECT() *MockCallerMockRecorder {
return m.recorder
}
// DecortApiCall mocks base method.
func (m *MockCaller) DecortApiCall(ctx context.Context, method, url string, params any) ([]byte, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DecortApiCall", ctx, method, url, params)
ret0, _ := ret[0].([]byte)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// DecortApiCall indicates an expected call of DecortApiCall.
func (mr *MockCallerMockRecorder) DecortApiCall(ctx, method, url, params any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DecortApiCall", reflect.TypeOf((*MockCaller)(nil).DecortApiCall), ctx, method, url, params)
}
// DecortApiCallCtype mocks base method.
func (m *MockCaller) DecortApiCallCtype(ctx context.Context, method, url, ctype string, params any) ([]byte, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DecortApiCallCtype", ctx, method, url, ctype, params)
ret0, _ := ret[0].([]byte)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// DecortApiCallCtype indicates an expected call of DecortApiCallCtype.
func (mr *MockCallerMockRecorder) DecortApiCallCtype(ctx, method, url, ctype, params any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DecortApiCallCtype", reflect.TypeOf((*MockCaller)(nil).DecortApiCallCtype), ctx, method, url, ctype, params)
}
// DecortApiCallMP mocks base method.
func (m *MockCaller) DecortApiCallMP(ctx context.Context, method, url string, params any) ([]byte, error) {
m.ctrl.T.Helper()
ret := m.ctrl.Call(m, "DecortApiCallMP", ctx, method, url, params)
ret0, _ := ret[0].([]byte)
ret1, _ := ret[1].(error)
return ret0, ret1
}
// DecortApiCallMP indicates an expected call of DecortApiCallMP.
func (mr *MockCallerMockRecorder) DecortApiCallMP(ctx, method, url, params any) *gomock.Call {
mr.mock.ctrl.T.Helper()
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "DecortApiCallMP", reflect.TypeOf((*MockCaller)(nil).DecortApiCallMP), ctx, method, url, params)
}

4
go.mod
View File

@@ -6,15 +6,19 @@ require (
github.com/go-playground/validator/v10 v10.28.0 github.com/go-playground/validator/v10 v10.28.0
github.com/google/go-querystring v1.1.0 github.com/google/go-querystring v1.1.0
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1
github.com/stretchr/testify v1.9.0
go.uber.org/mock v0.6.0
gopkg.in/yaml.v3 v3.0.1 gopkg.in/yaml.v3 v3.0.1
) )
require ( require (
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/gabriel-vasile/mimetype v1.4.10 // indirect github.com/gabriel-vasile/mimetype v1.4.10 // indirect
github.com/go-playground/locales v0.14.1 // indirect github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/google/go-cmp v0.5.9 // indirect github.com/google/go-cmp v0.5.9 // indirect
github.com/leodido/go-urn v1.4.0 // indirect github.com/leodido/go-urn v1.4.0 // indirect
github.com/pmezard/go-difflib v1.0.0 // indirect
golang.org/x/crypto v0.42.0 // indirect golang.org/x/crypto v0.42.0 // indirect
golang.org/x/sys v0.36.0 // indirect golang.org/x/sys v0.36.0 // indirect
golang.org/x/text v0.29.0 // indirect golang.org/x/text v0.29.0 // indirect

32
go.sum
View File

@@ -1,16 +1,13 @@
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0= github.com/gabriel-vasile/mimetype v1.4.10 h1:zyueNbySn/z8mJZHLt6IPw0KoZsiQNszIpU+bX4+ZK0=
github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s= github.com/gabriel-vasile/mimetype v1.4.10/go.mod h1:d+9Oxyo1wTzWdyVUPMmXFvp4F9tea18J8ufA774AB3s=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.11.2 h1:q3SHpufmypg+erIExEKUmsgmhDTyhcJ38oeKGACXohU=
github.com/go-playground/validator/v10 v10.11.2/go.mod h1:NieE624vt4SCTJtD87arVLvdmjPAeV8BQlHtMnw9D7s=
github.com/go-playground/validator/v10 v10.27.0/go.mod h1:I5QpIEbmr8On7W0TktmJAumgzX4CA1XNl4ZmDuVHKKo=
github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688= github.com/go-playground/validator/v10 v10.28.0 h1:Q7ibns33JjyW48gHkuFT91qX48KG0ktULL6FgHdG688=
github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU= github.com/go-playground/validator/v10 v10.28.0/go.mod h1:GoI6I1SjPBh9p7ykNE/yj3fFYbyDOpwMn5KXd+m2hUU=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
@@ -20,37 +17,22 @@ github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.1 h1:BqpAaACuzVSgi/VLzGZIobT2z4v53pjosyNd9Yv6n/w=
github.com/leodido/go-urn v1.2.1/go.mod h1:zt4jvISO2HfUBqxjfIshjdMTYS56ZS/qv49ictyFfxY=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ= github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI= github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/rogpeppe/go-internal v1.8.0 h1:FCbCCtXNOY3UtUuHUYaghJg4y7Fd14rXifAYUAtL9R8= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= go.uber.org/mock v0.6.0 h1:hyF9dfmbgIX5EfOdasqLsWD6xqpNZlXblLB/Dbnwv3Y=
github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= go.uber.org/mock v0.6.0/go.mod h1:KiVJ4BqZJaMj4svdfmHM0AUx4NJYO8ZNpPnZn1Z+BBU=
golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA=
golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g=
golang.org/x/crypto v0.33.0/go.mod h1:bVdXmD7IV/4GdElGPozy6U7lWdRXA4qyRVGJV57uQ5M=
golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI= golang.org/x/crypto v0.42.0 h1:chiH31gIWm57EkTXpwnqf8qeuMUi0yekh6mT2AvFlqI=
golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8= golang.org/x/crypto v0.42.0/go.mod h1:4+rDnOTJhQCx2q7/j6rAN5XDw8kPjeaXEUR2eL94ix8=
golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q=
golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k= golang.org/x/sys v0.36.0 h1:KVRy2GtZBrk1cBYA7MKu5bEZFxQk4NIDV6RLVcC8o0k=
golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.36.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
golang.org/x/text v0.22.0/go.mod h1:YRoo4H8PVmsu+E3Ou7cqLVH8oXWIHVoX0jqUWALQhfY=
golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk=
golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

View File

@@ -28,6 +28,8 @@ var FileName = map[string]string{
var K8sValues = []string{"labels", "taints", "annotations, additionalSANs"} var K8sValues = []string{"labels", "taints", "annotations, additionalSANs"}
var VersionMap = map[string]string{ var VersionMap = map[string]string{
"4.6.0": "-",
"4.5.0": "-",
"4.4.0": "-", "4.4.0": "-",
"4.3.0": "-", "4.3.0": "-",
"4.2.0": "-", "4.2.0": "-",

View File

@@ -86,13 +86,6 @@ func computeModeValidator(fe validator.FieldLevel) bool {
return IsInSlice(fieldValue, computeModeValues) return IsInSlice(fieldValue, computeModeValues)
} }
// computeDiskTypeValidator is used to validate DiskType field.
func computeDiskTypeValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
return IsInSlice(fieldValue, computeDiskTypeValues)
}
// computeNetTypeValidator is used to validate NetType field. // computeNetTypeValidator is used to validate NetType field.
func computeNetTypeValidator(fe validator.FieldLevel) bool { func computeNetTypeValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String() fieldValue := fe.Field().String()
@@ -151,13 +144,6 @@ func computeDataDisksValidator(fe validator.FieldLevel) bool {
return IsInSlice(fieldValue, computeDataDisksValues) return IsInSlice(fieldValue, computeDataDisksValues)
} }
// diskTypeValidator is used to validate Type field.
func diskTypeValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
return IsInSlice(fieldValue, diskTypeValues)
}
// flipgroupClientTypeValidator is used to validate ClientType field. // flipgroupClientTypeValidator is used to validate ClientType field.
func flipgroupClientTypeValidator(fe validator.FieldLevel) bool { func flipgroupClientTypeValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String() fieldValue := fe.Field().String()
@@ -471,3 +457,10 @@ func addressPoolNetTypeValidator(fe validator.FieldLevel) bool {
return IsInSlice(fieldValue, addressPoolNetTypeValues) return IsInSlice(fieldValue, addressPoolNetTypeValues)
} }
// sepTechStatusValidator is used to validate SepTechStatus fields
func sepTechStatusValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
return IsInSlice(fieldValue, sepTechStatusValues)
}

View File

@@ -86,12 +86,6 @@ func errorMessage(fe validator.FieldError) string {
fe.Field(), fe.Field(),
joinValues(computeModeValues)) joinValues(computeModeValues))
case "computeDiskType":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(computeDiskTypeValues))
case "mtu": case "mtu":
return fmt.Sprint(prefix, fe.Field(), "must be ", mtuMin, "-", mtuMax) return fmt.Sprint(prefix, fe.Field(), "must be ", mtuMin, "-", mtuMax)
@@ -122,13 +116,6 @@ func errorMessage(fe validator.FieldError) string {
fe.Field(), fe.Field(),
joinValues(computeDataDisksValues)) joinValues(computeDataDisksValues))
// Disk Validators
case "diskType":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(diskTypeValues))
// Flipgroup Validators // Flipgroup Validators
case "flipgroupClientType": case "flipgroupClientType":
return fmt.Sprintf("%s %s must be one of the following: %s", return fmt.Sprintf("%s %s must be one of the following: %s",
@@ -366,6 +353,12 @@ func errorMessage(fe validator.FieldError) string {
prefix, prefix,
fe.Field(), fe.Field(),
joinValues(ipTypeValues)) joinValues(ipTypeValues))
case "sepTechStatus":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(sepTechStatusValues))
} }
return fe.Error() return fe.Error()

View File

@@ -86,11 +86,6 @@ func registerAllValidators(validate *validator.Validate) error {
return err return err
} }
err = validate.RegisterValidation("computeDiskType", computeDiskTypeValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("computeNetType", computeNetTypeValidator) err = validate.RegisterValidation("computeNetType", computeNetTypeValidator)
if err != nil { if err != nil {
return err return err
@@ -111,11 +106,6 @@ func registerAllValidators(validate *validator.Validate) error {
return err return err
} }
err = validate.RegisterValidation("diskType", diskTypeValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("flipgroupClientType", flipgroupClientTypeValidator) err = validate.RegisterValidation("flipgroupClientType", flipgroupClientTypeValidator)
if err != nil { if err != nil {
return err return err
@@ -311,5 +301,10 @@ func registerAllValidators(validate *validator.Validate) error {
return err return err
} }
err = validate.RegisterValidation("sepTechStatus", sepTechStatusValidator)
if err != nil {
return err
}
return nil return nil
} }

View File

@@ -7,21 +7,18 @@ var (
resTypesValues = []string{"compute", "vins", "k8s", "openshift", "lb", "flipgroup"} resTypesValues = []string{"compute", "vins", "k8s", "openshift", "lb", "flipgroup"}
protoValues = []string{"tcp", "udp"} protoValues = []string{"tcp", "udp"}
accountCUTypeValues = []string{"CU_M", "CU_C", "CU_D", "CU_DM", "CU_S", "CU_A", "CU_NO", "CU_I", "CU_NP"} accountCUTypeValues = []string{"CU_M", "CU_C", "CU_D", "CU_DM", "CU_I", "gpu_units"}
bserviceModeValues = []string{"ABSOLUTE", "RELATIVE"} bserviceModeValues = []string{"ABSOLUTE", "RELATIVE"}
computeTopologyValues = []string{"compute", "node"} computeTopologyValues = []string{"compute", "node"}
computePolicyValues = []string{"RECOMMENDED", "REQUIRED"} computePolicyValues = []string{"RECOMMENDED", "REQUIRED"}
computeModeValues = []string{"EQ", "EN", "ANY"} computeModeValues = []string{"EQ", "EN", "ANY"}
computeDiskTypeValues = []string{"D", "B"}
computeNetTypeValues = []string{"EXTNET", "VINS"} computeNetTypeValues = []string{"EXTNET", "VINS"}
computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK", "SDN", "EMPTY", "TRUNK"} computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK", "SDN", "EMPTY", "TRUNK"}
computeOrderValues = []string{"cdrom", "network", "hd"} computeOrderValues = []string{"cdrom", "network", "hd"}
computeDataDisksValues = []string{"KEEP", "DETACH", "DESTROY"} computeDataDisksValues = []string{"KEEP", "DETACH", "DESTROY"}
diskTypeValues = []string{"B", "T", "D"}
flipgroupClientTypeValues = []string{"compute", "vins"} flipgroupClientTypeValues = []string{"compute", "vins"}
massCreateNetTypeValues = []string{"EXTNET", "VINS", "TRUNK"} massCreateNetTypeValues = []string{"EXTNET", "VINS", "TRUNK"}
@@ -66,7 +63,7 @@ var (
loaderTypeValues = []string{"linux", "windows", "unknown"} loaderTypeValues = []string{"linux", "windows", "unknown"}
sepTypeValues = []string{"hitachi", "dorado", "tatlin", "shared", "local", "des"} sepTypeValues = []string{"hitachi", "dorado", "tatlin", "shared", "local", "des", "ustor"}
languageValues = []string{"ru", "en"} languageValues = []string{"ru", "en"}
@@ -81,6 +78,8 @@ var (
addressPoolNetTypeValues = []string{"IPv4", "IPv6", "MAC"} addressPoolNetTypeValues = []string{"IPv4", "IPv6", "MAC"}
ipTypeValues = []string{"v4, v6"} ipTypeValues = []string{"v4, v6"}
sepTechStatusValues = []string{"ENABLED", "DISABLED"}
) )
const ( const (

View File

@@ -27,11 +27,8 @@ type GetConsumedCloudUnitsByTypeRequest struct {
// - CU_C: returns number of virtual cpu cores // - CU_C: returns number of virtual cpu cores
// - CU_D: returns consumed virtual disk storage in GB // - CU_D: returns consumed virtual disk storage in GB
// - CU_DM: returns consumed max virtual disk storage in GB // - CU_DM: returns consumed max virtual disk storage in GB
// - CU_S: returns consumed primary storage (NAS) in TB
// - CU_A: returns consumed secondary storage (Archive) in TB
// - CU_NO: returns sent/received network transfer in operator in GB
// - CU_NP: returns sent/received network transfer peering in GB
// - CU_I: returns number of public IPs // - CU_I: returns number of public IPs
// - gpu_units: return number of GPU units
func (a Account) GetConsumedCloudUnitsByType(ctx context.Context, req GetConsumedCloudUnitsByTypeRequest) (float64, error) { func (a Account) GetConsumedCloudUnitsByType(ctx context.Context, req GetConsumedCloudUnitsByTypeRequest) (float64, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {

View File

@@ -68,9 +68,6 @@ type ResourceLimits struct {
// RAM size, MB // RAM size, MB
CUM float64 `json:"CU_M"` CUM float64 `json:"CU_M"`
// Traffic volume, GB
CUNP float64 `json:"CU_NP"`
// Number of graphics cores // Number of graphics cores
GPUUnits float64 `json:"gpu_units"` GPUUnits float64 `json:"gpu_units"`
@@ -98,6 +95,9 @@ type ItemAccount struct {
// Deleted time // Deleted time
DeletedTime uint64 `json:"deletedTime"` DeletedTime uint64 `json:"deletedTime"`
// Deleted by
DeletedBy string `json:"deletedBy"`
// Description // Description
Description string `json:"desc"` Description string `json:"desc"`
@@ -150,9 +150,6 @@ type Resource struct {
// Number of External IPs // Number of External IPs
ExtIPs int64 `json:"extips"` ExtIPs int64 `json:"extips"`
// External traffic
ExtTraffic int64 `json:"exttraffic"`
// Number of grafic cores // Number of grafic cores
GPU int64 `json:"gpu"` GPU int64 `json:"gpu"`
@@ -305,6 +302,9 @@ type RecordAccount struct {
// UniqPools // UniqPools
UniqPools []interface{} `json:"uniqPools"` UniqPools []interface{} `json:"uniqPools"`
// Updated By
UpdatedBy string `json:"updatedBy"`
// Updated time // Updated time
UpdatedTime uint64 `json:"updatedTime"` UpdatedTime uint64 `json:"updatedTime"`
@@ -554,9 +554,6 @@ type LimitsRG struct {
// Number of External IPs // Number of External IPs
ExtIPs int64 `json:"extips"` ExtIPs int64 `json:"extips"`
// External traffic
ExtTraffic int64 `json:"exttraffic"`
// Number of grafic cores // Number of grafic cores
GPU int64 `json:"gpu"` GPU int64 `json:"gpu"`
@@ -565,6 +562,9 @@ type LimitsRG struct {
// SEPs // SEPs
SEPs uint64 `json:"seps"` SEPs uint64 `json:"seps"`
// Policies
Policies map[string]Policy `json:"policies"`
} }
// Main information about resource group // Main information about resource group

View File

@@ -34,10 +34,6 @@ type UpdateRequest struct {
// Required: false // Required: false
MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"` MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"`
// Max sent/received network transfer peering
// Required: false
MaxNetworkPeerTransfer int64 `url:"maxNetworkPeerTransfer,omitempty" json:"maxNetworkPeerTransfer,omitempty"`
// Max number of assigned public IPs // Max number of assigned public IPs
// Required: false // Required: false
MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"` MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"`

View File

@@ -38,10 +38,6 @@ type GroupAddRequest struct {
// Required: true // Required: true
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// Compute driver like a KVM_X86, etc.
// Required: true
Driver string `url:"driver" json:"driver" validate:"required"`
// Storage endpoint provider ID // Storage endpoint provider ID
// Required: false // Required: false
SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
@@ -71,6 +67,7 @@ type GroupAddRequest struct {
UserData string `url:"userData,omitempty" json:"userData,omitempty"` UserData string `url:"userData,omitempty" json:"userData,omitempty"`
// Chipset "i440fx" or "Q35 // Chipset "i440fx" or "Q35
// Default value : Q35
// Required: false // Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"chipset,omitempty"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"chipset,omitempty"`

View File

@@ -24,16 +24,16 @@ type GroupResizeRequest struct {
// Chipset for new computes, either i440fx or Q35 (i440fx by default) // Chipset for new computes, either i440fx or Q35 (i440fx by default)
// Available values : i440fx, Q35 // Available values : i440fx, Q35
//Default value : i440fx // Default value : Q35
//Required: true // Required: false
Chipset string `url:"chipset" json:"chipset" validate:"required,chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Either delta or absolute value of computes // Either delta or absolute value of computes
// Should be one of: // Should be one of:
// - ABSOLUTE // - ABSOLUTE
// - RELATIVE // - RELATIVE
// Required: true // Required: false
Mode string `url:"mode" json:"mode" validate:"bserviceMode"` Mode string `url:"mode,omitempty" json:"mode,omitempty" validate:"omitempty,bserviceMode"`
} }
// GroupResize resize the group by changing the number of computes // GroupResize resize the group by changing the number of computes

View File

@@ -119,8 +119,8 @@ type ItemCompute struct {
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`
// StackID // NodeID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"node_id"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`

View File

@@ -38,9 +38,8 @@ type AffinityRuleAddRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AffinityRuleAdd add affinity rule // AffinityRuleAdd add affinity rule

View File

@@ -38,9 +38,8 @@ type AffinityRuleRemoveRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AffinityRuleRemove remove affinity rule // AffinityRuleRemove remove affinity rule

View File

@@ -38,9 +38,8 @@ type AntiAffinityRuleAddRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AntiAffinityRuleAdd add anti affinity rule // AntiAffinityRuleAdd add anti affinity rule

View File

@@ -38,9 +38,8 @@ type AntiAffinityRuleRemoveRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AntiAffinityRuleRemove remove anti affinity rule // AntiAffinityRuleRemove remove anti affinity rule

View File

@@ -26,13 +26,6 @@ type DiskAddRequest struct {
// Required: true // Required: true
StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"` StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"`
// Type of the disk
// Should be one of:
// - D
// - B
// Required: false
DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"`
// Storage endpoint provider ID // Storage endpoint provider ID
// By default the same with boot disk // By default the same with boot disk
// Required: false // Required: false

View File

@@ -18,10 +18,6 @@ type DiskAttachRequest struct {
// Required: true // Required: true
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"` DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`
// Type of the disk B;D
// Required: false
DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"`
// Desired PCI slot (hex string, e.g. "0x1A") // Desired PCI slot (hex string, e.g. "0x1A")
// Required: false // Required: false
PCISlot string `url:"pci_slot,omitempty" json:"pci_slot,omitempty"` PCISlot string `url:"pci_slot,omitempty" json:"pci_slot,omitempty"`

View File

@@ -62,7 +62,7 @@ var computes = ListComputes{
MigrationJob: 0, MigrationJob: 0,
Milestones: 363500, Milestones: 363500,
Name: "test", Name: "test",
PinnedToStack: true, PinnedToNode: true,
RAM: 4096, RAM: 4096,
ReferenceID: "c7cb19ac-af4a-4067-852f-c5572949207e", ReferenceID: "c7cb19ac-af4a-4067-852f-c5572949207e",
Registered: true, Registered: true,
@@ -126,7 +126,7 @@ var computes = ListComputes{
RAM: 4096, RAM: 4096,
ReferenceID: "a542c449-5b1c-4f90-88c5-7bb5f8ae68ff", ReferenceID: "a542c449-5b1c-4f90-88c5-7bb5f8ae68ff",
Registered: true, Registered: true,
PinnedToStack: true, PinnedToNode: true,
ResName: "compute-48556", ResName: "compute-48556",
RGID: 79727, RGID: 79727,
RGName: "sdk_negative_fields_test", RGName: "sdk_negative_fields_test",

View File

@@ -476,8 +476,8 @@ type RecordCompute struct {
// List OS Users // List OS Users
OSUsers ListOSUser `json:"osUsers"` OSUsers ListOSUser `json:"osUsers"`
// Pinned to stack // Pinned to node
PinnedToStack bool `json:"pinnedToStack"` PinnedToNode bool `json:"pinnedToNode"`
// PreferredCPU // PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"` PreferredCPU []int64 `json:"preferredCpu"`
@@ -485,6 +485,9 @@ type RecordCompute struct {
// Qemu_quest // Qemu_quest
QemuQuest QemuQuest `json:"qemu_guest"` QemuQuest QemuQuest `json:"qemu_guest"`
// ReadOnly indicates read-only mode state
ReadOnly bool `json:"read_only"`
// Number of RAM // Number of RAM
RAM uint64 `json:"ram"` RAM uint64 `json:"ram"`
@@ -542,6 +545,9 @@ type RecordCompute struct {
// VNC password // VNC password
VNCPassword string `json:"vncPasswd"` VNCPassword string `json:"vncPasswd"`
// Weight
Weight uint64 `json:"weight"`
// Zone ID // Zone ID
// Required: false // Required: false
ZoneID uint64 `json:"zoneId"` ZoneID uint64 `json:"zoneId"`
@@ -786,12 +792,21 @@ type ItemComputeDisk struct {
// Account ID // Account ID
AccountID uint64 `json:"accountId"` AccountID uint64 `json:"accountId"`
// BLK Discard
BLKDiscard bool `json:"blkdiscard"`
// Block Size
BlockSize string `json:"block_size"`
// Boot partition // Boot partition
BootPartition uint64 `json:"bootPartition"` BootPartition uint64 `json:"bootPartition"`
// Bus number // Bus number
BusNumber uint64 `json:"bus_number"` BusNumber uint64 `json:"bus_number"`
// Chache
Cache string `json:"cache"`
// Created by // Created by
CreatedBy string `json:"createdBy"` CreatedBy string `json:"createdBy"`
@@ -1151,8 +1166,8 @@ type ItemCompute struct {
//NumaNodeId //NumaNodeId
NumaNodeId int64 `json:"numaNodeId"` NumaNodeId int64 `json:"numaNodeId"`
// Pinned to stack // Pinned to node
PinnedToStack bool `json:"pinnedToStack"` PinnedToNode bool `json:"pinnedToNode"`
// PreferredCPU // PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"` PreferredCPU []int64 `json:"preferredCpu"`
@@ -1166,6 +1181,9 @@ type ItemCompute struct {
// Qemu_quest // Qemu_quest
QemuQuest QemuQuest `json:"qemu_guest"` QemuQuest QemuQuest `json:"qemu_guest"`
// ReadOnly indicates read-only mode state
ReadOnly bool `json:"read_only"`
// Reference ID // Reference ID
ReferenceID string `json:"referenceId"` ReferenceID string `json:"referenceId"`
@@ -1220,6 +1238,9 @@ type ItemCompute struct {
// VINS connected // VINS connected
VINSConnected uint64 `json:"vinsConnected"` VINSConnected uint64 `json:"vinsConnected"`
// Weight
Weight uint64 `json:"weight"`
// Zone ID // Zone ID
ZoneID uint64 `json:"zoneId"` ZoneID uint64 `json:"zoneId"`
} }
@@ -1231,6 +1252,9 @@ type ListInfoDisks []InfoDisk
type InfoDisk struct { type InfoDisk struct {
// ID // ID
ID uint64 `json:"id"` ID uint64 `json:"id"`
// SEP ID
SepID int64 `json:"sepId"`
} }
// List information about computes // List information about computes
@@ -1331,8 +1355,8 @@ type ItemPCIDevice struct {
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`
// Stack ID // Node ID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"nodeId"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`

View File

@@ -20,7 +20,7 @@ type NetAttachRequest struct {
// 'VFNIC' for connect to vfpool // 'VFNIC' for connect to vfpool
// 'DPDK' for connect to DPDK // 'DPDK' for connect to DPDK
// `EMPTY` for connect empty network // `EMPTY` for connect empty network
// `SDT` for connect to SDN // `SDN` for connect to SDN
// `TRUNK` for connect to TRUNK // `TRUNK` for connect to TRUNK
// Required: true // Required: true
NetType string `url:"netType" json:"netType" validate:"computex86NetType"` NetType string `url:"netType" json:"netType" validate:"computex86NetType"`
@@ -45,6 +45,27 @@ type NetAttachRequest struct {
// Required: false // Required: false
MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"` MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"`
// Net mask
// Used only to DPDK or VFNIC net type
// Required: false
NetMask uint64 `url:"netMask,omitempty" json:"netMask,omitempty"`
// SDN Segment ID
// Required: false
SDNSegmentID string `url:"sdn_segment_id,omitempty" json:"sdn_segment_id,omitempty"`
// SDN Object Group ID
// Required: false
SDNObjectGroupID string `url:"sdn_object_group_id,omitempty" json:"sdn_object_group_id,omitempty"`
// SDN Logical Port Display Name
// Required: false
SDNLogicalPortDisplayName string `url:"sdn_logical_port_display_name,omitempty" json:"sdn_logical_port_display_name,omitempty"`
// SDN Logical Port Description
// Required: false
SDNLogicalPortDescription string `url:"sdn_logical_port_description,omitempty" json:"sdn_logical_port_description,omitempty"`
// Unique identifier of logical port on SDN side // Unique identifier of logical port on SDN side
// Required: false // Required: false
SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty" validate:"omitempty"` SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty" validate:"omitempty"`

View File

@@ -8,8 +8,8 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
// PinToStackRequest struct to pin compute to stack // PinToNodeRequest struct to pin compute to node
type PinToStackRequest struct { type PinToNodeRequest struct {
// ID of the compute instance // ID of the compute instance
// Required: true // Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
@@ -20,14 +20,14 @@ type PinToStackRequest struct {
AutoStart bool `url:"autoStart" json:"autoStart"` AutoStart bool `url:"autoStart" json:"autoStart"`
} }
// PinToStack pin compute to current stack // PinToNode pin compute to current node
func (c Compute) PinToStack(ctx context.Context, req PinToStackRequest) (bool, error) { func (c Compute) PinToNode(ctx context.Context, req PinToNodeRequest) (bool, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err)) return false, validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudapi/compute/pinToStack" url := "/cloudapi/compute/pin_to_node"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil { if err != nil {

View File

@@ -16,7 +16,7 @@ type RedeployRequest struct {
// Storage policy id of compute. The rules of the specified storage policy will be used. // Storage policy id of compute. The rules of the specified storage policy will be used.
// Required: true // Required: true
StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"` StoragePolicyID uint64 `url:"storage_policy_id,omitempty" json:"storage_policy_id,omitempty"`
// ID of the new OS image, if image change is required // ID of the new OS image, if image change is required
// Required: false // Required: false

View File

@@ -8,21 +8,21 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
// UnpinFromStackRequest struct for unpin from stack // UnpinFromNodeRequest struct for unpin from node
type UnpinFromStackRequest struct { type UnpinFromNodeRequest struct {
// ID of the compute instance // ID of the compute instance
// Required: true // Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
} }
// UnpinFromStack unpins compute from current stack // UnpinFromNode unpins compute from current node
func (c Compute) UnpinFromStack(ctx context.Context, req UnpinFromStackRequest) (bool, error) { func (c Compute) UnpinFromNode(ctx context.Context, req UnpinFromNodeRequest) (bool, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err)) return false, validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudapi/compute/unpinFromStack" url := "/cloudapi/compute/unpin_from_node"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil { if err != nil {

View File

@@ -48,7 +48,6 @@ var disks = ListDisks{
Snapshots: []ItemSnapshot{}, Snapshots: []ItemSnapshot{},
Status: "ASSIGNED", Status: "ASSIGNED",
TechStatus: techStatusAllocated, TechStatus: techStatusAllocated,
Type: "B",
VMID: 48500, VMID: 48500,
}, },
{ {
@@ -92,7 +91,6 @@ var disks = ListDisks{
Snapshots: []ItemSnapshot{}, Snapshots: []ItemSnapshot{},
Status: "ASSIGNED", Status: "ASSIGNED",
TechStatus: techStatusAllocated, TechStatus: techStatusAllocated,
Type: "B",
VMID: 48502, VMID: 48502,
}, },
}, },
@@ -224,7 +222,6 @@ var searchDisks = ListSearchDisks{
Snapshots: []ItemSnapshot{}, Snapshots: []ItemSnapshot{},
Status: "ASSIGNED", Status: "ASSIGNED",
TechStatus: techStatusAllocated, TechStatus: techStatusAllocated,
Type: "B",
VMID: 48500, VMID: 48500,
}, },
ItemDisk{ ItemDisk{
@@ -268,7 +265,6 @@ var searchDisks = ListSearchDisks{
Snapshots: []ItemSnapshot{}, Snapshots: []ItemSnapshot{},
Status: "ASSIGNED", Status: "ASSIGNED",
TechStatus: techStatusAllocated, TechStatus: techStatusAllocated,
Type: "B",
VMID: 48502, VMID: 48502,
}, },
} }
@@ -360,7 +356,6 @@ func TestListSearchDisks_SortByCreatedTime(t *testing.T) {
var unattachedDisks = ListDisksUnattached{ var unattachedDisks = ListDisksUnattached{
Data: []ItemDiskUnattached{ Data: []ItemDiskUnattached{
{ {
CKey: "",
Meta: []interface{}{ Meta: []interface{}{
"cloudbroker", "cloudbroker",
"disk", "disk",
@@ -412,7 +407,6 @@ var unattachedDisks = ListDisksUnattached{
VMID: 0, VMID: 0,
}, },
{ {
CKey: "",
Meta: []interface{}{ Meta: []interface{}{
"cloudbroker", "cloudbroker",
"disk", "disk",

View File

@@ -38,10 +38,6 @@ type ListRequest struct {
// Required: false // Required: false
AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"` AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"`
// Type of the disks
// Required: false
Type string `url:"type,omitempty" json:"type,omitempty"`
// Find by sep ID // Find by sep ID
// Required: false // Required: false
SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
@@ -65,6 +61,14 @@ type ListRequest struct {
// Page size // Page size
// Required: false // Required: false
Size uint64 `url:"size,omitempty" json:"size,omitempty"` Size uint64 `url:"size,omitempty" json:"size,omitempty"`
// ID of the resource group
// Required: false
RGID uint64 `url:"rg_id,omitempty" json:"rg_id,omitempty"`
// ID of the compute
// Required: false
ComputeID uint64 `url:"compute_id,omitempty" json:"compute_id,omitempty"`
} }
// List gets list of the created disks belonging to an account as a ListDisks struct // List gets list of the created disks belonging to an account as a ListDisks struct

View File

@@ -34,10 +34,6 @@ type ListDeletedRequest struct {
// Required: false // Required: false
AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"` AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"`
// Type of the disks
// Required: false
Type string `url:"type,omitempty" json:"type,omitempty"`
// Sort by one of supported fields, format +|-(field) // Sort by one of supported fields, format +|-(field)
// Required: false // Required: false
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"` SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`

View File

@@ -1,52 +0,0 @@
package disks
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ListTypesRequest struct to get list types of disks
type ListTypesRequest struct {
// Show detailed disk types by seps
// Required: true
Detailed bool `url:"detailed" json:"detailed"`
// Sort by one of supported fields, format +|-(field)
// Required: false
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
// Page number
// Required: false
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
// Page size
// Required: false
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
}
// ListTypes gets list defined disk types
func (d Disks) ListTypes(ctx context.Context, req ListTypesRequest) (*ListTypes, error) {
if err := validators.ValidateRequest(req); err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/disks/listTypes"
res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
list := ListTypes{}
err = json.Unmarshal(res, &list)
if err != nil {
return nil, err
}
return &list, nil
}

View File

@@ -26,10 +26,6 @@ type ListUnattachedRequest struct {
// Required: false // Required: false
Status string `url:"status,omitempty" json:"status,omitempty"` Status string `url:"status,omitempty" json:"status,omitempty"`
// Type of the disks
// Required: false
Type string `url:"type,omitempty" json:"type,omitempty"`
// ID of the account // ID of the account
// Required: false // Required: false
AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"` AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"`

View File

@@ -11,6 +11,12 @@ type ItemDisk struct {
// Account name // Account name
AccountName string `json:"accountName"` AccountName string `json:"accountName"`
// BLK Discard
BLKDiscard bool `json:"blkdiscard"`
// Block size of disk
BlockSize string `json:"block_size"`
// Computes // Computes
Computes map[string]string `json:"computes"` Computes map[string]string `json:"computes"`
@@ -128,9 +134,6 @@ type ItemDisk struct {
// Need to clean before destroy // Need to clean before destroy
ToClean bool `json:"to_clean"` ToClean bool `json:"to_clean"`
// Type
Type string `json:"type"`
// Virtual machine ID // Virtual machine ID
VMID uint64 `json:"vmid"` VMID uint64 `json:"vmid"`
@@ -139,12 +142,12 @@ type ItemDisk struct {
// Updated by // Updated by
UpdatedBy string `json:"updatedBy"` UpdatedBy string `json:"updatedBy"`
// Cache mode of disk
Cache string `json:"cache"`
} }
type ItemDiskUnattached struct { type ItemDiskUnattached struct {
// CKey
CKey string `json:"_ckey"`
// Meta // Meta
Meta []interface{} `json:"_meta"` Meta []interface{} `json:"_meta"`
@@ -157,9 +160,18 @@ type ItemDiskUnattached struct {
// Access Control List // Access Control List
ACL map[string]interface{} `json:"acl"` ACL map[string]interface{} `json:"acl"`
// BLK Discard
BLKDiscard bool `json:"blkdiscard"`
// Block size of disk
BlockSize string `json:"block_size"`
// Boot Partition // Boot Partition
BootPartition uint64 `json:"bootPartition"` BootPartition uint64 `json:"bootPartition"`
// Cache
Cache string `json:"cache"`
// Created time // Created time
CreatedTime uint64 `json:"createdTime"` CreatedTime uint64 `json:"createdTime"`
@@ -268,9 +280,6 @@ type ItemDiskUnattached struct {
// Tech status // Tech status
TechStatus string `json:"techStatus"` TechStatus string `json:"techStatus"`
// Type
Type string `json:"type"`
// Virtual machine ID // Virtual machine ID
VMID uint64 `json:"vmid"` VMID uint64 `json:"vmid"`
} }
@@ -375,6 +384,12 @@ type RecordDisk struct {
// Account name // Account name
AccountName string `json:"accountName"` AccountName string `json:"accountName"`
// BLK Discard
BLKDiscard bool `json:"blkdiscard"`
// Block size of disk
BlockSize string `json:"block_size"`
// Computes // Computes
Computes map[string]string `json:"computes"` Computes map[string]string `json:"computes"`
@@ -492,9 +507,6 @@ type RecordDisk struct {
// Need to clean before destroy // Need to clean before destroy
ToClean bool `json:"to_clean"` ToClean bool `json:"to_clean"`
// Type
Type string `json:"type"`
// Virtual machine ID // Virtual machine ID
VMID uint64 `json:"vmid"` VMID uint64 `json:"vmid"`
@@ -503,6 +515,9 @@ type RecordDisk struct {
// Updated by // Updated by
UpdatedBy string `json:"updatedBy"` UpdatedBy string `json:"updatedBy"`
// Cache mode of disk
Cache string `json:"cache"`
} }
type ItemReplication struct { type ItemReplication struct {
@@ -524,11 +539,3 @@ type ItemReplication struct {
// VolumeID // VolumeID
VolumeID string `json:"volumeId"` VolumeID string `json:"volumeId"`
} }
type ListTypes struct {
// Data
Data []interface{} `json:"data"`
// Entry count
EntryCount uint64 `json:"entryCount"`
}

View File

@@ -34,10 +34,6 @@ type ListRequest struct {
// Required: false // Required: false
AccountId uint64 `url:"accountId,omitempty" json:"accountId,omitempty"` AccountId uint64 `url:"accountId,omitempty" json:"accountId,omitempty"`
// Find by resource group ID
// Required: false
RGID uint64 `url:"rgId,omitempty" json:"rgId,omitempty"`
// Find by id // Find by id
// Required: false // Required: false
ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"` ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"`

View File

@@ -85,12 +85,6 @@ type RecordFLIPGroup struct {
// Network // Network
Network string `json:"network"` Network string `json:"network"`
// Resource group ID
RGID uint64 `json:"rgId"`
// Resource group name
RGName string `json:"rgName"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`

View File

@@ -92,9 +92,6 @@ type RecordImage struct {
// UNCPathj // UNCPathj
UNCPath string `json:"UNCPath"` UNCPath string `json:"UNCPath"`
// CKey
CKey string `json:"_ckey"`
// Account ID // Account ID
AccountID uint64 `json:"accountId"` AccountID uint64 `json:"accountId"`

View File

@@ -169,6 +169,7 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx // Type of the emulated system, Q35 or i440fx
// Required: false // Required: false
// Default: Q35
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Zone ID // Zone ID

View File

@@ -24,6 +24,7 @@ type WorkerAddRequest struct {
// Type of the emulated system, Q35 or i440fx // Type of the emulated system, Q35 or i440fx
// Required: false // Required: false
// Default: Q35
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
} }

View File

@@ -66,6 +66,7 @@ type WorkersGroupAddRequest struct {
// Type of the emulated system, Q35 or i440fx // Type of the emulated system, Q35 or i440fx
// Required: false // Required: false
// Default: Q35
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
} }

View File

@@ -35,10 +35,31 @@ type Interface struct {
// Required: false // Required: false
MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"` MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"`
// Net mask
// Used only to DPDK or VFNIC net type
// Required: false
NetMask uint64 `url:"netMask,omitempty" json:"netMask,omitempty"`
// MAC address to assign to this VM when connecting to the specified network // MAC address to assign to this VM when connecting to the specified network
// Required: false // Required: false
MAC string `url:"mac,omitempty" json:"mac,omitempty" validate:"omitempty"` MAC string `url:"mac,omitempty" json:"mac,omitempty" validate:"omitempty"`
// SDN Segment ID
// Required: false
SDNSegmentID string `url:"sdn_segment_id,omitempty" json:"sdn_segment_id,omitempty"`
// SDN Object Group ID
// Required: false
SDNObjectGroupID string `url:"sdn_object_group_id,omitempty" json:"sdn_object_group_id,omitempty"`
// SDN Logical Port Display Name
// Required: false
SDNLogicalPortDisplayName string `url:"sdn_logical_port_display_name,omitempty" json:"sdn_logical_port_display_name,omitempty"`
// SDN Logical Port Description
// Required: false
SDNLogicalPortDescription string `url:"sdn_logical_port_description,omitempty" json:"sdn_logical_port_description,omitempty"`
// SDN interface id // SDN interface id
// Required: false // Required: false
SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty"` SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty"`
@@ -162,14 +183,6 @@ type CreateRequest struct {
// Required: false // Required: false
Start bool `url:"start" json:"start"` Start bool `url:"start" json:"start"`
// System name
// Required: false
IS string `url:"IS,omitempty" json:"IS,omitempty"`
// Compute purpose
// Required: false
IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"`
// Custom fields for compute. Must be a dict // Custom fields for compute. Must be a dict
// Required: false // Required: false
CustomFields string `url:"customFields,omitempty" json:"customFields,omitempty"` CustomFields string `url:"customFields,omitempty" json:"customFields,omitempty"`
@@ -189,6 +202,7 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx // Type of the emulated system, Q35 or i440fx
// Required: false // Required: false
// Default: Q35
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node // Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node

View File

@@ -63,8 +63,27 @@ type CreateBlankRequest struct {
// Type of the emulated system, Q35 or i440fx // Type of the emulated system, Q35 or i440fx
// Required: false // Required: false
// Default: Q35
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node
// Required: false
// Default: false
HPBacked bool `url:"hp_backed" json:"hp_backed"`
// Run VM on dedicated CPUs. To use this feature, the system must be pre-configured by allocating CPUs on the physical node
// Required: false
// Default: false
CPUPin bool `url:"cpu_pin" json:"cpu_pin"`
// Rule for VM placement with NUMA affinity.
// Possible values - none (placement without NUMA affinity),
// strict (strictly with NUMA affinity, if not possible - do not start VM),
// loose (use NUMA affinity if possible)
// Required: false
// Default: none
NumaAffinity string `url:"numa_affinity,omitempty" json:"numa_affinity,omitempty" validate:"omitempty,numaAffinity"`
// Text description of this VM // Text description of this VM
// Required: false // Required: false
Description string `url:"desc,omitempty" json:"desc,omitempty"` Description string `url:"desc,omitempty" json:"desc,omitempty"`

View File

@@ -38,8 +38,8 @@ type CreateRequest struct {
HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"` HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"`
// Start now Load balancer // Start now Load balancer
// Required: true // Required: false
Start bool `url:"start" json:"start" validate:"required"` Start interface{} `url:"start,omitempty" json:"start,omitempty" validate:"omitempty,isBool"`
// Text description of this load balancer // Text description of this load balancer
// Required: false // Required: false

View File

@@ -29,8 +29,8 @@ type ItemPCIDevice struct {
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`
// Stack ID // Node ID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"nodeId"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`
@@ -47,4 +47,3 @@ type ListPCIDevices struct {
// Entry count // Entry count
EntryCount uint64 `json:"entryCount"` EntryCount uint64 `json:"entryCount"`
} }

View File

@@ -39,10 +39,6 @@ type CreateRequest struct {
// Required: false // Required: false
MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"` MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"`
// Max sent/received network transfer peering
// Required: false
MaxNetworkPeerTransfer int64 `url:"maxNetworkPeerTransfer,omitempty" json:"maxNetworkPeerTransfer,omitempty"`
// Max number of assigned public IPs // Max number of assigned public IPs
// Required: false // Required: false
MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"` MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"`

View File

@@ -34,7 +34,6 @@ var rgs = ListResourceGroups{
CUC: -1, CUC: -1,
CUI: -1, CUI: -1,
CUM: -1, CUM: -1,
CUNP: -1,
GPUUnits: -1, GPUUnits: -1,
}, },
Secret: "", Secret: "",
@@ -76,7 +75,6 @@ var rgs = ListResourceGroups{
CUC: -1, CUC: -1,
CUI: -1, CUI: -1,
CUM: -1, CUM: -1,
CUNP: -1,
GPUUnits: -1, GPUUnits: -1,
}, },
Secret: "", Secret: "",
@@ -118,7 +116,6 @@ var rgs = ListResourceGroups{
CUC: -1, CUC: -1,
CUI: -1, CUI: -1,
CUM: -1, CUM: -1,
CUNP: -1,
GPUUnits: -1, GPUUnits: -1,
}, },
Secret: "", Secret: "",

View File

@@ -14,9 +14,6 @@ type Resource struct {
// Number of External IPs // Number of External IPs
ExtIPs int64 `json:"extips"` ExtIPs int64 `json:"extips"`
// External traffic
ExtTraffic int64 `json:"exttraffic"`
// Number of grafic cores // Number of grafic cores
GPU int64 `json:"gpu"` GPU int64 `json:"gpu"`
@@ -270,6 +267,9 @@ type ListResourceGroups struct {
// Main information about Access Control List // Main information about Access Control List
type ItemACL struct { type ItemACL struct {
// Email
Email string `json:"email"`
// Explicit // Explicit
Explicit bool `json:"explicit"` Explicit bool `json:"explicit"`
@@ -309,9 +309,6 @@ type ResourceLimits struct {
// CUM // CUM
CUM float64 `json:"CU_M"` CUM float64 `json:"CU_M"`
// CUNP
CUNP float64 `json:"CU_NP"`
// GPU units // GPU units
GPUUnits float64 `json:"gpu_units"` GPUUnits float64 `json:"gpu_units"`
@@ -849,9 +846,6 @@ type RecordResourceUsage struct {
// Number of external IPs // Number of external IPs
ExtIPs uint64 `json:"extips"` ExtIPs uint64 `json:"extips"`
// ExtraTraffic
ExtraTraffic uint64 `json:"exttraffic"`
// Number of GPU // Number of GPU
GPU uint64 `json:"gpu"` GPU uint64 `json:"gpu"`

View File

@@ -35,10 +35,6 @@ type UpdateRequest struct {
// Required: false // Required: false
MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"` MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"`
// Max sent/received network transfer peering
// Required: false
MaxNetworkPeerTransfer int64 `url:"maxNetworkPeerTransfer,omitempty" json:"maxNetworkPeerTransfer,omitempty"`
// Max number of assigned public IPs // Max number of assigned public IPs
// Required: false // Required: false
MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"` MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"`

View File

@@ -7,7 +7,7 @@ type SecurityGroup struct {
client interfaces.Caller client interfaces.Caller
} }
// Builder for stack endpoint // Builder for security policy endpoint
func New(client interfaces.Caller) *SecurityGroup { func New(client interfaces.Caller) *SecurityGroup {
return &SecurityGroup{ return &SecurityGroup{
client: client, client: client,

View File

@@ -1,10 +0,0 @@
package cloudapi
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/stack"
)
// Accessing the Stack method group
func (ca *CloudAPI) Stack() *stack.Stack {
return stack.New(ca.client)
}

View File

@@ -1,46 +0,0 @@
package stack
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetRequest struct to get info of stack
type GetRequest struct {
// Find by ID
// Required: true
StackId uint64 `url:"stackId" json:"stackId" validate:"required"`
}
// Get gets stack details by ID as an InfoStack struct
func (i Stack) Get(ctx context.Context, req GetRequest) (*InfoStack, error) {
res, err := i.GetRaw(ctx, req)
if err != nil {
return nil, err
}
info := InfoStack{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets stack details by ID as an array of bytes
func (i Stack) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/stack/get"
res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -1,10 +0,0 @@
package stack
// IDs gets array of StackIDs from ListStacks struct
func (ls ListStacks) IDs() []uint64 {
res := make([]uint64, 0, len(ls.Data))
for _, s := range ls.Data {
res = append(res, s.ID)
}
return res
}

View File

@@ -1,71 +0,0 @@
package stack
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ListRequest struct to get list of stacks
type ListRequest struct {
// Find by ID
// Required: false
ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"`
// Find by name
// Required: false
Name string `url:"name,omitempty" json:"name,omitempty"`
// Find by type
// Required: false
Type string `url:"type,omitempty" json:"type,omitempty"`
// Find by status
// Required: false
Status string `url:"status,omitempty" json:"status,omitempty"`
// Sort by one of supported fields, format +|-(field)
// Required: false
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
// Page number
// Required: false
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
// Page size
// Required: false
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
}
// List gets list of stacks as a ListStacks struct
func (i Stack) List(ctx context.Context, req ListRequest) (*ListStacks, error) {
res, err := i.ListRaw(ctx, req)
if err != nil {
return nil, err
}
list := ListStacks{}
err = json.Unmarshal(res, &list)
if err != nil {
return nil, err
}
return &list, nil
}
// ListRaw gets list of stacks as an array of bytes
func (i Stack) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
if err := validators.ValidateRequest(req); err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/stack/list"
res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -1,53 +0,0 @@
package stack
// Main information about stack
type InfoStack struct {
// CPU allocation ratio
CPUAllocationRatio float64 `json:"cpu_allocation_ratio"`
// Descr
Descr string `json:"descr"`
// Drivers
Drivers []string `json:"drivers"`
// ID
ID uint64 `json:"id"`
// Mem allocation ratio
MemAllocationRatio float64 `json:"mem_allocation_ratio"`
// Name
Name string `json:"name"`
// Status
Status string `json:"status"`
// Type
Type string `json:"type"`
}
// Information about stack in list
type ItemStack struct {
// ID
ID uint64 `json:"id"`
// Name
Name string `json:"name"`
// Status
Status string `json:"status"`
// Type
Type string `json:"type"`
}
// List of stacks
type ListStacks struct {
//List
Data []ItemStack `json:"data"`
//Entry count
EntryCount uint64 `json:"entryCount"`
}

View File

@@ -1,16 +0,0 @@
// Lists all the stack.
package stack
import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
// Structure for creating request to stack
type Stack struct {
client interfaces.Caller
}
// Builder for stack endpoint
func New(client interfaces.Caller) *Stack {
return &Stack{
client: client,
}
}

View File

@@ -56,6 +56,10 @@ type ListRequest struct {
// Search by pool name // Search by pool name
// Required: false // Required: false
PoolName string `url:"pool_name,omitempty" json:"pool_name,omitempty"` PoolName string `url:"pool_name,omitempty" json:"pool_name,omitempty"`
// Filter SEP's by tech status (ENABLED, DISABLED)
// Required: false
SepTechStatus string `url:"sep_tech_status,omitempty" json:"sep_tech_status,omitempty" validate:"omitempty,sepTechStatus"`
} }
// List gets list of storage policies as a ListStoragePolicies struct // List gets list of storage policies as a ListStoragePolicies struct

View File

@@ -77,6 +77,9 @@ type AccessSEPPool struct {
// Pool names // Pool names
PoolNames []string `json:"pool_names"` PoolNames []string `json:"pool_names"`
// Technical status of the SEP
SepTechStatus string `json:"sep_tech_status"`
} }
type Usage struct { type Usage struct {

View File

@@ -7,7 +7,7 @@ type StPolicy struct {
client interfaces.Caller client interfaces.Caller
} }
// Builder for stack endpoint // Builder for storage policy endpoint
func New(client interfaces.Caller) *StPolicy { func New(client interfaces.Caller) *StPolicy {
return &StPolicy{ return &StPolicy{
client: client, client: client,

View File

@@ -29,6 +29,9 @@ type ItemTrunk struct {
// MAC // MAC
MAC string `json:"mac"` MAC string `json:"mac"`
// MTU
MTU uint64 `json:"mtu"`
// Name of a trunk // Name of a trunk
Name string `json:"name"` Name string `json:"name"`

View File

@@ -156,9 +156,6 @@ type Resources struct {
// ExtIPs // ExtIPs
ExtIPs uint64 `json:"extips"` ExtIPs uint64 `json:"extips"`
// ExtTraffic
ExtTraffic uint64 `json:"exttraffic"`
// GPU // GPU
GPU uint64 `json:"gpu"` GPU uint64 `json:"gpu"`

View File

@@ -251,8 +251,8 @@ type RecordResources struct {
// Number of RAM // Number of RAM
RAM uint64 `json:"ram"` RAM uint64 `json:"ram"`
// Stack ID // Node ID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"node_id"`
// UUID // UUID
UUID string `json:"uuid"` UUID string `json:"uuid"`

View File

@@ -10,6 +10,9 @@ type ListZones struct {
// Detailed information about the zone record // Detailed information about the zone record
type RecordZone struct { type RecordZone struct {
// If true, all nodes belonging to the given zone will be marked for autostart
AutoStart bool `json:"autostart"`
// ID // ID
ID uint64 `json:"id"` ID uint64 `json:"id"`

View File

@@ -43,10 +43,6 @@ type CreateRequest struct {
// Required: false // Required: false
MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"` MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"`
// Max sent/received network transfer peering
// Required: false
MaxNetworkPeerTransfer int64 `url:"maxNetworkPeerTransfer,omitempty" json:"maxNetworkPeerTransfer,omitempty"`
// Max number of assigned public IPs // Max number of assigned public IPs
// Required: false // Required: false
MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"` MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"`

View File

@@ -71,9 +71,6 @@ type Resource struct {
// Number of External IPs // Number of External IPs
ExtIPs int64 `json:"extips"` ExtIPs int64 `json:"extips"`
// External traffic
ExtTraffic int64 `json:"exttraffic"`
// Number of grafic cores // Number of grafic cores
GPU int64 `json:"gpu"` GPU int64 `json:"gpu"`
@@ -143,9 +140,6 @@ type ResourceLimits struct {
// CuM // CuM
CuM float64 `json:"CU_M"` CuM float64 `json:"CU_M"`
// CuNP
CuNP float64 `json:"CU_NP"`
// GPUUnits // GPUUnits
GPUUnits float64 `json:"gpu_units"` GPUUnits float64 `json:"gpu_units"`
@@ -221,6 +215,9 @@ type InfoAccount struct {
// UniqPools // UniqPools
UniqPools []string `json:"uniqPools"` UniqPools []string `json:"uniqPools"`
// Updated By
UpdatedBy string `json:"updatedBy"`
// UpdatedTime // UpdatedTime
UpdatedTime uint64 `json:"updatedTime"` UpdatedTime uint64 `json:"updatedTime"`
@@ -480,9 +477,6 @@ type Limits struct {
// External IPs // External IPs
ExtIPs int64 `json:"extips"` ExtIPs int64 `json:"extips"`
// External traffic
ExtTraffic int64 `json:"exttraffic"`
// Number of GPU // Number of GPU
GPU int64 `json:"gpu"` GPU int64 `json:"gpu"`
@@ -491,6 +485,9 @@ type Limits struct {
// SEPs number // SEPs number
SEPs uint64 `json:"seps"` SEPs uint64 `json:"seps"`
// Policies
Policies map[string]Policy `json:"policies"`
} }
// Resources of resource group // Resources of resource group

View File

@@ -35,10 +35,6 @@ type UpdateRequest struct {
// Required: false // Required: false
MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"` MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"`
// Max sent/received network transfer peering
// Required: false
MaxNetworkPeerTransfer int64 `url:"maxNetworkPeerTransfer,omitempty" json:"maxNetworkPeerTransfer,omitempty"`
// Max number of assigned public IPs // Max number of assigned public IPs
// Required: false // Required: false
MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"` MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"`

View File

@@ -158,7 +158,6 @@ type CloudBrokerEndpoints struct {
Machine []string `json:"machine,omitempty"` Machine []string `json:"machine,omitempty"`
Metering []string `json:"metering,omitempty"` Metering []string `json:"metering,omitempty"`
Milestones []string `json:"milestones,omitempty"` Milestones []string `json:"milestones,omitempty"`
Node []string `json:"node,omitempty"`
Openshift []string `json:"openshift,omitempty"` Openshift []string `json:"openshift,omitempty"`
OpenshiftCI []string `json:"openshiftci,omitempty"` OpenshiftCI []string `json:"openshiftci,omitempty"`
Ovsnode []string `json:"ovsnode,omitempty"` Ovsnode []string `json:"ovsnode,omitempty"`
@@ -169,7 +168,7 @@ type CloudBrokerEndpoints struct {
Resmon interface{} `json:"resmon,omitempty"` Resmon interface{} `json:"resmon,omitempty"`
RG []string `json:"rg,omitempty"` RG []string `json:"rg,omitempty"`
Sep []string `json:"sep,omitempty"` Sep []string `json:"sep,omitempty"`
Stack []string `json:"stack,omitempty"` Node []string `json:"node,omitempty"`
Tasks []string `json:"tasks,omitempty"` Tasks []string `json:"tasks,omitempty"`
TLock []string `json:"tlock,omitempty"` TLock []string `json:"tlock,omitempty"`
User []string `json:"user,omitempty"` User []string `json:"user,omitempty"`

View File

@@ -4,7 +4,7 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit"
) )
// Accessing the Stack method group // Accessing the Audit method group
func (cb *CloudBroker) Audit() *audit.Audit { func (cb *CloudBroker) Audit() *audit.Audit {
return audit.New(cb.client) return audit.New(cb.client)
} }

View File

@@ -95,6 +95,15 @@ type RecordAudit struct {
// TTL // TTL
TTL string `json:"_ttl"` TTL string `json:"_ttl"`
// Resgroup ID
ResgroupID uint64 `json:"resgroup_id"`
// Account ID
AccountID uint64 `json:"account_id"`
// Compute ID
ComputeID uint64 `json:"compute_id"`
} }
// List of Linked Jobs // List of Linked Jobs

View File

@@ -14,6 +14,9 @@ type RestoreDiskFromBackupRequest struct {
// Compute ID // Compute ID
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Node ID
NodeID uint64 `url:"nodeId,omitempty" json:"nodeId,omitempty"`
// Disk ID // Disk ID
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"` DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`

View File

@@ -25,6 +25,9 @@ type RestoreDisksFromBackupRequest struct {
// Compute ID // Compute ID
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Node ID
NodeID uint64 `url:"nodeId,omitempty" json:"nodeId,omitempty"`
//Backup files //Backup files
BackupFiles []BackupFile `url:"disks" json:"disks" validate:"required,dive"` BackupFiles []BackupFile `url:"disks" json:"disks" validate:"required,dive"`
} }

View File

@@ -38,10 +38,6 @@ type GroupAddRequest struct {
// Required: true // Required: true
ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` ImageID uint64 `url:"imageId" json:"imageId" validate:"required"`
// Compute driver like a KVM_X86, etc.
// Required: true
Driver string `url:"driver" json:"driver" validate:"required"`
// Storage endpoint provider ID // Storage endpoint provider ID
// Required: false // Required: false
SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
@@ -71,6 +67,7 @@ type GroupAddRequest struct {
UserData string `url:"userData,omitempty" json:"userData,omitempty"` UserData string `url:"userData,omitempty" json:"userData,omitempty"`
// Chipset "i440fx" or "Q35 // Chipset "i440fx" or "Q35
// Default value : Q35
// Required: false // Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"chipset"`

View File

@@ -24,16 +24,16 @@ type GroupResizeRequest struct {
// Chipset for new computes, either i440fx or Q35 (i440fx by default) // Chipset for new computes, either i440fx or Q35 (i440fx by default)
// Available values : i440fx, Q35 // Available values : i440fx, Q35
//Default value : i440fx // Default value : Q35
//Required: true // Required: false
Chipset string `url:"chipset" json:"chipset" validate:"required,chipset"` Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Either delta or absolute value of computes // Either delta or absolute value of computes
// Should be one of: // Should be one of:
// - ABSOLUTE // - ABSOLUTE
// - RELATIVE // - RELATIVE
// Required: true // Required: false
Mode string `url:"mode" json:"mode" validate:"bserviceMode"` Mode string `url:"mode,omitempty" json:"mode,omitempty" validate:"omitempty,bserviceMode"`
} }
// GroupResize resize the group by changing the number of computes // GroupResize resize the group by changing the number of computes

View File

@@ -146,8 +146,8 @@ type ItemCompute struct {
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`
// StackID // NodeID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"node_id"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`

View File

@@ -40,9 +40,8 @@ type AffinityRuleAddRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AffinityRuleAdd adds affinity rule // AffinityRuleAdd adds affinity rule

View File

@@ -38,9 +38,8 @@ type AffinityRuleRemoveRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AffinityRuleRemove remove affinity rule // AffinityRuleRemove remove affinity rule

View File

@@ -38,9 +38,8 @@ type AntiAffinityRuleAddRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AntiAffinityRuleAdd adds anti affinity rule // AntiAffinityRuleAdd adds anti affinity rule

View File

@@ -38,9 +38,8 @@ type AntiAffinityRuleRemoveRequest struct {
Key string `url:"key" json:"key" validate:"required"` Key string `url:"key" json:"key" validate:"required"`
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: false // Required: true
// Not required on purpose: despite required tag on platform, empty string is allowed Value string `url:"value" json:"value" validate:"required"`
Value string `url:"value" json:"value"`
} }
// AntiAffinityRuleRemove removes anti affinity rule // AntiAffinityRuleRemove removes anti affinity rule

View File

@@ -0,0 +1,41 @@
package compute
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ChangeReadOnlyRequest defines parameters for toggling read-only mode.
type ChangeReadOnlyRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
// ReadOnly indicates whether the read-only mode is enabled
// Required: true
ReadOnly bool `url:"read_only" json:"read_only" validate:"required"`
}
// ChangeReadOnly toggles compute read-only mode.
func (c Compute) ChangeReadOnly(ctx context.Context, req ChangeReadOnlyRequest) (bool, error) {
if err := validators.ValidateRequest(req); err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/compute/change_read_only"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

View File

@@ -0,0 +1,47 @@
package compute
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// CheckComputePlacementRequest struct for check compute placement
type CheckComputePlacementRequest struct {
// IDs of compute instances to check
// Required: true
ComputeIDs []uint64 `url:"compute_ids" json:"compute_ids" validate:"required"`
// Filter by CPU and RAM when checking placement
// Required: false
// Default: true
FilterByCPURAM interface{} `url:"filter_by_cpu_ram,omitempty" json:"filter_by_cpu_ram,omitempty" validate:"omitempty,isBool"`
}
// CheckComputePlacement checks compute placement and returns structured result
func (c Compute) CheckComputePlacement(ctx context.Context, req CheckComputePlacementRequest) (CheckComputePlacementResult, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/compute/check_compute_placement"
if req.FilterByCPURAM == nil {
req.FilterByCPURAM = true
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
result := make(CheckComputePlacementResult)
if err := json.Unmarshal(res, &result); err != nil {
return nil, err
}
return result, nil
}

View File

@@ -2,8 +2,8 @@ package compute
import ( import (
"context" "context"
"encoding/json"
"net/http" "net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants" "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/internal/validators"
@@ -17,22 +17,24 @@ type CloneAbortRequest struct {
} }
// CloneAbort aborts a compute clone // CloneAbort aborts a compute clone
func (c Compute) CloneAbort(ctx context.Context, req CloneAbortRequest) (bool, error) { func (c Compute) CloneAbort(ctx context.Context, req CloneAbortRequest) ([]RecordCloneAbort, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err)) return nil, validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudbroker/compute/clone_abort" url := "/cloudbroker/compute/clone_abort"
res, err := c.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req) res, err := c.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil { if err != nil {
return false, err return nil, err
} }
result, err := strconv.ParseBool(string(res)) result := make([]RecordCloneAbort, 0)
err = json.Unmarshal(res, &result)
if err != nil { if err != nil {
return false, err return nil, err
} }
return result, nil return result, nil

View File

@@ -12,7 +12,7 @@ import (
type GetCloneStatusRequest struct { type GetCloneStatusRequest struct {
// ID of compute instance // ID of compute instance
// Required: true // Required: true
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"` ComputeID string `url:"compute_id" json:"compute_id" validate:"required"`
} }
// GetCloneStatus gets information about compute clone status as a RecordCloneStatus struct // GetCloneStatus gets information about compute clone status as a RecordCloneStatus struct

View File

@@ -31,13 +31,6 @@ type DiskAddRequest struct {
// Required: true // Required: true
StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"` StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"`
// Type of the disk
// Should be one of:
// - D
// - B
// Required: false
DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"`
// Pool name // Pool name
// By default will be chosen automatically // By default will be chosen automatically
// Required: false // Required: false
@@ -58,6 +51,14 @@ type DiskAddRequest struct {
// Desired bus number (hex string, e.g. "0x03") // Desired bus number (hex string, e.g. "0x03")
// Required: false // Required: false
BusNumber string `url:"bus_number,omitempty" json:"bus_number,omitempty"` BusNumber string `url:"bus_number,omitempty" json:"bus_number,omitempty"`
// Disk cache mode
// Required: false
Cache string `url:"cache,omitempty" json:"cache,omitempty"`
// BLK Discard
// Required: false
BLKDiscard interface{} `url:"blkdiscard,omitempty" json:"blkdiscard,omitempty" validate:"omitempty,isBool"`
} }
// DiskAdd creates new disk and attach to compute // DiskAdd creates new disk and attach to compute

View File

@@ -18,10 +18,6 @@ type DiskAttachRequest struct {
// Required: true // Required: true
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"` DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`
// Type of the disk B;D
// Required: false
DiskType string `url:"diskType,omitempty" json:"diskType,omitempty"`
// Desired PCI slot (hex string, e.g. "0x1A") // Desired PCI slot (hex string, e.g. "0x1A")
// Required: false // Required: false
PCISlot string `url:"pci_slot,omitempty" json:"pci_slot,omitempty"` PCISlot string `url:"pci_slot,omitempty" json:"pci_slot,omitempty"`

View File

@@ -65,7 +65,7 @@ var computes = ListComputes{
MigrationJob: 0, MigrationJob: 0,
Milestones: 363500, Milestones: 363500,
Name: "test", Name: "test",
PinnedToStack: 1, PinnedToNode: 1,
RAM: 4096, RAM: 4096,
ReferenceID: "c7cb19ac-af4a-4067-852f-c5572949207e", ReferenceID: "c7cb19ac-af4a-4067-852f-c5572949207e",
Registered: true, Registered: true,
@@ -127,7 +127,7 @@ var computes = ListComputes{
MigrationJob: 0, MigrationJob: 0,
Milestones: 363853, Milestones: 363853,
Name: "compute_2", Name: "compute_2",
PinnedToStack: 1, PinnedToNode: 1,
RAM: 4096, RAM: 4096,
ReferenceID: "a542c449-5b1c-4f90-88c5-7bb5f8ae68ff", ReferenceID: "a542c449-5b1c-4f90-88c5-7bb5f8ae68ff",
Registered: true, Registered: true,

View File

@@ -42,17 +42,17 @@ type ListRequest struct {
// Required: false // Required: false
IPAddress string `url:"ipAddress,omitempty" json:"ipAddress,omitempty"` IPAddress string `url:"ipAddress,omitempty" json:"ipAddress,omitempty"`
// Find by stack ID // Find by node ID
// Required: false // Required: false
StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` NodeID uint64 `url:"node_id,omitempty" json:"node_id,omitempty"`
// Find by CD image ID // Find by CD image ID
// Required: false // Required: false
CDImageID uint64 `url:"cdImageId,omitempty" json:"cdImageId,omitempty"` CDImageID uint64 `url:"cdImageId,omitempty" json:"cdImageId,omitempty"`
// Find by stack name // Find by node name
// Required: false // Required: false
StackName string `url:"stackName,omitempty" json:"stackName,omitempty"` NodeName string `url:"nodeName,omitempty" json:"nodeName,omitempty"`
// Find by external network name // Find by external network name
// Required: false // Required: false

View File

@@ -15,9 +15,9 @@ type MigrateRequest struct {
// Required: true // Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Particular Stack ID to migrate this compute to // Particular Node ID to migrate this compute to
// Required: false // Required: false
TargetStackID uint64 `url:"targetStackId,omitempty" json:"targetStackId,omitempty"` TargetNodeID uint64 `url:"targetNodeId,omitempty" json:"targetNodeId,omitempty"`
// If live migration fails, destroy compute // If live migration fails, destroy compute
// on source node and recreate on the target // on source node and recreate on the target
@@ -30,7 +30,7 @@ type AsyncWrapperMigrateRequest struct {
SyncMode bool `url:"sync"` SyncMode bool `url:"sync"`
} }
// Migrate migrates compute to another stack // Migrate migrates compute to another node
func (c Compute) Migrate(ctx context.Context, req MigrateRequest) (bool, error) { func (c Compute) Migrate(ctx context.Context, req MigrateRequest) (bool, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
@@ -54,7 +54,7 @@ func (c Compute) Migrate(ctx context.Context, req MigrateRequest) (bool, error)
return result, nil return result, nil
} }
// AsyncMigrate migrates compute to another stack in async mode // AsyncMigrate migrates compute to another node in async mode
func (c Compute) AsyncMigrate(ctx context.Context, req MigrateRequest) (string, error) { func (c Compute) AsyncMigrate(ctx context.Context, req MigrateRequest) (string, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {

View File

@@ -22,9 +22,9 @@ type MigrateStorageRequest struct {
// Required: true // Required: true
PoolName string `url:"poolName" json:"poolName" validate:"required"` PoolName string `url:"poolName" json:"poolName" validate:"required"`
// Target stack ID // Target node ID
// Required: true // Required: true
StackID uint64 `url:"stackId" json:"stackId" validate:"required"` NodeID uint64 `url:"node_id" json:"node_id" validate:"required"`
// Async API call // Async API call
// Required: true // Required: true
@@ -32,7 +32,7 @@ type MigrateStorageRequest struct {
} }
// MigrateStorage gets complex compute migration // MigrateStorage gets complex compute migration
// Compute will be migrated to specified stack, and compute disks will // Compute will be migrated to specified node, and compute disks will
// be migrated to specified SEP to specified pool. // be migrated to specified SEP to specified pool.
// This action can take up to 84 hours // This action can take up to 84 hours
func (c Compute) MigrateStorage(ctx context.Context, req MigrateStorageRequest) (string, error) { func (c Compute) MigrateStorage(ctx context.Context, req MigrateStorageRequest) (string, error) {

View File

@@ -391,12 +391,21 @@ type ItemDisk struct {
// Access Control List // Access Control List
ACL ItemACL `json:"acl"` ACL ItemACL `json:"acl"`
// BLK Discard
BLKDiscard bool `json:"blkdiscard"`
// Block Size
BlockSize string `json:"block_size"`
// Boot partition // Boot partition
BootPartition uint64 `json:"bootPartition"` BootPartition uint64 `json:"bootPartition"`
// Bus number // Bus number
BusNumber uint64 `json:"bus_number"` BusNumber uint64 `json:"bus_number"`
// Chache
Cache string `json:"cache"`
// Created by // Created by
CreatedBy string `json:"createdBy"` CreatedBy string `json:"createdBy"`
@@ -804,8 +813,8 @@ type InfoCompute struct {
// Name of OS // Name of OS
OSVersion string `json:"os_version"` OSVersion string `json:"os_version"`
// Pinned to stack // Pinned to node
PinnedToStack int64 `json:"pinnedToStack"` PinnedToNode int64 `json:"pinnedToNode"`
// PreferredCPU // PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"` PreferredCPU []int64 `json:"preferredCpu"`
@@ -813,6 +822,9 @@ type InfoCompute struct {
// Qemu_quest // Qemu_quest
QemuQuest QemuQuest `json:"qemu_guest"` QemuQuest QemuQuest `json:"qemu_guest"`
// ReadOnly indicates read-only mode state
ReadOnly bool `json:"read_only"`
// Number of RAM // Number of RAM
RAM uint64 `json:"ram"` RAM uint64 `json:"ram"`
@@ -837,11 +849,11 @@ type InfoCompute struct {
// SnapSets // SnapSets
SnapSets ListSnapshots `json:"snapSets"` SnapSets ListSnapshots `json:"snapSets"`
// Stack ID // Node ID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"node_id"`
// Stack name // Node name
StackName string `json:"stackName"` NodeName string `json:"nodeName"`
// Stateless SEP ID // Stateless SEP ID
StatelessSEPID int64 `json:"statelessSepId"` StatelessSEPID int64 `json:"statelessSepId"`
@@ -879,6 +891,9 @@ type InfoCompute struct {
// VINS connected // VINS connected
VINSConnected uint64 `json:"vinsConnected"` VINSConnected uint64 `json:"vinsConnected"`
// Weight
Weight uint64 `json:"weight"`
// Zone ID // Zone ID
ZoneID uint64 `json:"zoneId"` ZoneID uint64 `json:"zoneId"`
} }
@@ -1055,9 +1070,6 @@ type RecordCompute struct {
// Name // Name
Name string `json:"name"` Name string `json:"name"`
// Node ID
NodeID uint64 `json:"nodeId"`
// Natable VINS ID // Natable VINS ID
NatableVINSID uint64 `json:"natableVinsId"` NatableVINSID uint64 `json:"natableVinsId"`
@@ -1091,8 +1103,8 @@ type RecordCompute struct {
// Name of OS // Name of OS
OSVersion string `json:"os_version"` OSVersion string `json:"os_version"`
// Pinned to stack // Pinned to node
PinnedToStack int64 `json:"pinnedToStack"` PinnedToNode int64 `json:"pinnedToNode"`
// PreferredCPU // PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"` PreferredCPU []int64 `json:"preferredCpu"`
@@ -1100,6 +1112,9 @@ type RecordCompute struct {
// Qemu_quest // Qemu_quest
QemuQuest QemuQuest `json:"qemu_guest"` QemuQuest QemuQuest `json:"qemu_guest"`
// ReadOnly indicates read-only mode state
ReadOnly bool `json:"read_only"`
// Number of RAM // Number of RAM
RAM uint64 `json:"ram"` RAM uint64 `json:"ram"`
@@ -1124,11 +1139,11 @@ type RecordCompute struct {
// SnapSets // SnapSets
SnapSets ListSnapshots `json:"snapSets"` SnapSets ListSnapshots `json:"snapSets"`
// Stack ID // Node ID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"node_id"`
// Stack name // Node name
StackName string `json:"stackName"` NodeName string `json:"nodeName"`
// Stateless SEP ID // Stateless SEP ID
StatelessSEPID int64 `json:"statelessSepId"` StatelessSEPID int64 `json:"statelessSepId"`
@@ -1166,8 +1181,14 @@ type RecordCompute struct {
// VNC password // VNC password
VNCPassword string `json:"vncPasswd"` VNCPassword string `json:"vncPasswd"`
// Weight
Weight uint64 `json:"weight"`
// Zone ID // Zone ID
ZoneID uint64 `json:"zoneId"` ZoneID uint64 `json:"zoneId"`
//todo
_ uint64 `json:"nodeId"`
} }
type LoaderMetaIso struct { type LoaderMetaIso struct {
@@ -1277,6 +1298,9 @@ type ItemDeletedCompute struct {
type InfoDisk struct { type InfoDisk struct {
// ID // ID
ID uint64 `json:"id"` ID uint64 `json:"id"`
// SEP ID
SepID int64 `json:"sepId"`
} }
// List computes // List computes
@@ -1338,8 +1362,8 @@ type ItemPCIDevice struct {
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`
// Stack ID // Node ID
StackID uint64 `json:"stackId"` NodeID uint64 `json:"nodeId"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`
@@ -1441,14 +1465,22 @@ type MigrateStorageItem struct {
// Migration process log // Migration process log
Log []string `json:"log"` Log []string `json:"log"`
// Source stack ID // Source node ID
SourceStackID uint64 `json:"sourceStackId"` SourceNodeID uint64 `json:"sourceNodeId"`
// Migration status // Migration status
Status string `json:"status"` Status string `json:"status"`
// Target stack ID // Target node ID
TargetStackID uint64 `json:"targetStackId"` TargetNodeID uint64 `json:"targetNodeId"`
}
type RecordCloneAbort struct {
// Disk ID
DiskID uint64 `json:"disk_id"`
// Abort status
Status bool `json:"status"`
} }
type RecordCloneStatus struct { type RecordCloneStatus struct {
@@ -1478,3 +1510,20 @@ type CloneStatus struct {
// Progress percent // Progress percent
ProgressPercent int `json:"progress_percent"` ProgressPercent int `json:"progress_percent"`
} }
type CheckComputePlacementError struct {
// Code
Code int64 `json:"code"`
// Message
Message string `json:"message"`
}
type CheckComputePlacementItem struct {
// Nide IDs
NodeIDs []uint64 `json:"node_ids"`
// error
Error CheckComputePlacementError `json:"error,omitempty"`
}
type CheckComputePlacementResult map[string]CheckComputePlacementItem

View File

@@ -20,7 +20,7 @@ type NetAttachRequest struct {
// 'VFNIC' for connect to vfpool // 'VFNIC' for connect to vfpool
// 'DPDK' for connect to DPDK // 'DPDK' for connect to DPDK
// `EMPTY` for connect empty network // `EMPTY` for connect empty network
// `SDT` for connect to SDN // `SDN` for connect to SDN
// `TRUNK` for connect to TRUNK // `TRUNK` for connect to TRUNK
// Required: true // Required: true
NetType string `url:"netType" json:"netType" validate:"computex86NetType"` NetType string `url:"netType" json:"netType" validate:"computex86NetType"`
@@ -45,6 +45,27 @@ type NetAttachRequest struct {
// Required: false // Required: false
MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"` MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"`
// Net mask
// Used only to DPDK or VFNIC net type
// Required: false
NetMask uint64 `url:"netMask,omitempty" json:"netMask,omitempty"`
// SDN Segment ID
// Required: false
SDNSegmentID string `url:"sdn_segment_id,omitempty" json:"sdn_segment_id,omitempty"`
// SDN Object Group ID
// Required: false
SDNObjectGroupID string `url:"sdn_object_group_id,omitempty" json:"sdn_object_group_id,omitempty"`
// SDN Logical Port Display Name
// Required: false
SDNLogicalPortDisplayName string `url:"sdn_logical_port_display_name,omitempty" json:"sdn_logical_port_display_name,omitempty"`
// SDN Logical Port Description
// Required: false
SDNLogicalPortDescription string `url:"sdn_logical_port_description,omitempty" json:"sdn_logical_port_description,omitempty"`
// Unique identifier of logical port on SDN side // Unique identifier of logical port on SDN side
// Required: false // Required: false
SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty" validate:"omitempty"` SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty" validate:"omitempty"`

View File

@@ -8,15 +8,15 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
// PinToStackRequest struct to pin compute to stack // PinToNodeRequest struct to pin compute to node
type PinToStackRequest struct { type PinToNodeRequest struct {
// ID of the compute instance // ID of the compute instance
// Required: true // Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Stack ID to pin to // Node ID to pin to
// Required: false // Required: false
TargetStackID uint64 `url:"targetStackId" json:"targetStackId"` TargetNodeID uint64 `url:"targetNodeId" json:"targetNodeId"`
// Try to migrate or not if compute in running states // Try to migrate or not if compute in running states
// Required: false // Required: false
@@ -28,14 +28,14 @@ type PinToStackRequest struct {
AutoStart bool `url:"autoStart" json:"autoStart"` AutoStart bool `url:"autoStart" json:"autoStart"`
} }
// PinToStack pins compute to current stack // PinToNode pins compute to current node
func (c Compute) PinToStack(ctx context.Context, req PinToStackRequest) (uint64, error) { func (c Compute) PinToNode(ctx context.Context, req PinToNodeRequest) (uint64, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err)) return 0, validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudbroker/compute/pinToStack" url := "/cloudbroker/compute/pin_to_node"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil { if err != nil {

View File

@@ -24,7 +24,7 @@ type RedeployRequest struct {
// Storage policy id of compute. The rules of the specified storage policy will be used. // Storage policy id of compute. The rules of the specified storage policy will be used.
// Required: true // Required: true
StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"` StoragePolicyID uint64 `url:"storage_policy_id,omitempty" json:"storage_policy_id,omitempty"`
// New size for the boot disk in GB, if boot disk size change is required // New size for the boot disk in GB, if boot disk size change is required
// Required: false // Required: false

View File

@@ -18,9 +18,9 @@ type StartRequest struct {
// Required: false // Required: false
AltBootID uint64 `url:"altBootId,omitempty" json:"altBootId,omitempty"` AltBootID uint64 `url:"altBootId,omitempty" json:"altBootId,omitempty"`
// ID of stack to start compute // ID of node to start compute
// Required: false // Required: false
StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` NodeID uint64 `url:"node_id,omitempty" json:"node_id,omitempty"`
} }
// Start starts compute // Start starts compute

View File

@@ -13,9 +13,9 @@ type StartMigrationINRequest struct {
// Required: true // Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// ID of the stack where the compute will be staged for migration-in // ID of the node where the compute will be staged for migration-in
// Required: false // Required: false
StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` NodeID uint64 `url:"node_id,omitempty" json:"node_id,omitempty"`
} }
// StartMigrationIN starts compute for external migration in // StartMigrationIN starts compute for external migration in

View File

@@ -33,7 +33,11 @@ type StartMigrationOutRequest struct {
// Mapping of guest disk target names to absolute paths on the destination host. // Mapping of guest disk target names to absolute paths on the destination host.
// Required: false // Required: false
Diskmap map[string]string `url:"diskmap,omitempty" json:"diskmap,omitempty"` DiskMap map[string]string `url:"diskmap,omitempty" json:"diskmap,omitempty"`
// Mapping of network interfaces
// Required: false
NetMap map[string]string `url:"netmap,omitempty" json:"netmap,omitempty"`
// Mapping for CD/DVD devices or their source paths to new ISO/device paths on the destination // Mapping for CD/DVD devices or their source paths to new ISO/device paths on the destination
// Required: false // Required: false

View File

@@ -8,21 +8,21 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
// UnpinFromStackRequest struct to unpin from stack // UnpinFromNodeRequest struct to unpin from node
type UnpinFromStackRequest struct { type UnpinFromNodeRequest struct {
// ID of the compute instance // ID of the compute instance
// Required: true // Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
} }
// UnpinFromStack unpins compute from current stack // UnpinFromNode unpins compute from current node
func (c Compute) UnpinFromStack(ctx context.Context, req UnpinFromStackRequest) (bool, error) { func (c Compute) UnpinFromNode(ctx context.Context, req UnpinFromNodeRequest) (bool, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err)) return false, validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudbroker/compute/unpinFromStack" url := "/cloudbroker/compute/unpin_from_node"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil { if err != nil {

View File

@@ -69,6 +69,10 @@ type UpdateRequest struct {
// The OS version that will be installed on the virtual machine // The OS version that will be installed on the virtual machine
// Required: false // Required: false
OSVersion string `url:"os_version,omitempty" json:"os_version,omitempty"` OSVersion string `url:"os_version,omitempty" json:"os_version,omitempty"`
// Priority weight of the compute: higher value means higher priority and later migration
// Required: false
Weight uint64 `url:"weight,omitempty" json:"weight,omitempty"`
} }
// Update updates some properties of the compute // Update updates some properties of the compute

View File

@@ -37,6 +37,14 @@ type CreateRequest struct {
// Pool name to create disk // Pool name to create disk
// Required: false // Required: false
Pool string `url:"pool,omitempty" json:"pool,omitempty"` Pool string `url:"pool,omitempty" json:"pool,omitempty"`
// Cache mode of disk
// Required: false
Cache string `url:"cache,omitempty" json:"cache,omitempty"`
// BLK Discard
// Required: false
BLKDiscard interface{} `url:"blkdiscard,omitempty" json:"blkdiscard,omitempty" validate:"omitempty,isBool"`
} }
// Create creates a disk // Create creates a disk

View File

@@ -59,7 +59,6 @@ var disks = ListDisks{
Snapshots: []ItemSnapshot{}, Snapshots: []ItemSnapshot{},
Status: "ASSIGNED", Status: "ASSIGNED",
TechStatus: "ALLOCATED", TechStatus: "ALLOCATED",
Type: "B",
VMID: 48500, VMID: 48500,
}, },
}, },
@@ -120,7 +119,6 @@ var disks = ListDisks{
Snapshots: []ItemSnapshot{}, Snapshots: []ItemSnapshot{},
Status: "ASSIGNED", Status: "ASSIGNED",
TechStatus: "ALLOCATED", TechStatus: "ALLOCATED",
Type: "B",
VMID: 48502, VMID: 48502,
}, },
}, },

View File

@@ -38,10 +38,6 @@ type ListRequest struct {
// Required: false // Required: false
AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"` AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"`
// Type of the disks
// Required: false
Type string `url:"type,omitempty" json:"type,omitempty"`
// Find by sep ID // Find by sep ID
// Required: false // Required: false
SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
@@ -65,6 +61,14 @@ type ListRequest struct {
// Page size // Page size
// Required: false // Required: false
Size uint64 `url:"size,omitempty" json:"size,omitempty"` Size uint64 `url:"size,omitempty" json:"size,omitempty"`
// ID of the resource group
// Required: false
RGID uint64 `url:"rg_id,omitempty" json:"rg_id,omitempty"`
// ID of the compute
// Required: false
ComputeID uint64 `url:"compute_id,omitempty" json:"compute_id,omitempty"`
} }
// List gets list of the created disks belonging to an account as a ListDisks struct // List gets list of the created disks belonging to an account as a ListDisks struct

Some files were not shown because too many files have changed in this diff Show More