diff --git a/CHANGELOG.md b/CHANGELOG.md
index b6ea2fd..db942e7 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,13 +1,225 @@
-## Version 1.11.6
+## Version 1.12.0
### Удалено
-#### Account
+#### account
| Идентификатор
задачи | Описание |
| --- | --- |
-| BGOS-553 | Метод `Create` в cloudapi/account |
+| BGOS-450 | Метод `AddZone` и структура запроса `AddZoneRequest` в cloudbroker/account |
+| BGOS-451 | Метод `RemoveZone` и структура запроса `RemoveZoneRequest` в cloudbroker/account |
+| BGOS-459 | Опциональные поля `ZoneIDs` и `DefaultZoneID` в структуру ответа `RecordAccount` в cloudapi/account и в структуру ответа `InfoAccount` в cloudbroker/account, опциональное поле `DefaultZoneID` в структуру запроса `UpdateRequest` в cloudapi/account и cloudbroker/account и опциональные поля `ZoneIDs` и `DefaultZoneID` в структуру запроса `CreateRequest` в cloudbroker/account |
+| BGOS-478 | Опциональное поле `Emails` в структуру `ACL` входящую в структуру ответа `RecordAccount` в cloudbroker/account |
+| BGOS-495 | Поле `AccountID` в структуру ответа `RecordLB` в cloudapi/lb и cloudbroker/lb |
+| BGOS-528 | Значение `trunk` для поля `ComputeFeatures` в cloudbroker/account |
-#### Image
+#### bservice
| Идентификатор
задачи | Описание |
| --- | --- |
-| BGOS-552 | Метод `UploadImageFile` в cloudbroker/image |
\ No newline at end of file
+| BGOS-361 | Добавлена группа ручек `bservice` в cloudbroker |
+| BGOS-448 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudapi/bservice |
+| BGOS-456 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudbroker/bservice |
+| BGOS-460 | Опциональное поле `ZoneId` в структуру запроса `CreateRequest` и в структуры ответа `RecordBasicService` и `ItemBasicService` в cloudapi/bservice и опциональное поле `ZoneID` в структуру запроса `CreateRequest` и в структуры ответа `RecordBasicService` и `ItemBasicService` в cloudbroker/bservice |
+
+#### compute
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-445 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudapi/compute |
+| BGOS-453 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudbroker/compute |
+| BGOS-461 | Поле `ZoneID` в структуры ответа `RecordCompute` и `ItemComputeDisk` в cloudapi/compute и поле `ZoneID` в структуры ответа `RecordCompute` и `InfoCompute` в cloudbroker/compute |
+| BGOS-491 | Методы `AbortSharedSnapshotMerge` и `SharedSnapshotMergeStatus` и структуры запроса `AbortSharedSnapshotMergeRequest` и `SharedSnapshotMergeStatusRequest` в cloudapi/compute и cloudbroker/compute |
+| BGOS-493 | Метод `GuestAgentDisable` и структура запроса `GuestAgentDisableRequest` в cloudapi/compute и в cloudbroker/compute|
+| BGOS-493 | Метод `GuestAgentEnable` и структура запроса `GuestAgentEnableRequest` в cloudapi/compute и в cloudbroker/compute|
+| BGOS-493 | Метод `GuestAgentExecuteRequest` и структура запроса `GuestAgentExecuteRequest` в cloudapi/compute и в cloudbroker/compute|
+| BGOS-493 | Метод `GuestAgentFeatureUpdateRequest` и структура запроса `GuestAgentFeatureUpdateRequest` в cloudapi/compute и в cloudbroker/compute|
+| BGOS-493 | Метод `GuestAgentFeatureGetRequest` и структура запроса `GuestAgentFeatureGetRequest` в cloudapi/compute и в cloudbroker/compute|
+| BGOS-497 | Метод `AsyncMigrate` в cloudbroker/compute |
+| BGOS-505 | Поддержка NetType `SDN` и `TRUNK` структурах запросов `Interface` и `NetAttachRequest` в cloudapi/compute и cloudbroker/compute |
+| BGOS-505 | Опциональное поле `SDNInterfaceID` в структуру запроса `Interface` в cloudapi/compute и cloudbroker/compute |
+| BGOS-506 | Поле `SDNInterfaceID` в структуру ответа `ItemVNFInterface` в cloudapi/compute|
+| BGOS-506 | Поле `SDNInterfaceID` в структуру ответа `ItemInterface` в cloudbroker/compute |
+| BGOS-510 | Поддержка NetType `EMPTY` структурах запросов `NetAttachRequest` в cloudapi/compute и cloudbroker/compute |
+| BGOS-535 | Метод `ChangeMTU` и структура запроса `ChangeMTURequest` в cloudapi/compute и cloudbroker/compute |
+| BGOS-509 | Опциональное поле `SDNInterfaceID` в структуру запроса `NetAttachRequest` в cloudapi/compute и cloudbroker/compute |
+| BGOS-543 | Поля `LiveMigrationJobID` и `QemuQuest` и структура ответа `QemuQuest` в структуры ответа `ItemCompute`, `RecordCompute` в cloudapi/compute и `RecordCompute`, `InfoCompute` в cloudbroker/compute |
+
+#### extnet
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-452 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudbroker/extnet |
+| BGOS-462 | Поле `ZoneID` в структуру ответа `RecordExtNet` в cloudapi/extnet и поле `ZoneID` в структуры ответа `RecordExtNet` и `ItemExtNet` в cloudbroker/extnet |
+| BGOS-462 | Опциональное поле `ZoneID` в структуру запроса `CreateRequest` в cloudbroker/extnet |
+| BGOS-534 | Опциональное поле `MTU` в структуры запроса `CreateRequest` и `UpdateRequest` в cloudbroker/extnet |
+| BGOS-534 | Поле `MTU` в структуру ответа `RecordExtNet` в cloudapi/extnet и в структуры ответа `ItemExtNet` и `RecordExtNet` в cloudbroker/extnet |
+| BGOS-530 | Метод `SetHAMode` и структура запроса `SetHAModeRequest` в cloudbroker/extnet |
+| BGOS-531 | Опциональные поля `PriVNFDevIP`, `SecVNFDevIP` и `HAMode` в структуру запроса `CreateRequest` в cloudbroker/extnet |
+| BGOS-531 | Опциональное поле `Device` в структуру запроса `DeviceMigrateRequest` в cloudbroker/extnet |
+| BGOS-531 | Поля `SecVNFDevID` и `Redundant` в структуры ответа `ItemExtNet` и `RecordExtNet` в cloudbroker/extnet |
+| BGOS-531 | Поля `SecVNFDevID` и `Redundant` в структуру ответа `RecordExtNet` в cloudapi/extnet |
+| BGOS-544 | Поле `PreReservations` в структуру ответа `RecordExtNet` в cloudapi/extnet и cloudbroker/extnet |
+
+#### grid
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-549 | Поля `NetworkModes`, `SDNSupport` в структуры ответа `ItemGridList` и `RecordGrid` в cloudbroker/grid |
+
+#### image
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-481 | Метод `AsyncCreate` в cloudapi/image |
+
+#### k8s
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-449 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudapi/k8s |
+| BGOS-463 | Поле `ZoneID` в структуры ответа `RecordK8S` и `ItemK8SCluster` в cloudapi/k8s и поле `ZoneID` в структуры ответа `RecordK8S` и `ItemK8S` в cloudbroker/k8s |
+| BGOS-463 | Опциональное поле `ZoneID` в структуру запроса `CreateRequest` в cloudapi/k8s и в cloudbroker/k8s |
+| BGOS-457 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudbroker/k8s |
+
+#### kvmx86
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-466 | Опциональное поле `ZoneID` в структуры запроса `CreateRequest` и `CreateBlankRequest` в cloudapi/kvmx86 и в структуры запроса `CreateRequest`, `CreateBlankRequest` и `MassCreateRequest` в cloudbroker/kvmx86 |
+
+#### lb
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-447 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudapi/lb |
+| BGOS-455 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudbroker/lb |
+| BGOS-464 | Поле `ZoneID` в структуру ответа `RecordLB` в cloudapi/lb и поле `ZoneID` в структуры ответа `RecordLB` и `ItemLBList` в cloudbroker/lb |
+| BGOS-464 | Опциональное поле `ZoneID` в структуру запроса `CreateRequest` в cloudapi/lb и в cloudbroker/lb |
+
+#### locations
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-546 | Поле `NetworkModes` в структуре ответа `ItemLocation` в cloudapi/locations |
+| BGOS-546 | Метод `ListGet` в cloudapi/locations |
+
+#### node
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-484 | Новое значение `is_powered` в поле `action` в структуре запроса `ApplyIpmiActionRequest` в cloudbroker/node |
+| BGOS-547 | Поля `SDNHypervisorName` и `ZoneID` в структуру ответа `ItemNode` и поле `ZoneID` в структуру ответа `RecordNode` в cloudbroker/node |
+
+#### rg
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-504 | Поле `SDNAccessGroupID` в структуру запроса `CreateRequest` в cloudapi/rg и cloudbroker/rg |
+| BGOS-504 | Поле `SDNAccessGroupID` в структуры ответа `RecordResourceGroup`, `ItemResourceGroup` в cloudapi/rg и в структуру ответа `ItemRG` в cloudbroker/rg |
+| BGOS-528 | Значение `trunk` для поля `ComputeFeatures` в cloudbroker/rg |
+
+#### trunk
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-527 | Группа ручек `trunk` в cloudapi и в cloudbroker |
+
+#### vins
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-446 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudapi/vins |
+| BGOS-454 | Метод `MigrateToZone` и структура запроса `MigrateToZoneRequest` в cloudbroker/vins |
+| BGOS-465 | Поле `ZoneID` в структуру ответа `RecordVINS` в cloudapi/vins и в структуры ответа `RecordVINS` и `ItemVINS` в cloudbroker/vins |
+| BGOS-465 | Опциональное поле `ZoneID` в структуры запроса `CreateInRGRequest` и `CreateInAccountRequest` в cloudapi/vins и в cloudbroker/vins |
+| BGOS-550 | Поле `SDNAccessGroupID` в структуру ответа `ItemVNFInterface` в cloudapi/vins и в структуру ответа `ItemInterface` в cloudbroker/vins |
+
+#### zone
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-435 | Добавлена группа ручек zone в cloudapi и в cloudbroker |
+
+#### user
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-494 | Опциональное поле `Provider` в структурe запроса `CreateRequest` в cloudbroker/user |
+| BGOS-526 | Опциональное поле `Email` в структуру запроса `ListRequest` в cloudbroker/user |
+| BGOS-502 | Поле `Blocked` в структуру ответа `ItemUser`, методы `Block` и `Unblock` и структуры запроса `BlockRequest` и `UnblockRequest` в cloudbroker/user |
+
+### Исправлено
+
+#### account
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-512 | Исправлено возвращаемое значение с bool на string в методах `Delete` и `Restore` в cloudapi/account и в методах `Delete`, `Restore`, `DeleteAccounts`, `DisableAccounts` и `EnableAccounts` в cloudbroker/account |
+
+#### bservice
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-483 | Изменен тип параметра `Permanently` на опциональный в структуре `DeleteRequest` в cloudbroker/bservice |
+
+#### compute
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-433 | Исправлена ошибка валидации поля LoaderType для всех структур в cloudapi/compute и в cloudbroker/compute |
+| BGOS-458 | Изменен тип параметров `CPUPin`, `HPBacked`, `AutoStart`, `HotResize` с bool на interface в структуре `UpdateRequest` cloudapi/compute и в cloudbroker/compute |
+| BGOS-503 | Исправлен тип поля `Explicit` cо string на bool в структурах ответа `ItemComputeACL` в cloudbroker/compute |
+| BGOS-537 | В методе `GetLog` вызов api осуществляется с методом get в cloudapi/compute и в cloudbroker/compute |
+
+#### disk
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-468 | Исправлен тип поля `UpdatedBy` c uint64 на string в структурах ответа `ItemComputeDisk` в cloudapi/compute и `ItemDisk` в cloudbroker/compute |
+
+#### extnet
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-548 | В структурах ответа `RecordExtNet` в cloudapi/extnet и cloudbroker/extnet и `ItemExtNet` в cloudbroker/extnet поле `networkID` заменено на поле `networkIDs` |
+
+#### flipgroup
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-482 | Изменен тип параметра `ClientType` на опциональный в структуре `CreateRequest` в cloudapi/bservice и cloudbroker/bservice |
+
+#### image
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-481 | Метод `SyncCreate` заменен на метод `AsyncCreateImage` со структурой запроса `CreateRequest` в cloudbroker/image |
+
+#### lb
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-538 | Изменен тип поля `SysctlParams` в структурах ответа `RecordLB` и `ItemLBList` в cloudapi/lb и cloudbroker/lb |
+
+#### rg
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-540 | Тип возвращаемого значения методов `MassEnable`, `MassDisable`, `MassDelete` с bool на string в cloudbroker/rg |
+
+### Удалено
+
+#### account
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-541 | Опциональное поле `Reason` в структуре запроса `DisableEnableRequest` в cloudapi/account |
+| BGOS-541 | Опциональное поле `Reason` в структурах запроса `DeleteRequest`, `DisableRequest`, `DisableAccountsRequest`, `RestoreRequest` в cloudbroker/account |
+
+#### compute
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-536 | Поля `Order` и `VMID` в структуре ответа `ItemComputeDisk` в cloudapi/compute и в структуре ответа `ItemDisk` в cloudbroker/compute |
+| BGOS-551 | Значение `SVA_KVM_X86` в поле `Driver` в структурах запроса `CreateRequest` и `CreateBlankRequest` в cloudapi/compute |
+
+#### disks
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-480 | Опциональное поле `Architecture` в структурах запроса `FromPlatformDiskRequest` в cloudapi/disks и в cloudbroker/disks |
+
+#### extnet
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-531 | Опциональное поле `VNFDevIP` в структуре запроса `CreateRequest` в cloudbroker/extnet |
+
+#### image
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-480 | Опциональное поле `Architecture` в структурах запроса `CreateRequest`, `ListRequest` в cloudapi/image и `CreateRequest`, `ListRequest`, `CreateCDROMImageRequest` в cloudbroker/image |
+| BGOS-489 | Поле `Meta` в структуре ответа `ItemListStacks` в cloudbroker/image |
+
+#### tasks
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-500 | Опциональное поле `GUID` в структурах ответа `ItemAsyncTask` в cloudapi/tasks и `ItemTask` в cloudbroker/tasks |
+
+#### user
+| Идентификатор
задачи | Описание |
+| --- | --- |
+| BGOS-494 | Опциональное поле `Groups` в структурe запроса `CreateRequest` в cloudbroker/user |
+
diff --git a/README.md b/README.md
index 69e0a3a..2da08e6 100644
--- a/README.md
+++ b/README.md
@@ -16,6 +16,7 @@ Decort SDK - это библиотека, написанная на языке G
- Версия 1.9.х Decort-SDK соответствует 4.1.0 версии платформы
- Версия 1.10.х Decort-SDK соответствует 4.2.0 версии платформы
- Версия 1.11.х Decort-SDK соответствует 4.3.0 версии платформы
+ - Версия 1.12.х Decort-SDK соответствует 4.4.0 версии платформы
## Оглавление
@@ -122,7 +123,8 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `Stack` - получение информации о вычислительных узлах;
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
- `VFPool` - управление пулом виртуальных сетевых функций;
-- `VINS` - управление виртуальными изолированными сетями.
+- `VINS` - управление виртуальными изолированными сетями;
+- `Zone` - управление зонами.
### Cloudbroker
@@ -133,6 +135,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `Audit` - получение информации о событиях системы;
- `APIAccess` - управление доступом к API и его объектам;
- `Backup` - управление резервным копированием;
+- `BService` - управление группами виртуальных машин (computes);
- `Compute` - управление виртуальными машинами (индивидуально);
- `Disks` - управление виртуальными дисками;
- `DPDK` - управление виртуальными сетями DPDK;
@@ -157,6 +160,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `VGPU` - управление виртуальными графическими процессорами;
- `VFPool` - управление пулом виртуальных сетевых функций;
- `VINS` - управление виртуальными изолированными сетями.
+- `Zone` - управление зонами.
## Работа с библиотекой
@@ -307,13 +311,16 @@ func main() {
- `pkg/cloudapi/sep` - для `SEP`
- `pkg/cloudapi/stack` - для `Stack`
- `pkg/cloudapi/tasks` - для `Tasks`
+ - `pkg/cloudapi/trunk` - для `Trunk`
- `pkg/cloudapi/vfpool` - для `VFPool`
- `pkg/cloudapi/vins` - для `VINS`
+ - `pkg/cloudapi/zone` - для `Zone`
- **cloudbroker**:
- `pkg/cloudbroker/account` - для `Account`
- `pkg/cloudbroker/audit` - для `Audit`
- `pkg/cloudbroker/apiaccess` - для `APIAccess`
- `pkg/cloudbroker/backup` - для `Backup`
+ - `pkg/cloudbroker/bservice` - для `Basic Service`
- `pkg/cloudbroker/compute` - для `Compute`
- `pkg/cloudbroker/disks` - для `Disks`
- `pkg/cloudbroker/dpdknet` - для `DPDK`
@@ -334,10 +341,12 @@ func main() {
- `pkg/cloudbroker/sep` - для `SEP`
- `pkg/cloudbroker/stack` - для `Stack`
- `pkg/cloudbroker/tasks` - для `Tasks`
+ - `pkg/cloudbroker/trunk` - для `Trunk`
- `pkg/cloudbroker/user` - для `User`
- `pkg/cloudbroker/vgpu` - для `VGPU`
- `pkg/cloudbroker/vfpool` - для `VFPool`
- `pkg/cloudbroker/vins` - для `VINS`
+ - `pkg/cloudapi/zone` - для `Zone`
Все поля структуры имеют описание, в которых содержится:
@@ -495,8 +504,10 @@ func main() {
- `.SEP()` - для работы с `SEP`
- `.Stack()` - для работы с `Stack`
- `.Tasks()` - для работы с `Tasks`
+ - `.Trunk()` - для работы с `Trunk`
- `.VFPool()` - для работы с `VFPool`
- `.VINS()` - для работы с `VINS`
+ - `.Zone()` - для работы с `Zone`
Доступные методы для `.CloudBroker()`:
@@ -504,6 +515,7 @@ func main() {
- `.Audit()` - для работы с `Audit`
- `.APIAccess()` - для работы с `APIAccess`
- `.Backup()` - для работы с `Backup`
+ - `.BService()` - для работы с `BService`
- `.Compute()` - для работы с `Compute`
- `.Disks()` - для работы с `Disks`
- `.DPDKNet()` - для работы с `DPDK`
@@ -524,10 +536,12 @@ func main() {
- `.SEP()` - для работы с `SEP`
- `.Stack()` - для работы с `Stack`
- `.Tasks()` - для работы с `Tasks`
+ - `.Trunk()` - для работы с `Trunk`
- `.User()` - для работы с `User`
- `.VGPU()` - для работы с `VGPU`
- `.VFPool()` - для работы с `VFPool`
- `.VINS()` - для работы с `VINS`
+ - `.Zone()` - для работы с `Zone`
3. Вызвать метод, отвечающий за выполнение запроса и передать в него:
diff --git a/internal/validators/custom.go b/internal/validators/custom.go
index 15e457d..b8d9306 100644
--- a/internal/validators/custom.go
+++ b/internal/validators/custom.go
@@ -6,6 +6,7 @@ import (
"net/url"
"reflect"
"regexp"
+ "strconv"
"strings"
"github.com/go-playground/validator/v10"
@@ -414,6 +415,12 @@ func languageValidator(fe validator.FieldLevel) bool {
return IsInSlice(fieldValue, languageValues)
}
+func userProviderValidator(fe validator.FieldLevel) bool {
+ fieldValue := fe.Field().String()
+
+ return IsInSlice(fieldValue, userProviders)
+}
+
// sepTypeValidator is used to validate sepType fields
func sepTypeValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
@@ -421,6 +428,13 @@ func sepTypeValidator(fe validator.FieldLevel) bool {
return IsInSlice(fieldValue, sepTypeValues)
}
+// deviceValidator is used to validate extnet device fields
+func deviceValidator(fe validator.FieldLevel) bool {
+ fieldValue := fe.Field().String()
+
+ return IsInSlice(fieldValue, deviceValues)
+}
+
// ValidateRAM checks if request contains RAM value that is positive integer divisible by divisibility passed.
// It is recommended to pass constants.RAM_DIVISIBILITY as divisility arguement
func ValidateRAM(r interfaces.RequestWithRAM, divisibility uint64) error {
@@ -442,3 +456,13 @@ func ValidateRAM(r interfaces.RequestWithRAM, divisibility uint64) error {
}
return multierror.Join(errs...)
}
+
+// trunkTagsValidator checks if trunk_tags is in range from 1 to 4095
+func trunkTagsValidator(fe validator.FieldLevel) bool {
+ fieldValue := fe.Field().String()
+ numFieldValue, err := strconv.ParseInt(fieldValue, 10, 64)
+ if err != nil {
+ return false
+ }
+ return uint64(numFieldValue) >= uint64(trunkTagsMin) && uint64(numFieldValue) <= uint64(trunkTagsMax)
+}
diff --git a/internal/validators/messages.go b/internal/validators/messages.go
index 9f558ef..2fa8436 100644
--- a/internal/validators/messages.go
+++ b/internal/validators/messages.go
@@ -333,6 +333,25 @@ func errorMessage(fe validator.FieldError) string {
prefix,
fe.Field(),
joinValues(sepTypeValues))
+
+ // user validators
+ case "userProvider":
+ return fmt.Sprintf("%s %s must be one of the following: %s",
+ prefix,
+ fe.Field(),
+ joinValues(userProviders))
+
+ // trunk tags validator
+ case "trunkTags":
+ return fmt.Sprintf("%s %s must be in range from 1 to 4095",
+ prefix,
+ fe.Field())
+
+ case "device":
+ return fmt.Sprintf("%s %s must be one of the following: %s",
+ prefix,
+ fe.Field(),
+ joinValues(deviceValues))
}
return fe.Error()
diff --git a/internal/validators/validator.go b/internal/validators/validator.go
index 5e9cf29..aaae78e 100644
--- a/internal/validators/validator.go
+++ b/internal/validators/validator.go
@@ -281,10 +281,25 @@ func registerAllValidators(validate *validator.Validate) error {
return err
}
+ err = validate.RegisterValidation("userProvider", userProviderValidator)
+ if err != nil {
+ return err
+ }
+
err = validate.RegisterValidation("sepType", sepTypeValidator)
if err != nil {
return err
}
+ err = validate.RegisterValidation("device", deviceValidator)
+ if err != nil {
+ return err
+ }
+
+ err = validate.RegisterValidation("trunkTags", trunkTagsValidator)
+ if err != nil {
+ return err
+ }
+
return nil
}
diff --git a/internal/validators/values.go b/internal/validators/values.go
index 1d30630..029309a 100644
--- a/internal/validators/values.go
+++ b/internal/validators/values.go
@@ -17,17 +17,17 @@ var (
computeModeValues = []string{"EQ", "EN", "ANY"}
computeDiskTypeValues = []string{"D", "B"}
computeNetTypeValues = []string{"EXTNET", "VINS"}
- computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK"}
+ computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK", "SDN", "EMPTY", "TRUNK"}
computeOrderValues = []string{"cdrom", "network", "hd"}
computeDataDisksValues = []string{"KEEP", "DETACH", "DESTROY"}
- computeDriverValues = []string{"KVM_X86", "SVA_KVM_X86"}
+ computeDriverValues = []string{"KVM_X86"}
diskTypeValues = []string{"B", "T", "D"}
flipgroupClientTypeValues = []string{"compute", "vins"}
kvmNetTypeValues = []string{"EXTNET", "VINS", "NONE"}
- kvmx86NetTypeValues = []string{"EXTNET", "VINS", "NONE", "VFNIC", "DPDK"}
+ kvmx86NetTypeValues = []string{"EXTNET", "VINS", "EMPTY", "VFNIC", "DPDK", "SDN", "TRUNK"}
lbAlgorithmValues = []string{"roundrobin", "static-rr", "leastconn"}
@@ -49,11 +49,11 @@ var (
interfaceStateValues = []string{"on", "off"}
- actionValues = []string{"power_on", "shutdown", "force_shutdown", "reboot"}
+ actionValues = []string{"is_powered", "power_on", "shutdown", "force_shutdown", "reboot"}
vmActionValues = []string{"stop", "move"}
- computeFeaturesValues = []string{"hugepages", "numa", "cpupin", "vfnic", "dpdk", "changemac"}
+ computeFeaturesValues = []string{"hugepages", "numa", "cpupin", "vfnic", "dpdk", "changemac", "trunk"}
networkInterfaceNamingValues = []string{"eth", "ens"}
@@ -72,10 +72,16 @@ var (
sepTypeValues = []string{"hitachi", "dorado", "tatlin", "shared", "local", "des"}
languageValues = []string{"ru", "en"}
+
+ userProviders = []string{"bvs", "decs3o"}
+
+ deviceValues = []string{"primary", "secondary"}
)
const (
mtuMin = 1
-
mtuMax = 9216
+
+ trunkTagsMin = 1
+ trunkTagsMax = 4095
)
diff --git a/pkg/cloudapi/account/delete.go b/pkg/cloudapi/account/delete.go
index e543b2c..a8f2f02 100644
--- a/pkg/cloudapi/account/delete.go
+++ b/pkg/cloudapi/account/delete.go
@@ -19,18 +19,18 @@ type DeleteRequest struct {
}
// Delete completes delete an account from the system Returns true if account is deleted or was already deleted or never existed
-func (a Account) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
+func (a Account) Delete(ctx context.Context, req DeleteRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/account/delete"
- _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ result, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(result), nil
}
diff --git a/pkg/cloudapi/account/disable_enable.go b/pkg/cloudapi/account/disable_enable.go
index 09a0ace..3eb98d4 100644
--- a/pkg/cloudapi/account/disable_enable.go
+++ b/pkg/cloudapi/account/disable_enable.go
@@ -13,10 +13,6 @@ type DisableEnableRequest struct {
// ID of account
// Required: true
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
-
- // Reason of disabling
- // Required: false
- Reason string `url:"reason,omitempty" json:"reason,omitempty"`
}
// Disable disables an account
diff --git a/pkg/cloudapi/account/models.go b/pkg/cloudapi/account/models.go
index 019058e..ac7e442 100644
--- a/pkg/cloudapi/account/models.go
+++ b/pkg/cloudapi/account/models.go
@@ -165,6 +165,15 @@ type Machines struct {
Halted uint64 `json:"halted"`
}
+// Detailed information about the account zone
+type ZoneID struct {
+ // ID of zone
+ ID int64 `json:"id"`
+
+ // Name of zone
+ Name string `json:"name"`
+}
+
// Main information about account
type RecordAccount struct {
// DCLocation
@@ -253,6 +262,12 @@ type RecordAccount struct {
// VINSes
VINSes uint64 `json:"vinses"`
+
+ // Zone
+ ZoneIDs []ZoneID
+
+ // Zones
+ DefaultZoneID uint64 `json:"defaultZoneId"`
}
// Main information about compute
diff --git a/pkg/cloudapi/account/restore.go b/pkg/cloudapi/account/restore.go
index d307805..02f5f07 100644
--- a/pkg/cloudapi/account/restore.go
+++ b/pkg/cloudapi/account/restore.go
@@ -3,6 +3,7 @@ package account
import (
"context"
"net/http"
+
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
@@ -14,18 +15,18 @@ type RestoreRequest struct {
}
// Restore restores a deleted account
-func (a Account) Restore(ctx context.Context, req RestoreRequest) (bool, error) {
+func (a Account) Restore(ctx context.Context, req RestoreRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/account/restore"
- _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ result, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(result), nil
}
diff --git a/pkg/cloudapi/account/update.go b/pkg/cloudapi/account/update.go
index 3215397..efbecaa 100644
--- a/pkg/cloudapi/account/update.go
+++ b/pkg/cloudapi/account/update.go
@@ -54,6 +54,10 @@ type UpdateRequest struct {
// i.e.: ["sep1_poolName1", "sep2_poolName2", etc]
// Required: false
UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"`
+
+ // Default zone ID
+ // Required: false
+ DefaultZoneID uint64 `url:"defaultZoneId,omitempty" json:"defaultZoneId,omitempty"`
}
// Update updates an account name and resource types and limits
diff --git a/pkg/cloudapi/bservice/create.go b/pkg/cloudapi/bservice/create.go
index 79e8073..24f17e5 100644
--- a/pkg/cloudapi/bservice/create.go
+++ b/pkg/cloudapi/bservice/create.go
@@ -25,6 +25,10 @@ type CreateRequest struct {
// SSH key to deploy for the specified user. Same key will be deployed to all computes of the service
// Required: false
SSHKey string `url:"sshKey,omitempty" json:"sshKey,omitempty"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// Create creates blank BasicService instance
diff --git a/pkg/cloudapi/bservice/delete.go b/pkg/cloudapi/bservice/delete.go
index b9e7d91..30c89e9 100644
--- a/pkg/cloudapi/bservice/delete.go
+++ b/pkg/cloudapi/bservice/delete.go
@@ -16,6 +16,7 @@ type DeleteRequest struct {
// If set to False, Basic service will be deleted to recycle bin. Otherwise destroyed immediately
// Required: false
+ // Default: false
Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"`
}
diff --git a/pkg/cloudapi/bservice/migrate_to_zone.go b/pkg/cloudapi/bservice/migrate_to_zone.go
new file mode 100644
index 0000000..cd3c7fc
--- /dev/null
+++ b/pkg/cloudapi/bservice/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package bservice
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move basic service to another zone
+type MigrateToZoneRequest struct {
+ // ID of the BasicService to move
+ // Required: true
+ ServiceID uint64 `url:"serviceId" json:"serviceId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
+}
+
+// MigrateToZone moves basic service instance to new zone
+func (b BService) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/bservice/migrateToZone"
+
+ res, err := b.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
+}
diff --git a/pkg/cloudapi/bservice/models.go b/pkg/cloudapi/bservice/models.go
index 86e6416..f6a1769 100644
--- a/pkg/cloudapi/bservice/models.go
+++ b/pkg/cloudapi/bservice/models.go
@@ -88,6 +88,9 @@ type RecordBasicService struct {
// Whether user controlled
UserManaged bool `json:"userManaged"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Main information about Compute
@@ -382,6 +385,9 @@ type ItemBasicService struct {
// User Managed or not
UserManaged bool `json:"userManaged"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// List of BasicServices
diff --git a/pkg/cloudapi/compute/abort_shared_snapshot_merge.go b/pkg/cloudapi/compute/abort_shared_snapshot_merge.go
new file mode 100644
index 0000000..5b4a925
--- /dev/null
+++ b/pkg/cloudapi/compute/abort_shared_snapshot_merge.go
@@ -0,0 +1,42 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// AbortSharedSnapshotMergeRequest struct to abort shared snapshots merge
+type AbortSharedSnapshotMergeRequest struct {
+ // ID of the compute
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+
+ // Label of the snapshot
+ // Required: true
+ Label string `url:"label" json:"label" validate:"required"`
+}
+
+// AbortSharedSnapshotMerge shared snapshots merge abort
+func (c Compute) AbortSharedSnapshotMerge(ctx context.Context, req AbortSharedSnapshotMergeRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/abort_shared_snapshot_merge"
+
+ 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
+}
diff --git a/pkg/cloudapi/compute/change_mtu.go b/pkg/cloudapi/compute/change_mtu.go
new file mode 100644
index 0000000..13829de
--- /dev/null
+++ b/pkg/cloudapi/compute/change_mtu.go
@@ -0,0 +1,46 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// ChangeMTURequest struct to change MTU for a compute
+type ChangeMTURequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+
+ // Interface name or MAC address
+ // Required: true
+ Interface string `url:"interface" json:"interface" validate:"required"`
+
+ // Maximum transmission unit
+ // Required: true
+ MTU uint64 `url:"mtu" json:"mtu" validate:"required" validate:"omitempty,mtu"`
+}
+
+// ChangeMTU change MTU for compute instance
+func (c Compute) ChangeMTU(ctx context.Context, req ChangeMTURequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/change_mtu"
+
+ 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
+}
diff --git a/pkg/cloudapi/compute/get_log.go b/pkg/cloudapi/compute/get_log.go
index 2fe57e2..d673e2f 100644
--- a/pkg/cloudapi/compute/get_log.go
+++ b/pkg/cloudapi/compute/get_log.go
@@ -27,7 +27,7 @@ func (c Compute) GetLog(ctx context.Context, req GetLogRequest) (string, error)
url := "/cloudapi/compute/getLog"
- res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
if err != nil {
return "", err
}
diff --git a/pkg/cloudapi/compute/guest_agent_disable.go b/pkg/cloudapi/compute/guest_agent_disable.go
new file mode 100644
index 0000000..c709baf
--- /dev/null
+++ b/pkg/cloudapi/compute/guest_agent_disable.go
@@ -0,0 +1,38 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentDisableRequest struct to disable guest agent
+type GuestAgentDisableRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// Disable guest agent at a specific compute
+func (c Compute) GuestAgentDisable(ctx context.Context, req GuestAgentDisableRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/guest_agent_disable"
+
+ 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
+}
diff --git a/pkg/cloudapi/compute/guest_agent_enable.go b/pkg/cloudapi/compute/guest_agent_enable.go
new file mode 100644
index 0000000..dc3eaa9
--- /dev/null
+++ b/pkg/cloudapi/compute/guest_agent_enable.go
@@ -0,0 +1,38 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentEnableRequest struct to enable guest agent
+type GuestAgentEnableRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// Enable guest agent at a specific compute
+func (c Compute) GuestAgentEnable(ctx context.Context, req GuestAgentEnableRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/guest_agent_enable"
+
+ 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
+}
diff --git a/pkg/cloudapi/compute/guest_agent_execute.go b/pkg/cloudapi/compute/guest_agent_execute.go
new file mode 100644
index 0000000..fde7cf3
--- /dev/null
+++ b/pkg/cloudapi/compute/guest_agent_execute.go
@@ -0,0 +1,48 @@
+package compute
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentExecuteRequest struct to execute command from user to agent
+type GuestAgentExecuteRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+
+ // Custom command from user to agent
+ // Required: true
+ Command string `url:"command" json:"command" validate:"required"`
+
+ // Arguments to command
+ // Required: true
+ Arguments string `url:"arguments" json:"arguments" validate:"required"`
+}
+
+// Execute guest agent command
+func (c Compute) GuestAgentExecuteRequest(ctx context.Context, req GuestAgentExecuteRequest) (map[string]interface{}, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/guest_agent_execute"
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ if err != nil {
+ return nil, err
+ }
+
+ var result map[string]interface{}
+
+ err = json.Unmarshal(res, &result)
+ if err != nil {
+ return nil, err
+ }
+
+ return result, nil
+}
diff --git a/pkg/cloudapi/compute/guest_agent_feature_get.go b/pkg/cloudapi/compute/guest_agent_feature_get.go
new file mode 100644
index 0000000..95605bd
--- /dev/null
+++ b/pkg/cloudapi/compute/guest_agent_feature_get.go
@@ -0,0 +1,40 @@
+package compute
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentFeatureGetRequest struct to feature get guest agent
+type GuestAgentFeatureGetRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// List of features
+func (c Compute) GuestAgentFeatureGet(ctx context.Context, req GuestAgentFeatureGetRequest) ([]string, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/guest_agent_feature_get"
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ if err != nil {
+ return nil, err
+ }
+
+ features := make([]string, 0)
+
+ err = json.Unmarshal(res, &features)
+ if err != nil {
+ return nil, err
+ }
+
+ return features, nil
+}
diff --git a/pkg/cloudapi/compute/guest_agent_feature_update.go b/pkg/cloudapi/compute/guest_agent_feature_update.go
new file mode 100644
index 0000000..7150be7
--- /dev/null
+++ b/pkg/cloudapi/compute/guest_agent_feature_update.go
@@ -0,0 +1,38 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentFeatureUpdateRequest struct to feature update guest agent
+type GuestAgentFeatureUpdateRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// Feature update guest agent
+func (c Compute) GuestAgentFeatureUpdate(ctx context.Context, req GuestAgentFeatureUpdateRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/guest_agent_feature_update"
+
+ 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
+}
diff --git a/pkg/cloudapi/compute/migrate_to_zone.go b/pkg/cloudapi/compute/migrate_to_zone.go
new file mode 100644
index 0000000..bab15a1
--- /dev/null
+++ b/pkg/cloudapi/compute/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToRGZone struct to move compute to another zone
+type MigrateToZoneRequest struct {
+ // ID of the compute instance to move
+ // Required: true
+ ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId " validate:"required"`
+}
+
+// MoveToRG moves compute instance to new resource group
+func (c Compute) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/migrateToZone"
+
+ 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
+}
diff --git a/pkg/cloudapi/compute/models.go b/pkg/cloudapi/compute/models.go
index 3aaf0f1..3868d49 100644
--- a/pkg/cloudapi/compute/models.go
+++ b/pkg/cloudapi/compute/models.go
@@ -5,13 +5,13 @@ import "strconv"
// Access Control List
type RecordACL struct {
// Account ACL list
- AccountACL ListACL `json:"accountAcl"`
+ AccountACL ListACL `json:"accountACL"`
// Compute ACL list
- ComputeACL ListACL `json:"computeAcl"`
+ ComputeACL ListACL `json:"computeACL"`
// Resource group ACL list
- RGACL ListACL `json:"rgAcl"`
+ RGACL ListACL `json:"rgACL"`
}
type ListUsers struct {
@@ -386,6 +386,9 @@ type RecordCompute struct {
// List interfaces
Interfaces ListInterfaces `json:"interfaces"`
+ // Live migration job ID
+ LiveMigrationJobID uint64 `json:"live_migration_job_id"`
+
// Loader type
LoaderType string `json:"loaderType"`
@@ -443,6 +446,9 @@ type RecordCompute struct {
// PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"`
+ // Qemu_quest
+ QemuQuest QemuQuest `json:"qemu_guest"`
+
// Number of RAM
RAM uint64 `json:"ram"`
@@ -505,6 +511,18 @@ type RecordCompute struct {
// VNC password
VNCPassword string `json:"vncPasswd"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `json:"zoneId"`
+}
+
+type QemuQuest struct {
+ Enabled bool `json:"enabled"`
+ EnabledAgentFeatures []string `json:"enabled_agent_features"`
+ GUID string `json:"guid"`
+ LastUpdate uint64 `json:"last_update"`
+ User string `json:"user"`
}
type VGPUItem struct {
@@ -685,6 +703,9 @@ type ItemVNFInterface struct {
// QOS
QOS QOS `json:"qos"`
+ // SDN interface ID
+ SDNInterfaceID string `json:"sdn_interface_id"`
+
// Target
Target string `json:"target"`
@@ -770,9 +791,6 @@ type ItemComputeDisk struct {
// Name
Name string `json:"name"`
- // Order
- Order uint64 `json:"order"`
-
// Params
Params string `json:"params"`
@@ -836,8 +854,8 @@ type ItemComputeDisk struct {
// Updated by
UpdatedBy string `json:"updatedBy"`
- // Virtual machine ID
- VMID uint64 `json:"vmid"`
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
type ItemReplication struct {
@@ -1036,6 +1054,9 @@ type ItemCompute struct {
// List interfaces
Interfaces ListInterfaces `json:"interfaces"`
+ // Live migration job ID
+ LiveMigrationJobID uint64 `json:"live_migration_job_id"`
+
// Loader type
LoaderType string `json:"loaderType"`
@@ -1078,6 +1099,9 @@ type ItemCompute struct {
// Number of RAM
RAM uint64 `json:"ram"`
+ // Qemu_quest
+ QemuQuest QemuQuest `json:"qemu_guest"`
+
// Reference ID
ReferenceID string `json:"referenceId"`
diff --git a/pkg/cloudapi/compute/net_attach.go b/pkg/cloudapi/compute/net_attach.go
index 6e3d5f1..854a316 100644
--- a/pkg/cloudapi/compute/net_attach.go
+++ b/pkg/cloudapi/compute/net_attach.go
@@ -19,6 +19,9 @@ type NetAttachRequest struct {
// 'VINS' for connect to ViNS
// 'VFNIC' for connect to vfpool
// 'DPDK' for connect to DPDK
+ // `EMPTY` for connect empty network
+ // `SDT` for connect to SDN
+ // `TRUNK` for connect to TRUNK
// Required: true
NetType string `url:"netType" json:"netType" validate:"computex86NetType"`
@@ -36,9 +39,15 @@ type NetAttachRequest struct {
// Required: false
MACAddr string `url:"mac_addr,omitempty" json:"mac_addr,omitempty"`
- // Used only for DPDK type, must be 1-9216
- // Required: false
+ // Used only for EXTNET and DPDK
+ // For DPDK must be 1-9216
+ // For EXTNET must be 1500-9216
+ // Required: false
MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"`
+
+ // Unique identifier of logical port on SDN side
+ // Required: false
+ SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty" validate:"omitempty"`
}
// NetAttach attaches network to compute and gets info about network
diff --git a/pkg/cloudapi/compute/shared_snapshot_merge_status.go b/pkg/cloudapi/compute/shared_snapshot_merge_status.go
new file mode 100644
index 0000000..92c8a59
--- /dev/null
+++ b/pkg/cloudapi/compute/shared_snapshot_merge_status.go
@@ -0,0 +1,33 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// SharedSnapshotMergeStatusRequest struct to get shared snapshot merge status
+type SharedSnapshotMergeStatusRequest struct {
+ // ID of compute instance to get log for
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// SharedSnapshotMergeStatus shared snapshots merge status
+// returns a string representing either the current status or the progress percentage
+func (c Compute) SharedSnapshotMergeStatus(ctx context.Context, req SharedSnapshotMergeStatusRequest) (string, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return "", validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/compute/shared_snapshot_merge_status"
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
+ if err != nil {
+ return "", err
+ }
+
+ return string(res), nil
+}
diff --git a/pkg/cloudapi/disks/from_platform_disk.go b/pkg/cloudapi/disks/from_platform_disk.go
index a8fa29e..a69fd6a 100644
--- a/pkg/cloudapi/disks/from_platform_disk.go
+++ b/pkg/cloudapi/disks/from_platform_disk.go
@@ -27,12 +27,6 @@ type FromPlatformDiskRequest struct {
// Required: true
ImageType string `url:"imagetype" json:"imagetype" validate:"imageType"`
- // Binary architecture of this image
- // Should be:
- // - X86_64
- // Required: true
- Architecture string `url:"architecture" json:"architecture" validate:"imageArchitecture"`
-
// Username for the image
// Required: false
Username string `url:"username,omitempty" json:"username,omitempty"`
diff --git a/pkg/cloudapi/extnet/models.go b/pkg/cloudapi/extnet/models.go
index 8911f61..0350823 100644
--- a/pkg/cloudapi/extnet/models.go
+++ b/pkg/cloudapi/extnet/models.go
@@ -193,14 +193,17 @@ type RecordExtNet struct {
// Milestones
Milestones uint64 `json:"milestones"`
+ // MTU
+ MTU uint64 `json:"mtu"`
+
// Name
Name string `json:"name"`
// Network
Network string `json:"network"`
- // Network ID
- NetworkID uint64 `json:"networkId"`
+ // Network IDs
+ NetworkIDs NetworkIDs `json:"networkIds"`
// NTP
NTP []string `json:"ntp"`
@@ -217,9 +220,18 @@ type RecordExtNet struct {
// PriVNFDevID
PriVNFDevID uint64 `json:"priVnfDevId"`
+ // Redundant
+ Redundant bool `json:"redundant"`
+
+ // SecVnfDevId
+ SecVNFDevID uint64 `json:"secVnfDevId"`
+
// List reservations
Reservations ListReservations `json:"reservations"`
+ // List pre-reservations
+ PreReservations ListReservations `json:"pre-reservations"`
+
// Shared with
SharedWith []uint64 `json:"sharedWith"`
@@ -231,6 +243,17 @@ type RecordExtNet struct {
// VNFs
VNFs VNFs `json:"vnfs"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
+}
+
+type NetworkIDs struct {
+ // Primary
+ Primary uint64 `json:"primary"`
+
+ // Secondary
+ Secondary uint64 `json:"secondary"`
}
// Detailed information about reserved address or address pool
diff --git a/pkg/cloudapi/flipgroup/create.go b/pkg/cloudapi/flipgroup/create.go
index 97d0ce0..deea750 100644
--- a/pkg/cloudapi/flipgroup/create.go
+++ b/pkg/cloudapi/flipgroup/create.go
@@ -32,8 +32,9 @@ type CreateRequest struct {
// Type of client
// - 'compute'
// - 'vins' (will be later)
- // Required: true
- ClientType string `url:"clientType" json:"clientType" validate:"flipgroupClientType"`
+ // Required: false
+ // Default: "compute"
+ ClientType string `url:"clientType,omitempty" json:"clientType,omitempty"`
// IP address to associate with this group. If empty, the platform will autoselect IP address
// Required: false
diff --git a/pkg/cloudapi/image/create.go b/pkg/cloudapi/image/create.go
index 4c224e3..f3a94a5 100644
--- a/pkg/cloudapi/image/create.go
+++ b/pkg/cloudapi/image/create.go
@@ -2,6 +2,7 @@ package image
import (
"context"
+ "encoding/json"
"net/http"
"strconv"
@@ -69,18 +70,17 @@ type CreateRequest struct {
// Required: false
Pool string `url:"poolName,omitempty" json:"poolName,omitempty"`
- // Binary architecture of this image
- // Should be:
- // - X86_64
- // Required: false
- Architecture string `url:"architecture,omitempty" json:"architecture,omitempty" validate:"omitempty,imageArchitecture"`
-
// List of types of compute suitable for image
// Example: [ "KVM_X86" ]
// Required: true
Drivers []string `url:"drivers" json:"drivers" validate:"min=1,max=2,imageDrivers"`
}
+type asyncWrapperCreateRequest struct {
+ CreateRequest
+ AsyncMode bool `url:"asyncMode"`
+}
+
// Create creates image from a media identified by URL
func (i Image) Create(ctx context.Context, req CreateRequest) (uint64, error) {
err := validators.ValidateRequest(req)
@@ -102,3 +102,29 @@ func (i Image) Create(ctx context.Context, req CreateRequest) (uint64, error) {
return result, nil
}
+
+// AsyncCreate creates image from a media identified by URL in async mode
+func (i Image) AsyncCreate(ctx context.Context, req CreateRequest) (string, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return "", validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/image/create"
+
+ asyncReq := asyncWrapperCreateRequest{CreateRequest: req, AsyncMode: true}
+
+ res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, asyncReq)
+ if err != nil {
+ return " ", err
+ }
+
+ var taskID string
+
+ err = json.Unmarshal(res, &taskID)
+ if err != nil {
+ return "", err
+ }
+
+ return taskID, nil
+}
diff --git a/pkg/cloudapi/image/list.go b/pkg/cloudapi/image/list.go
index a3e6f7d..c24a8ab 100644
--- a/pkg/cloudapi/image/list.go
+++ b/pkg/cloudapi/image/list.go
@@ -26,10 +26,6 @@ type ListRequest struct {
// Required: false
Status string `url:"status,omitempty" json:"status,omitempty"`
- // Find by architecture
- // Required: false
- Architecture string `url:"architecture,omitempty" json:"architecture,omitempty"`
-
// Find by type
// Required: false
TypeImage string `url:"typeImage,omitempty" json:"typeImage,omitempty"`
diff --git a/pkg/cloudapi/k8s/create.go b/pkg/cloudapi/k8s/create.go
index f110c15..a98ba8b 100644
--- a/pkg/cloudapi/k8s/create.go
+++ b/pkg/cloudapi/k8s/create.go
@@ -166,6 +166,10 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// GetRAM returns RAM field values
diff --git a/pkg/cloudapi/k8s/migrate_to_zone.go b/pkg/cloudapi/k8s/migrate_to_zone.go
new file mode 100644
index 0000000..8ebe922
--- /dev/null
+++ b/pkg/cloudapi/k8s/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package k8s
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move k8s cluster to another zone
+type MigrateToZoneRequest struct {
+ // Kubernetes cluster ID to move
+ // Required: true
+ K8SID uint64 `url:"k8sId" json:"k8sId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
+}
+
+// MigrateToZone moves k8s cluster instance to new zone
+func (k8s K8S) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/k8s/migrateToZone"
+
+ res, err := k8s.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
+}
diff --git a/pkg/cloudapi/k8s/models.go b/pkg/cloudapi/k8s/models.go
index d5eb418..8d49c13 100644
--- a/pkg/cloudapi/k8s/models.go
+++ b/pkg/cloudapi/k8s/models.go
@@ -139,6 +139,9 @@ type RecordK8S struct {
// With LB
WithLB bool `json:"withLB"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Detailed information about address of the Virtual Internet Protocol
@@ -305,6 +308,9 @@ type ItemK8SCluster struct {
// List workers group
WorkersGroup ListK8SGroups `json:"workersGroups"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Information about service account
diff --git a/pkg/cloudapi/kvmx86/create.go b/pkg/cloudapi/kvmx86/create.go
index b8fe7ce..405977c 100644
--- a/pkg/cloudapi/kvmx86/create.go
+++ b/pkg/cloudapi/kvmx86/create.go
@@ -16,6 +16,9 @@ type Interface struct {
// - EXTNET
// - VFNIC
// - DPDK
+ // - EMPTY
+ // - SDN
+ // - TRUNK
NetType string `url:"netType" json:"netType" validate:"required,kvmx86NetType"`
// Network ID for connect to,
@@ -35,6 +38,10 @@ type Interface struct {
// MAC address to assign to this VM when connecting to the specified network
// Required: false
MAC string `url:"mac,omitempty" json:"mac,omitempty" validate:"omitempty"`
+
+ // SDN interface id
+ // Required: false
+ SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty"`
}
// DataDisk detailed struct for DataDisks field in CreateRequest and CreateBlankRequest
@@ -172,6 +179,10 @@ type CreateRequest struct {
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// GetRAM returns RAM field values
diff --git a/pkg/cloudapi/kvmx86/create_blank.go b/pkg/cloudapi/kvmx86/create_blank.go
index b981eb8..9e6b54d 100644
--- a/pkg/cloudapi/kvmx86/create_blank.go
+++ b/pkg/cloudapi/kvmx86/create_blank.go
@@ -88,6 +88,10 @@ type CreateBlankRequest struct {
// Does this machine supports hot resize
// Required: false
HotResize bool `url:"hotResize,omitempty" json:"hotResize,omitempty"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// GetRAM returns RAM field values
diff --git a/pkg/cloudapi/lb/create.go b/pkg/cloudapi/lb/create.go
index f469776..513ab91 100644
--- a/pkg/cloudapi/lb/create.go
+++ b/pkg/cloudapi/lb/create.go
@@ -38,12 +38,16 @@ type CreateRequest struct {
HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"`
// Start now Load balancer
- // Required: false
- Start bool `url:"start" json:"start"`
+ // Required: true
+ Start bool `url:"start" json:"start" validate:"required"`
// Text description of this load balancer
// Required: false
Description string `url:"desc,omitempty" json:"desc,omitempty"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
type wrapperCreateRequest struct {
diff --git a/pkg/cloudapi/lb/migrate_to_zone.go b/pkg/cloudapi/lb/migrate_to_zone.go
new file mode 100644
index 0000000..e491df4
--- /dev/null
+++ b/pkg/cloudapi/lb/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package lb
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move lb to another zone
+type MigrateToZoneRequest struct {
+ // ID of the load balancer instance to move
+ // Required: true
+ LBID uint64 `url:"lbId" json:"lbId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
+}
+
+// MigrateToZone moves lb instance to new zone
+func (l LB) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/lb/migrateToZone"
+
+ res, err := l.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
+}
diff --git a/pkg/cloudapi/lb/models.go b/pkg/cloudapi/lb/models.go
index 519348e..60471b7 100644
--- a/pkg/cloudapi/lb/models.go
+++ b/pkg/cloudapi/lb/models.go
@@ -8,6 +8,9 @@ type RecordLB struct {
// Access Control List
ACL interface{} `json:"acl"`
+ //Account ID
+ AccountID uint64 `json:"accountId"`
+
// BackendHAIP
BackendHAIP string `json:"backendHAIP"`
@@ -84,7 +87,7 @@ type RecordLB struct {
Status string `json:"status"`
// Sysctl Params
- SysctlParams interface{} `json:"sysctlParams"`
+ SysctlParams map[string]string `json:"sysctlParams"`
// Tech status
TechStatus string `json:"techStatus"`
@@ -100,6 +103,9 @@ type RecordLB struct {
// VINS ID
VINSID uint64 `json:"vinsId"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Main information about load balancer
diff --git a/pkg/cloudapi/locations/get_list.go b/pkg/cloudapi/locations/get_list.go
new file mode 100644
index 0000000..3676fe3
--- /dev/null
+++ b/pkg/cloudapi/locations/get_list.go
@@ -0,0 +1,71 @@
+package locations
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// ListGetRequest struct to get list of locations
+type ListGetRequest struct {
+ // Page number
+ // Required: false
+ Page uint64 `url:"page,omitempty" json:"page,omitempty"`
+
+ // Page size
+ // Required: false
+ Size uint64 `url:"size,omitempty" json:"size,omitempty"`
+
+ // Find by flag
+ // Required: false
+ Flag string `url:"flag,omitempty" json:"flag,omitempty"`
+
+ // Find by name
+ // Required: false
+ Name string `url:"name,omitempty" json:"name,omitempty"`
+
+ // Find by ID
+ // Required: false
+ ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"`
+
+ // Find by code location
+ // Required: false
+ LocationCode string `url:"locationCode,omitempty" json:"locationCode,omitempty"`
+
+ // Sort by one of supported fields, format +|-(field)
+ // Required: false
+ SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
+}
+
+// ListGet gets list of all locations as a ListLocations struct
+func (l Locations) ListGet(ctx context.Context, req ListGetRequest) (*ListLocations, error) {
+
+ res, err := l.ListGetRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ list := ListLocations{}
+
+ err = json.Unmarshal(res, &list)
+ if err != nil {
+ return nil, err
+ }
+
+ return &list, nil
+}
+
+// ListGetRaw gets list of all locations as an array of bytes
+func (l Locations) ListGetRaw(ctx context.Context, req ListGetRequest) ([]byte, error) {
+
+ if err := validators.ValidateRequest(req); err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/locations/list"
+
+ res, err := l.client.DecortApiCall(ctx, http.MethodGet, url, req)
+ return res, err
+}
diff --git a/pkg/cloudapi/locations/models.go b/pkg/cloudapi/locations/models.go
index fd0526e..adc5ea6 100644
--- a/pkg/cloudapi/locations/models.go
+++ b/pkg/cloudapi/locations/models.go
@@ -20,6 +20,9 @@ type ItemLocation struct {
// Name
Name string `json:"name"`
+ // Network Modes
+ NetworkModes []string `json:"network_modes"`
+
// Flag
Flag string `json:"flag"`
diff --git a/pkg/cloudapi/rg/create.go b/pkg/cloudapi/rg/create.go
index a994500..dad9add 100644
--- a/pkg/cloudapi/rg/create.go
+++ b/pkg/cloudapi/rg/create.go
@@ -71,6 +71,10 @@ type CreateRequest struct {
// External IP address
// Required: false
ExtIP string `url:"extIp,omitempty" json:"extIp,omitempty"`
+
+ // SDN access group id
+ // Required: false
+ SDNAccessGroupID string `url:"sdn_access_group_id,omitempty" json:"sdn_access_group_id,omitempty"`
}
// Create creates resource group
diff --git a/pkg/cloudapi/rg/models.go b/pkg/cloudapi/rg/models.go
index 6232570..a8311cf 100644
--- a/pkg/cloudapi/rg/models.go
+++ b/pkg/cloudapi/rg/models.go
@@ -134,6 +134,9 @@ type RecordResourceGroup struct {
// List of resource types
ResTypes []string `json:"resourceTypes"`
+ // SDN access group id
+ SDNAccessGroupID string `json:"sdn_access_group_id"`
+
// Secret
Secret string `json:"secret"`
@@ -227,6 +230,9 @@ type ItemResourceGroup struct {
// List of resource types
ResTypes []string `json:"resourceTypes"`
+ // SDN access group id
+ SDNAccessGroupID string `json:"sdn_access_group_id"`
+
// Secret
Secret string `json:"secret"`
diff --git a/pkg/cloudapi/tasks/models.go b/pkg/cloudapi/tasks/models.go
index c9133ab..0680d41 100644
--- a/pkg/cloudapi/tasks/models.go
+++ b/pkg/cloudapi/tasks/models.go
@@ -46,9 +46,6 @@ type RecordAsyncTask struct {
// Detailed information about task
type ItemAsyncTask struct {
RecordAsyncTask
-
- // GUID
- GUID string `json:"guid"`
}
// List of tasks
diff --git a/pkg/cloudapi/trunk.go b/pkg/cloudapi/trunk.go
new file mode 100644
index 0000000..86c8997
--- /dev/null
+++ b/pkg/cloudapi/trunk.go
@@ -0,0 +1,10 @@
+package cloudapi
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/trunk"
+)
+
+// Accessing the Trunk method group
+func (ca *CloudAPI) Trunk() *trunk.Trunk {
+ return trunk.New(ca.client)
+}
diff --git a/pkg/cloudapi/trunk/get.go b/pkg/cloudapi/trunk/get.go
new file mode 100644
index 0000000..d47e9a8
--- /dev/null
+++ b/pkg/cloudapi/trunk/get.go
@@ -0,0 +1,46 @@
+package trunk
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GetRequest struct to get information about a trunk
+type GetRequest struct {
+ // ID of trunk
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Get gets detailed information about a trunk as a ItemTrunk struct
+func (t Trunk) Get(ctx context.Context, req GetRequest) (*ItemTrunk, error) {
+ res, err := t.GetRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ info := ItemTrunk{}
+
+ err = json.Unmarshal(res, &info)
+ if err != nil {
+ return nil, err
+ }
+
+ return &info, nil
+}
+
+// GetRaw gets detailed information about a trunk as an array of bytes
+func (t Trunk) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/trunk/get"
+
+ res, err := t.client.DecortApiCall(ctx, http.MethodGet, url, req)
+ return res, err
+}
diff --git a/pkg/cloudapi/trunk/list.go b/pkg/cloudapi/trunk/list.go
new file mode 100644
index 0000000..6039949
--- /dev/null
+++ b/pkg/cloudapi/trunk/list.go
@@ -0,0 +1,61 @@
+package trunk
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// ListRequest struct to get list of trunks
+type ListRequest struct {
+ // Account access ID to filter by
+ AccountIDs []uint64 `url:"account_ids,omitempty" json:"account_ids,omitempty"`
+
+ // ID of the trunk to filter by
+ IDs []uint64 `url:"ids,omitempty" json:"ids,omitempty"`
+
+ // Sort by one of supported fields, format ±
+ SortBy string `url:"sort_by,omitempty" json:"sort_by,omitempty"`
+
+ // Trunk tags to filter by
+ TrunkTags string `url:"trunk_tags,omitempty" json:"trunk_tags,omitempty" validate:"omitempty,trunkTags"`
+
+ // Page number
+ Page uint64 `url:"page,omitempty" json:"page,omitempty"`
+
+ // Page size
+ Size uint64 `url:"size,omitempty" json:"size,omitempty"`
+}
+
+// List gets list of all trunks as a ListTrunks struct
+func (t Trunk) List(ctx context.Context, req ListRequest) (*ListTrunks, error) {
+
+ res, err := t.ListRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ list := ListTrunks{}
+
+ err = json.Unmarshal(res, &list)
+ if err != nil {
+ return nil, err
+ }
+
+ return &list, nil
+}
+
+// ListRaw gets list of all trunks as an array of bytes
+func (t Trunk) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
+
+ if err := validators.ValidateRequest(req); err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/trunk/list"
+
+ res, err := t.client.DecortApiCall(ctx, http.MethodGet, url, req)
+ return res, err
+}
diff --git a/pkg/cloudapi/trunk/models.go b/pkg/cloudapi/trunk/models.go
new file mode 100644
index 0000000..de7742a
--- /dev/null
+++ b/pkg/cloudapi/trunk/models.go
@@ -0,0 +1,59 @@
+package trunk
+
+type ItemTrunk struct {
+
+ // List of account IDs with access to this trunk
+ AccountIDs []uint64 `json:"accountIds"`
+
+ // Created at
+ CreatedAt uint64 `json:"created_at"`
+
+ // Created by
+ CreatedBy string `json:"created_by"`
+
+ // Deleted at
+ DeletedAt uint64 `json:"deleted_at"`
+
+ // Deleted by
+ DeletedBy string `json:"deleted_by"`
+
+ // Description of a trunk
+ Description string `json:"description"`
+
+ // GUID
+ GUID uint64 `json:"guid"`
+
+ // ID of a trunk
+ ID uint64 `json:"id"`
+
+ // MAC
+ MAC string `json:"mac"`
+
+ // Name of a trunk
+ Name string `json:"name"`
+
+ // Native VLAN ID
+ NativeVLANID uint64 `json:"nativeVlanId"`
+
+ // OVS bridge name
+ OVSBridge string `json:"ovsBridge"`
+
+ // If the trunk is enabled
+ Status string `json:"status"`
+
+ // List of trunk tags (values between 1-4095)
+ TrunkTags string `json:"trunkTags"`
+
+ // Updated at
+ UpdatedAt uint64 `json:"updated_at"`
+
+ // Updated by
+ UpdatedBy string `json:"updated_by"`
+}
+
+// List of trunks
+type ListTrunks struct {
+ Data []ItemTrunk `json:"data"`
+
+ EntryCount uint64 `json:"entryCount"`
+}
diff --git a/pkg/cloudapi/trunk/trunk.go b/pkg/cloudapi/trunk/trunk.go
new file mode 100644
index 0000000..e4c7605
--- /dev/null
+++ b/pkg/cloudapi/trunk/trunk.go
@@ -0,0 +1,18 @@
+// API Actor API for trunk nerworks
+package trunk
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
+)
+
+// Structure for creating request to trunk
+type Trunk struct {
+ client interfaces.Caller
+}
+
+// Builder for trunk endpoints
+func New(client interfaces.Caller) *Trunk {
+ return &Trunk{
+ client,
+ }
+}
diff --git a/pkg/cloudapi/vins/create_in_account.go b/pkg/cloudapi/vins/create_in_account.go
index d6b0ab6..b4f9f49 100644
--- a/pkg/cloudapi/vins/create_in_account.go
+++ b/pkg/cloudapi/vins/create_in_account.go
@@ -53,6 +53,10 @@ type CreateInAccountRequest struct {
// List of static routes, each item must have destination, netmask, and gateway fields
// Required: false
Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
type wrapperCreateRequestInAcc struct {
diff --git a/pkg/cloudapi/vins/create_in_rg.go b/pkg/cloudapi/vins/create_in_rg.go
index db8bc78..351bf84 100644
--- a/pkg/cloudapi/vins/create_in_rg.go
+++ b/pkg/cloudapi/vins/create_in_rg.go
@@ -47,6 +47,10 @@ type CreateInRGRequest struct {
// List of static routes, each item must have destination, netmask, and gateway fields
// Required: false
Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
type wrapperCreateRequestInRG struct {
diff --git a/pkg/cloudapi/vins/migrate_to_zone.go b/pkg/cloudapi/vins/migrate_to_zone.go
new file mode 100644
index 0000000..97d1ae8
--- /dev/null
+++ b/pkg/cloudapi/vins/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package vins
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move VINS to another zone
+type MigrateToZoneRequest struct {
+ // VINSID to move
+ // Required: true
+ VINSID uint64 `url:"net_id" json:"net_id" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zone_id" json:"zone_id" validate:"required"`
+}
+
+// MigrateToZone moves VINS instance to new zone
+func (v VINS) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/vins/migrateToZone"
+
+ res, err := v.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
+}
diff --git a/pkg/cloudapi/vins/models.go b/pkg/cloudapi/vins/models.go
index 1f54c3a..6dfef13 100644
--- a/pkg/cloudapi/vins/models.go
+++ b/pkg/cloudapi/vins/models.go
@@ -305,6 +305,9 @@ type ItemVNFInterface struct {
// NodeID
NodeID int64 `json:"nodeId"`
+ // SDNInterfaceID
+ SDNInterfaceID string `json:"sdn_interface_id"`
+
// PCI slot
PCISlot int64 `json:"pciSlot"`
@@ -732,6 +735,9 @@ type RecordVINS struct {
// VXLAN ID
VXLANID uint64 `json:"vxlanId"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Information about libvirt settings
diff --git a/pkg/cloudapi/zone.go b/pkg/cloudapi/zone.go
new file mode 100644
index 0000000..bf93096
--- /dev/null
+++ b/pkg/cloudapi/zone.go
@@ -0,0 +1,10 @@
+package cloudapi
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/zone"
+)
+
+// Accessing the Zone method group
+func (ca *CloudAPI) Zone() *zone.Zone {
+ return zone.New(ca.client)
+}
diff --git a/pkg/cloudapi/zone/filter.go b/pkg/cloudapi/zone/filter.go
new file mode 100644
index 0000000..ec55a7a
--- /dev/null
+++ b/pkg/cloudapi/zone/filter.go
@@ -0,0 +1,53 @@
+package zone
+
+// FilterByID returns ListZones with specified ID.
+func (list ListZones) FilterByID(id uint64) ListZones {
+ predicate := func(izone RecordZone) bool {
+ return izone.ID == id
+ }
+
+ return list.FilterFunc(predicate)
+}
+
+// FilterByName returns ListZones with specified Name.
+func (list ListZones) FilterByName(name string) ListZones {
+ predicate := func(izone RecordZone) bool {
+ return izone.Name == name
+ }
+
+ return list.FilterFunc(predicate)
+}
+
+// FilterByStatus returns ListZones with specified Status.
+func (list ListZones) FilterByStatus(status string) ListZones {
+ predicate := func(izone RecordZone) bool {
+ return izone.Status == status
+ }
+
+ return list.FilterFunc(predicate)
+}
+
+// FilterFunc allows filtering ListZones based on a user-specified predicate.
+func (list ListZones) FilterFunc(predicate func(RecordZone) bool) ListZones {
+ var result ListZones
+
+ for _, item := range list.Data {
+ if predicate(item) {
+ result.Data = append(result.Data, item)
+ }
+ }
+
+ result.EntryCount = uint64(len(result.Data))
+
+ return result
+}
+
+// FindOne returns first found RecordZone
+// If none was found, returns an empty struct.
+func (list ListZones) FindOne() RecordZone {
+ if list.EntryCount == 0 {
+ return RecordZone{}
+ }
+
+ return list.Data[0]
+}
diff --git a/pkg/cloudapi/zone/filter_test.go b/pkg/cloudapi/zone/filter_test.go
new file mode 100644
index 0000000..5966796
--- /dev/null
+++ b/pkg/cloudapi/zone/filter_test.go
@@ -0,0 +1,86 @@
+package zone
+
+import "testing"
+
+var zones = ListZones{
+ Data: []RecordZone{
+
+ {
+ ID: 2,
+ GUID: 0,
+ GID: 0,
+ Name: "System Config",
+ Description: "",
+ Deletable: true,
+ Status: "LOCKED",
+ CreatedTime: 1640995200, // 2022-01-01
+ UpdatedTime: 1640995200,
+ NodeIDs: nil,
+ },
+ {
+ ID: 5,
+ GUID: 5500,
+ GID: 6600,
+ Name: "ssss Nodes",
+ Description: " infrastructure",
+ Deletable: true,
+ Status: "DISABLED",
+ CreatedTime: 1577836800, // 2020-01-01
+ UpdatedTime: 1580515200, // 2020-02-01
+ NodeIDs: []uint64{777, 888, 999},
+ },
+ {
+ ID: 10,
+ GUID: 5500,
+ GID: 6600,
+ Name: "node",
+ Description: "infrastructure",
+ Deletable: true,
+ Status: "DISABLED",
+ CreatedTime: 1577836800,
+ UpdatedTime: 1580515200,
+ NodeIDs: []uint64{777, 888, 999},
+ },
+ },
+}
+
+func TestFilterByID(t *testing.T) {
+ actual := zones.FilterByID(10).FindOne()
+
+ if actual.ID != 10 {
+ t.Fatal("expected ID 10, found: ", actual.ID)
+ }
+}
+
+func TestFilterByName(t *testing.T) {
+ name := "node"
+ actual := zones.FilterByName(name).FindOne()
+
+ if actual.Name != name {
+ t.Fatal("expected ", name, " found: ", actual.Name)
+ }
+}
+
+func TestFilterByStatus(t *testing.T) {
+ actual := zones.FilterByStatus("DISABLED")
+
+ if len(actual.Data) != 2 {
+ t.Fatal("expected 2 found, actual: ", len(actual.Data))
+ }
+
+ for _, item := range actual.Data {
+ if item.Status != "DISABLED" {
+ t.Fatal("expected Status 'DISABLED', found: ", item.Status)
+ }
+ }
+}
+
+func TestFilterFunc(t *testing.T) {
+ actual := zones.FilterFunc(func(ien RecordZone) bool {
+ return ien.Deletable == true
+ })
+
+ if len(actual.Data) != 3 {
+ t.Fatal("expected 3 elements, found: ", len(actual.Data))
+ }
+}
diff --git a/pkg/cloudapi/zone/get.go b/pkg/cloudapi/zone/get.go
new file mode 100644
index 0000000..a583df0
--- /dev/null
+++ b/pkg/cloudapi/zone/get.go
@@ -0,0 +1,46 @@
+package zone
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GetRequest struct to get detailed information about zone
+type GetRequest struct {
+ // ID of zone
+ // Required: true
+ ID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Get gets detailed information about zone struct
+func (e Zone) Get(ctx context.Context, req GetRequest) (*RecordZone, error) {
+ res, err := e.GetRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ info := RecordZone{}
+
+ err = json.Unmarshal(res, &info)
+ if err != nil {
+ return nil, err
+ }
+
+ return &info, nil
+}
+
+// GetRaw gets detailed information about zone as an array of bytes
+func (e Zone) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/zone/get"
+
+ res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ return res, err
+}
diff --git a/pkg/cloudapi/zone/ids.go b/pkg/cloudapi/zone/ids.go
new file mode 100644
index 0000000..33f6193
--- /dev/null
+++ b/pkg/cloudapi/zone/ids.go
@@ -0,0 +1,10 @@
+package zone
+
+// IDs gets array of IDs from ListZones struct
+func (le ListZones) IDs() []uint64 {
+ res := make([]uint64, 0, len(le.Data))
+ for _, e := range le.Data {
+ res = append(res, e.ID)
+ }
+ return res
+}
diff --git a/pkg/cloudapi/zone/list.go b/pkg/cloudapi/zone/list.go
new file mode 100644
index 0000000..eb90577
--- /dev/null
+++ b/pkg/cloudapi/zone/list.go
@@ -0,0 +1,84 @@
+package zone
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// ListRequest struct to get list of zones
+type ListRequest struct {
+
+ // Find by ID
+ // Required: false
+ ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"`
+
+ // Find by Grid ID
+ // Required: false
+ GID uint64 `url:"gid,omitempty" json:"gid,omitempty"`
+
+ // Find by name
+ // Required: false
+ Name string `url:"name,omitempty" json:"name,omitempty"`
+
+ // Find by description
+ // Required: false
+ Description string `url:"description,omitempty" json:"description,omitempty"`
+
+ // Find by status
+ // Required: false
+ Status string `url:"status,omitempty" json:"status,omitempty"`
+
+ // Find by deletable
+ // Required: false
+ Deletable bool `url:"deletable,omitempty" json:"deletable,omitempty"`
+
+ // Find by node ID
+ // Required: false
+ NodeID uint64 `url:"nodeId,omitempty" json:"nodeId,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 all zones as a ListZones struct
+func (e Zone) List(ctx context.Context, req ListRequest) (*ListZones, error) {
+
+ res, err := e.ListRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ list := ListZones{}
+
+ err = json.Unmarshal(res, &list)
+ if err != nil {
+ return nil, err
+ }
+
+ return &list, nil
+}
+
+// ListRaw gets list of all available zones as an array of bytes
+func (e Zone) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
+
+ if err := validators.ValidateRequest(req); err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudapi/zone/list"
+
+ res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ return res, err
+}
diff --git a/pkg/cloudapi/zone/migrate_to_zone.go b/pkg/cloudapi/zone/migrate_to_zone.go
new file mode 100644
index 0000000..6be865f
--- /dev/null
+++ b/pkg/cloudapi/zone/migrate_to_zone.go
@@ -0,0 +1 @@
+package zone
diff --git a/pkg/cloudapi/zone/models.go b/pkg/cloudapi/zone/models.go
new file mode 100644
index 0000000..b2340ca
--- /dev/null
+++ b/pkg/cloudapi/zone/models.go
@@ -0,0 +1,42 @@
+package zone
+
+type ListZones struct {
+ // Entry count
+ EntryCount uint64 `json:"entryCount"`
+
+ // Data
+ Data []RecordZone `json:"data"`
+}
+
+// Detailed information about the zone record
+type RecordZone struct {
+ // ID
+ ID uint64 `json:"id"`
+
+ // GUID
+ GUID uint64 `json:"guid"`
+
+ // GID
+ GID uint64 `json:"gid"`
+
+ // Name
+ Name string `json:"name"`
+
+ // Description
+ Description string `json:"description"`
+
+ // Deletable flag
+ Deletable bool `json:"deletable"`
+
+ // Status
+ Status string `json:"status"`
+
+ // Created timestamp
+ CreatedTime uint64 `json:"createdTime"`
+
+ // Updated timestamp
+ UpdatedTime uint64 `json:"updatedTime"`
+
+ // List of associated Node IDs
+ NodeIDs []uint64 `json:"nodeIds"`
+}
diff --git a/pkg/cloudapi/zone/serialize.go b/pkg/cloudapi/zone/serialize.go
new file mode 100644
index 0000000..5e22cf3
--- /dev/null
+++ b/pkg/cloudapi/zone/serialize.go
@@ -0,0 +1,43 @@
+package zone
+
+import (
+ "encoding/json"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/serialization"
+)
+
+// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
+//
+// In order to serialize with indent make sure to follow these guidelines:
+// - First argument -> prefix
+// - Second argument -> indent
+func (list ListZones) Serialize(params ...string) (serialization.Serialized, error) {
+ if list.EntryCount == 0 {
+ return []byte{}, nil
+ }
+
+ if len(params) > 1 {
+ prefix := params[0]
+ indent := params[1]
+
+ return json.MarshalIndent(list, prefix, indent)
+ }
+
+ return json.Marshal(list)
+}
+
+// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
+//
+// In order to serialize with indent make sure to follow these guidelines:
+// - First argument -> prefix
+// - Second argument -> indent
+func (item RecordZone) Serialize(params ...string) (serialization.Serialized, error) {
+ if len(params) > 1 {
+ prefix := params[0]
+ indent := params[1]
+
+ return json.MarshalIndent(item, prefix, indent)
+ }
+
+ return json.Marshal(item)
+}
diff --git a/pkg/cloudapi/zone/zone.go b/pkg/cloudapi/zone/zone.go
new file mode 100644
index 0000000..f0605f5
--- /dev/null
+++ b/pkg/cloudapi/zone/zone.go
@@ -0,0 +1,18 @@
+// API Actor for use zones
+package zone
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
+)
+
+// Structure for creating request to zone
+type Zone struct {
+ client interfaces.Caller
+}
+
+// Builder for zone endpoints
+func New(client interfaces.Caller) *Zone {
+ return &Zone{
+ client,
+ }
+}
diff --git a/pkg/cloudbroker/account/add_zone.go b/pkg/cloudbroker/account/add_zone.go
new file mode 100644
index 0000000..cb2be6d
--- /dev/null
+++ b/pkg/cloudbroker/account/add_zone.go
@@ -0,0 +1,42 @@
+package account
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// AddZoneRequest struct for adding zone to account for a user
+type AddZoneRequest struct {
+ // ID of account to add to
+ // Required: true
+ AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
+
+ // IDs of zones
+ // Required: true
+ ZoneIDs []uint64 `url:"zoneIds" json:"zoneIds" validate:"required"`
+}
+
+// AddUser gives a user access rights.
+func (a Account) AddZone(ctx context.Context, req AddZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/account/addZone"
+
+ res, err := a.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
+}
diff --git a/pkg/cloudbroker/account/create.go b/pkg/cloudbroker/account/create.go
index 6fca46f..087211b 100644
--- a/pkg/cloudbroker/account/create.go
+++ b/pkg/cloudbroker/account/create.go
@@ -60,9 +60,17 @@ type CreateRequest struct {
UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"`
// Advanced compute features,
- // one of: hugepages, numa, cpupin, vfnic, dpdk, changemac
+ // one of: hugepages, numa, cpupin, vfnic, dpdk, changemac, trunk
// Required: false
ComputeFeatures []string `url:"computeFeatures,omitempty" json:"computeFeatures,omitempty" validate:"omitempty,computeFeatures"`
+
+ // Default zone ID
+ // Required: false
+ DefaultZoneID uint64 `url:"defaultZoneId,omitempty" json:"defaultZoneId,omitempty"`
+
+ // Zones
+ // Required: false
+ ZoneIDs []uint64 `url:"zoneIds,omitempty" json:"zoneIds,omitempty"`
}
// Create creates account
diff --git a/pkg/cloudbroker/account/delete.go b/pkg/cloudbroker/account/delete.go
index fad7b3e..674d39c 100644
--- a/pkg/cloudbroker/account/delete.go
+++ b/pkg/cloudbroker/account/delete.go
@@ -20,25 +20,21 @@ type DeleteRequest struct {
// Name of account
// Required: false
Name string `url:"name,omitempty" json:"name,omitempty"`
-
- // Reason of deleting
- // Required: false
- Reason string `url:"reason,omitempty" json:"reason,omitempty"`
}
// Delete completes delete an account from the system Returns true if account is deleted or was already deleted or never existed
-func (a Account) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
+func (a Account) Delete(ctx context.Context, req DeleteRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/account/delete"
- _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ result, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(result), nil
}
diff --git a/pkg/cloudbroker/account/delete_accounts.go b/pkg/cloudbroker/account/delete_accounts.go
index d5ec250..bde44d3 100644
--- a/pkg/cloudbroker/account/delete_accounts.go
+++ b/pkg/cloudbroker/account/delete_accounts.go
@@ -19,18 +19,18 @@ type DeleteAccountsRequest struct {
}
// DeleteAccounts destroys a group of accounts
-func (a Account) DeleteAccounts(ctx context.Context, req DeleteAccountsRequest) (bool, error) {
+func (a Account) DeleteAccounts(ctx context.Context, req DeleteAccountsRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/account/deleteAccounts"
- _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(res), nil
}
diff --git a/pkg/cloudbroker/account/disable.go b/pkg/cloudbroker/account/disable.go
index 20a3ed4..a4f62da 100644
--- a/pkg/cloudbroker/account/disable.go
+++ b/pkg/cloudbroker/account/disable.go
@@ -13,10 +13,6 @@ type DisableRequest struct {
// ID of account
// Required: true
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
-
- // Reason of disabling
- // Required: false
- Reason string `url:"reason,omitempty" json:"reason,omitempty"`
}
// Disable disables an account
diff --git a/pkg/cloudbroker/account/disable_accounts.go b/pkg/cloudbroker/account/disable_accounts.go
index 6b91b92..eb4f75d 100644
--- a/pkg/cloudbroker/account/disable_accounts.go
+++ b/pkg/cloudbroker/account/disable_accounts.go
@@ -12,25 +12,21 @@ type DisableAccountsRequest struct {
// IDs of accounts
// Required: true
AccountIDs []uint64 `url:"accountIds" json:"accountIds" validate:"min=1"`
-
- // Reason of disabling
- // Required: false
- Reason string `url:"reason,omitempty" json:"reason,omitempty"`
}
// DisableAccounts disables accounts
-func (a Account) DisableAccounts(ctx context.Context, req DisableAccountsRequest) (bool, error) {
+func (a Account) DisableAccounts(ctx context.Context, req DisableAccountsRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/account/disableAccounts"
- _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(res), nil
}
diff --git a/pkg/cloudbroker/account/enable_accounts.go b/pkg/cloudbroker/account/enable_accounts.go
index 685a68b..4997c97 100644
--- a/pkg/cloudbroker/account/enable_accounts.go
+++ b/pkg/cloudbroker/account/enable_accounts.go
@@ -15,18 +15,18 @@ type EnableAccountsRequest struct {
}
// EnableAccounts enables accounts
-func (a Account) EnableAccounts(ctx context.Context, req EnableAccountsRequest) (bool, error) {
+func (a Account) EnableAccounts(ctx context.Context, req EnableAccountsRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/account/enableAccounts"
- _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(res), nil
}
diff --git a/pkg/cloudbroker/account/filter_test.go b/pkg/cloudbroker/account/filter_test.go
index 3b2458a..301d69f 100644
--- a/pkg/cloudbroker/account/filter_test.go
+++ b/pkg/cloudbroker/account/filter_test.go
@@ -9,16 +9,6 @@ var accounts = ListAccounts{
{
Meta: []interface{}{},
InfoAccount: InfoAccount{
- ACL: []ACL{
- {
- Explicit: true,
- GUID: "",
- Right: "CXDRAU",
- Status: "CONFIRMED",
- Type: "U",
- UserGroupID: "not_really_timofey_tkachev_1@decs3o",
- },
- },
CreatedTime: 1676878820,
DeletedTime: 0,
ID: 132847,
@@ -26,20 +16,20 @@ var accounts = ListAccounts{
Status: "CONFIRMED",
UpdatedTime: 1676645275,
},
+ ACL: []ACL{
+ {
+ Explicit: true,
+ GUID: "",
+ Right: "CXDRAU",
+ Status: "CONFIRMED",
+ Type: "U",
+ UserGroupID: "not_really_timofey_tkachev_1@decs3o",
+ },
+ },
},
{
Meta: []interface{}{},
InfoAccount: InfoAccount{
- ACL: []ACL{
- {
- Explicit: true,
- GUID: "",
- Right: "CXDRAU",
- Status: "CONFIRMED",
- Type: "U",
- UserGroupID: "timofey_tkachev_1@decs3o",
- },
- },
CreatedTime: 1676645275,
DeletedTime: 1677723401,
ID: 132846,
@@ -47,28 +37,20 @@ var accounts = ListAccounts{
Status: "DELETED",
UpdatedTime: 1676645275,
},
+ ACL: []ACL{
+ {
+ Explicit: true,
+ GUID: "",
+ Right: "CXDRAU",
+ Status: "CONFIRMED",
+ Type: "U",
+ UserGroupID: "timofey_tkachev_1@decs3o",
+ },
+ },
},
{
Meta: []interface{}{},
InfoAccount: InfoAccount{
- ACL: []ACL{
- {
- Explicit: true,
- GUID: "",
- Right: "CXDRAU",
- Status: "CONFIRMED",
- Type: "U",
- UserGroupID: "timofey_tkachev_1@decs3o",
- },
- {
- Explicit: true,
- GUID: "",
- Right: "CXDRAU",
- Status: "CONFIRMED",
- Type: "U",
- UserGroupID: "second_account@decs3o",
- },
- },
CreatedTime: 1676883850,
DeletedTime: 1676883899,
ID: 132848,
@@ -76,6 +58,24 @@ var accounts = ListAccounts{
Status: "DELETED",
UpdatedTime: 1676878820,
},
+ ACL: []ACL{
+ {
+ Explicit: true,
+ GUID: "",
+ Right: "CXDRAU",
+ Status: "CONFIRMED",
+ Type: "U",
+ UserGroupID: "timofey_tkachev_1@decs3o",
+ },
+ {
+ Explicit: true,
+ GUID: "",
+ Right: "CXDRAU",
+ Status: "CONFIRMED",
+ Type: "U",
+ UserGroupID: "second_account@decs3o",
+ },
+ },
},
},
EntryCount: 3,
diff --git a/pkg/cloudbroker/account/models.go b/pkg/cloudbroker/account/models.go
index e506d2f..e0a545a 100644
--- a/pkg/cloudbroker/account/models.go
+++ b/pkg/cloudbroker/account/models.go
@@ -102,6 +102,15 @@ type ACL struct {
UserGroupID string `json:"userGroupId"`
}
+// Access Control List with emails field
+type ACLWithEmails struct {
+ // ACL
+ ACL
+
+ // Emails
+ Emails []string `json:"emails"`
+}
+
// Resource limits
type ResourceLimits struct {
// CuC
@@ -134,9 +143,6 @@ type InfoAccount struct {
// CKey
CKey string `json:"_ckey"`
- // Access Control List
- ACL []ACL `json:"acl"`
-
// Company
Company string `json:"company"`
@@ -205,12 +211,30 @@ type InfoAccount struct {
// List of VINS IDs
VINS []uint64 `json:"vins"`
+
+ // Default zone ID
+ DefaultZoneID uint64 `json:"defaultZoneId"`
+}
+
+// Deatailed information about the account zone
+type ZoneID struct {
+ // ID of zone
+ ID int64 `json:"id"`
+
+ // Name of zone
+ Name string `json:"name"`
}
// Deatailed information about account
type RecordAccount struct {
// Main information about account
InfoAccount
+
+ // Access Control List
+ ACL []ACLWithEmails `json:"acl"`
+
+ // Zones IDs
+ ZoneIDs []ZoneID
}
// More information about account
@@ -218,8 +242,14 @@ type ItemAccount struct {
// Meta
Meta []interface{} `json:"_meta"`
+ // Access Control List
+ ACL []ACL `json:"acl"`
+
// Main information about account
InfoAccount
+
+ // Zones
+ ZoneIDs []uint64
}
// List of accounts
diff --git a/pkg/cloudbroker/account/remove_zone.go b/pkg/cloudbroker/account/remove_zone.go
new file mode 100644
index 0000000..8d67d5e
--- /dev/null
+++ b/pkg/cloudbroker/account/remove_zone.go
@@ -0,0 +1,42 @@
+package account
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// RemoveZoneRequest struct for removing zone from account for a user
+type RemoveZoneRequest struct {
+ // ID of account to add to
+ // Required: true
+ AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
+
+ // IDs of zones
+ // Required: true
+ ZoneIDs []uint64 `url:"zoneIds" json:"zoneIds" validate:"required"`
+}
+
+// RemoveZone removes zones with ids provided from a user.
+func (a Account) RemoveZone(ctx context.Context, req RemoveZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/account/removeZone"
+
+ res, err := a.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
+}
diff --git a/pkg/cloudbroker/account/restore.go b/pkg/cloudbroker/account/restore.go
index ec2e601..a02ac55 100644
--- a/pkg/cloudbroker/account/restore.go
+++ b/pkg/cloudbroker/account/restore.go
@@ -12,25 +12,21 @@ type RestoreRequest struct {
// ID an account
// Required: true
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
-
- // Reason of disabling
- // Required: false
- Reason string `url:"reason,omitempty" json:"reason,omitempty"`
}
// Restore restores a deleted account
-func (a Account) Restore(ctx context.Context, req RestoreRequest) (bool, error) {
+func (a Account) Restore(ctx context.Context, req RestoreRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/account/restore"
- _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ result, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(result), nil
}
diff --git a/pkg/cloudbroker/account/update.go b/pkg/cloudbroker/account/update.go
index 9803f8c..7c4fe5d 100644
--- a/pkg/cloudbroker/account/update.go
+++ b/pkg/cloudbroker/account/update.go
@@ -59,6 +59,10 @@ type UpdateRequest struct {
// Default: false
// Required: false
ClearUniqPools bool `url:"clearUniqPools" json:"clearUniqPools"`
+
+ // Default zone ID
+ // Required: false
+ DefaultZoneID uint64 `url:"defaultZoneId,omitempty" json:"defaultZoneId,omitempty"`
}
// Update updates an account name and resource types and limits
diff --git a/pkg/cloudbroker/account/update_compute_features.go b/pkg/cloudbroker/account/update_compute_features.go
index 35e248d..f55d5dc 100644
--- a/pkg/cloudbroker/account/update_compute_features.go
+++ b/pkg/cloudbroker/account/update_compute_features.go
@@ -15,7 +15,7 @@ type UpdateComputeFeaturesRequest struct {
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
// Advanced compute features,
- // one of: hugepages, numa, cpupin, vfnic, dpdk, changemac
+ // one of: hugepages, numa, cpupin, vfnic, dpdk, changemac, trunk
// Required: false
ComputeFeatures []string `url:"computeFeatures,omitempty" json:"computeFeatures,omitempty" validate:"omitempty,computeFeatures"`
}
diff --git a/pkg/cloudbroker/bservice/create.go b/pkg/cloudbroker/bservice/create.go
index 90b97d9..d5485b5 100644
--- a/pkg/cloudbroker/bservice/create.go
+++ b/pkg/cloudbroker/bservice/create.go
@@ -25,6 +25,10 @@ type CreateRequest struct {
// SSH key to deploy for the specified user. Same key will be deployed to all computes of the service
// Required: false
SSHKey string `url:"sshKey,omitempty" json:"sshKey,omitempty"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// Create creates blank BasicService instance
diff --git a/pkg/cloudbroker/bservice/delete.go b/pkg/cloudbroker/bservice/delete.go
index 9e53e32..504dbd8 100644
--- a/pkg/cloudbroker/bservice/delete.go
+++ b/pkg/cloudbroker/bservice/delete.go
@@ -15,8 +15,9 @@ type DeleteRequest struct {
ServiceID uint64 `url:"serviceId" json:"serviceId" validate:"required"`
// If set to False, Basic service will be deleted to recycle bin. Otherwise destroyed immediately
- // Required: true
- Permanently bool `url:"permanently" json:"permanently"`
+ // Required: false
+ // Default: false
+ Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"`
}
// Delete deletes BasicService instance
diff --git a/pkg/cloudbroker/bservice/migrate_to_zone.go b/pkg/cloudbroker/bservice/migrate_to_zone.go
new file mode 100644
index 0000000..70f1662
--- /dev/null
+++ b/pkg/cloudbroker/bservice/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package bservice
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move basic service to another zone
+type MigrateToZoneRequest struct {
+ // ID of the BasicService to move
+ // Required: true
+ ServiceID uint64 `url:"serviceId" json:"serviceId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
+}
+
+// MigrateToZone moves Basic Service instance to new zone
+func (b BService) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/bservice/migrateToZone"
+
+ res, err := b.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
+}
diff --git a/pkg/cloudbroker/bservice/models.go b/pkg/cloudbroker/bservice/models.go
index 08a0521..3790f99 100644
--- a/pkg/cloudbroker/bservice/models.go
+++ b/pkg/cloudbroker/bservice/models.go
@@ -88,6 +88,9 @@ type RecordBasicService struct {
// Whether user controlled
UserManaged bool `json:"userManaged"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// List of Groups
@@ -254,6 +257,9 @@ type ItemBasicService struct {
// User Managed or not
UserManaged bool `json:"userManaged"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// List of Snapshots
diff --git a/pkg/cloudbroker/compute/abort_shared_snapshot_merge.go b/pkg/cloudbroker/compute/abort_shared_snapshot_merge.go
new file mode 100644
index 0000000..d4aa9ec
--- /dev/null
+++ b/pkg/cloudbroker/compute/abort_shared_snapshot_merge.go
@@ -0,0 +1,42 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// AbortSharedSnapshotMergeRequest struct to abort shared snapshots merge
+type AbortSharedSnapshotMergeRequest struct {
+ // ID of the compute
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+
+ // Label of the snapshot
+ // Required: true
+ Label string `url:"label" json:"label" validate:"required"`
+}
+
+// AbortSharedSnapshotMerge shared snapshots merge abort
+func (c Compute) AbortSharedSnapshotMerge(ctx context.Context, req AbortSharedSnapshotMergeRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/abort_shared_snapshot_merge"
+
+ 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
+}
diff --git a/pkg/cloudbroker/compute/change_mtu.go b/pkg/cloudbroker/compute/change_mtu.go
new file mode 100644
index 0000000..6ebdd7f
--- /dev/null
+++ b/pkg/cloudbroker/compute/change_mtu.go
@@ -0,0 +1,46 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// ChangeMTURequest struct to change MTU for a compute
+type ChangeMTURequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+
+ // Interface name or MAC address
+ // Required: true
+ Interface string `url:"interface" json:"interface" validate:"required"`
+
+ // Maximum transmission unit
+ // Required: true
+ MTU uint64 `url:"mtu" json:"mtu" validate:"required" validate:"omitempty,mtu"`
+}
+
+// ChangeMTU change MTU for compute instance
+func (c Compute) ChangeMTU(ctx context.Context, req ChangeMTURequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/change_mtu"
+
+ 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
+}
diff --git a/pkg/cloudbroker/compute/get_log.go b/pkg/cloudbroker/compute/get_log.go
index 25881aa..fd154bd 100644
--- a/pkg/cloudbroker/compute/get_log.go
+++ b/pkg/cloudbroker/compute/get_log.go
@@ -27,7 +27,7 @@ func (c Compute) GetLog(ctx context.Context, req GetLogRequest) (string, error)
url := "/cloudbroker/compute/getLog"
- res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
if err != nil {
return "", err
}
diff --git a/pkg/cloudbroker/compute/guest_agent_disable.go b/pkg/cloudbroker/compute/guest_agent_disable.go
new file mode 100644
index 0000000..f7e4475
--- /dev/null
+++ b/pkg/cloudbroker/compute/guest_agent_disable.go
@@ -0,0 +1,38 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentDisableRequest struct to disable guest agent
+type GuestAgentDisableRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// Disable guest agent at a specific compute
+func (c Compute) GuestAgentDisable(ctx context.Context, req GuestAgentDisableRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/guest_agent_disable"
+
+ 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
+}
diff --git a/pkg/cloudbroker/compute/guest_agent_enable.go b/pkg/cloudbroker/compute/guest_agent_enable.go
new file mode 100644
index 0000000..c0e545f
--- /dev/null
+++ b/pkg/cloudbroker/compute/guest_agent_enable.go
@@ -0,0 +1,38 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentEnableRequest struct to enable guest agent
+type GuestAgentEnableRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// Enable guest agent at a specific compute
+func (c Compute) GuestAgentEnable(ctx context.Context, req GuestAgentEnableRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/guest_agent_enable"
+
+ 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
+}
diff --git a/pkg/cloudbroker/compute/guest_agent_execute.go b/pkg/cloudbroker/compute/guest_agent_execute.go
new file mode 100644
index 0000000..d2710cb
--- /dev/null
+++ b/pkg/cloudbroker/compute/guest_agent_execute.go
@@ -0,0 +1,48 @@
+package compute
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentExecuteRequest struct to execute command from user to agent
+type GuestAgentExecuteRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+
+ // Custom command from user to agent
+ // Required: true
+ Command string `url:"command" json:"command" validate:"required"`
+
+ // Arguments to command
+ // Required: true
+ Arguments string `url:"arguments" json:"arguments" validate:"required"`
+}
+
+// Execute guest agent command
+func (c Compute) GuestAgentExecuteRequest(ctx context.Context, req GuestAgentExecuteRequest) (map[string]interface{}, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/guest_agent_execute"
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ if err != nil {
+ return nil, err
+ }
+
+ var result map[string]interface{}
+
+ err = json.Unmarshal(res, &result)
+ if err != nil {
+ return nil, err
+ }
+
+ return result, nil
+}
diff --git a/pkg/cloudbroker/compute/guest_agent_feature_get.go b/pkg/cloudbroker/compute/guest_agent_feature_get.go
new file mode 100644
index 0000000..bc0538f
--- /dev/null
+++ b/pkg/cloudbroker/compute/guest_agent_feature_get.go
@@ -0,0 +1,40 @@
+package compute
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentFeatureGetRequest struct to feature get guest agent
+type GuestAgentFeatureGetRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// List of features
+func (c Compute) GuestAgentFeatureGet(ctx context.Context, req GuestAgentFeatureGetRequest) ([]string, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/guest_agent_feature_get"
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ if err != nil {
+ return nil, err
+ }
+
+ features := make([]string, 0)
+
+ err = json.Unmarshal(res, &features)
+ if err != nil {
+ return nil, err
+ }
+
+ return features, nil
+}
diff --git a/pkg/cloudbroker/compute/guest_agent_feature_update.go b/pkg/cloudbroker/compute/guest_agent_feature_update.go
new file mode 100644
index 0000000..01a7aa2
--- /dev/null
+++ b/pkg/cloudbroker/compute/guest_agent_feature_update.go
@@ -0,0 +1,38 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GuestAgentFeatureUpdateRequest struct to feature update guest agent
+type GuestAgentFeatureUpdateRequest struct {
+ // ID of compute instance
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// Feature update guest agent
+func (c Compute) GuestAgentFeatureUpdate(ctx context.Context, req GuestAgentFeatureUpdateRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/guest_agent_feature_update"
+
+ 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
+}
diff --git a/pkg/cloudbroker/compute/migrate.go b/pkg/cloudbroker/compute/migrate.go
index 1ceca2b..264ab89 100644
--- a/pkg/cloudbroker/compute/migrate.go
+++ b/pkg/cloudbroker/compute/migrate.go
@@ -2,6 +2,7 @@ package compute
import (
"context"
+ "encoding/json"
"net/http"
"strconv"
@@ -24,6 +25,11 @@ type MigrateRequest struct {
Force bool `url:"force,omitempty" json:"force,omitempty"`
}
+type asyncWrapperMigrateRequest struct {
+ MigrateRequest
+ SyncMode bool `url:"sync"`
+}
+
// Migrate migrates compute to another stack
func (c Compute) Migrate(ctx context.Context, req MigrateRequest) (bool, error) {
err := validators.ValidateRequest(req)
@@ -33,7 +39,9 @@ func (c Compute) Migrate(ctx context.Context, req MigrateRequest) (bool, error)
url := "/cloudbroker/compute/migrate"
- res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ syncReq := asyncWrapperMigrateRequest{MigrateRequest: req, SyncMode: true}
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, syncReq)
if err != nil {
return false, err
}
@@ -45,3 +53,29 @@ func (c Compute) Migrate(ctx context.Context, req MigrateRequest) (bool, error)
return result, nil
}
+
+// AsyncMigrate migrates compute to another stack in async mode
+func (c Compute) AsyncMigrate(ctx context.Context, req MigrateRequest) (string, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return "", validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/migrate"
+
+ asyncReq := asyncWrapperMigrateRequest{MigrateRequest: req, SyncMode: false}
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, asyncReq)
+ if err != nil {
+ return " ", err
+ }
+
+ var taskID string
+
+ err = json.Unmarshal(res, &taskID)
+ if err != nil {
+ return "", err
+ }
+
+ return taskID, nil
+}
diff --git a/pkg/cloudbroker/compute/migrate_to_zone.go b/pkg/cloudbroker/compute/migrate_to_zone.go
new file mode 100644
index 0000000..0d5095c
--- /dev/null
+++ b/pkg/cloudbroker/compute/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move compute to another zone
+type MigrateToZoneRequest struct {
+ // ID of the compute instance to move
+ // Required: true
+ ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
+}
+
+// MoveToZone moves compute to new zone
+func (c Compute) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/migrateToZone"
+
+ 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
+}
diff --git a/pkg/cloudbroker/compute/models.go b/pkg/cloudbroker/compute/models.go
index 24572fa..4701105 100644
--- a/pkg/cloudbroker/compute/models.go
+++ b/pkg/cloudbroker/compute/models.go
@@ -44,7 +44,7 @@ type ItemACL struct {
// ACL compute information
type ItemComputeACL struct {
// Explicit
- Explicit string `json:"explicit"`
+ Explicit bool `json:"explicit"`
// GUID
GUID string `json:"guid"`
@@ -412,9 +412,6 @@ type ItemDisk struct {
// Name
Name string `json:"name"`
- // Order
- Order uint64 `json:"order"`
-
// Params
Params string `json:"params"`
@@ -486,9 +483,6 @@ type ItemDisk struct {
// Updated by
UpdatedBy string `json:"updatedBy"`
-
- // Virtual machine ID
- VMID uint64 `json:"vmid"`
}
type ItemReplication struct {
@@ -573,6 +567,9 @@ type ItemInterface struct {
// QOS
QOS QOS `json:"qos"`
+ // SDN interface ID
+ SDNInterfaceID string `json:"sdn_interface_id"`
+
// Target
Target string `json:"target"`
@@ -708,6 +705,9 @@ type InfoCompute struct {
// List interfaces
Interfaces ListInterfaces `json:"interfaces"`
+ // Live migration job ID
+ LiveMigrationJobID uint64 `json:"live_migration_job_id"`
+
// Loader type
LoaderType string `json:"loaderType"`
@@ -750,6 +750,9 @@ type InfoCompute struct {
// PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"`
+ // Qemu_quest
+ QemuQuest QemuQuest `json:"qemu_guest"`
+
// Number of RAM
RAM uint64 `json:"ram"`
@@ -818,6 +821,17 @@ type InfoCompute struct {
// Virtual image ID
VirtualImageID uint64 `json:"virtualImageId"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
+}
+
+type QemuQuest struct {
+ Enabled bool `json:"enabled"`
+ EnabledAgentFeatures []string `json:"enabled_agent_features"`
+ GUID string `json:"guid"`
+ LastUpdate uint64 `json:"last_update"`
+ User string `json:"user"`
}
// Information about libvirt settings
@@ -954,6 +968,9 @@ type RecordCompute struct {
// List interfaces
Interfaces ListInterfaces `json:"interfaces"`
+ // Live migration job ID
+ LiveMigrationJobID uint64 `json:"live_migration_job_id"`
+
// Loader type
LoaderType string `json:"loaderType"`
@@ -1014,6 +1031,9 @@ type RecordCompute struct {
// PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"`
+ // Qemu_quest
+ QemuQuest QemuQuest `json:"qemu_guest"`
+
// Number of RAM
RAM uint64 `json:"ram"`
@@ -1085,6 +1105,9 @@ type RecordCompute struct {
// VNC password
VNCPassword string `json:"vncPasswd"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
type VGPUItem struct {
diff --git a/pkg/cloudbroker/compute/net_attach.go b/pkg/cloudbroker/compute/net_attach.go
index 5b41d4b..7975b14 100644
--- a/pkg/cloudbroker/compute/net_attach.go
+++ b/pkg/cloudbroker/compute/net_attach.go
@@ -19,6 +19,9 @@ type NetAttachRequest struct {
// 'VINS' for connect to ViNS
// 'VFNIC' for connect to vfpool
// 'DPDK' for connect to DPDK
+ // `EMPTY` for connect empty network
+ // `SDT` for connect to SDN
+ // `TRUNK` for connect to TRUNK
// Required: true
NetType string `url:"netType" json:"netType" validate:"computex86NetType"`
@@ -36,9 +39,15 @@ type NetAttachRequest struct {
// Required: false
MACAddr string `url:"mac_addr,omitempty" json:"mac_addr,omitempty"`
- // Used only for DPDK type, must be 1-9216
- // Required: false
+ // Used only for EXTNET and DPDK
+ // For DPDK must be 1-9216
+ // For EXTNET must be 1500-9216
+ // Required: false
MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"`
+
+ // Unique identifier of logical port on SDN side
+ // Required: false
+ SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty" validate:"omitempty"`
}
// NetAttach attaches network to compute and gets info about network
diff --git a/pkg/cloudbroker/compute/shared_snapshot_merge_status.go b/pkg/cloudbroker/compute/shared_snapshot_merge_status.go
new file mode 100644
index 0000000..ad00854
--- /dev/null
+++ b/pkg/cloudbroker/compute/shared_snapshot_merge_status.go
@@ -0,0 +1,33 @@
+package compute
+
+import (
+ "context"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// SharedSnapshotMergeStatusRequest struct to get shared snapshot merge status
+type SharedSnapshotMergeStatusRequest struct {
+ // ID of compute instance to get log for
+ // Required: true
+ ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
+}
+
+// SharedSnapshotMergeStatus shared snapshots merge status
+// returns a string representing either the current status or the progress percentage
+func (c Compute) SharedSnapshotMergeStatus(ctx context.Context, req SharedSnapshotMergeStatusRequest) (string, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return "", validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/compute/shared_snapshot_merge_status"
+
+ res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
+ if err != nil {
+ return "", err
+ }
+
+ return string(res), nil
+}
diff --git a/pkg/cloudbroker/disks/from_platform_disk.go b/pkg/cloudbroker/disks/from_platform_disk.go
index 690b05c..1682abd 100644
--- a/pkg/cloudbroker/disks/from_platform_disk.go
+++ b/pkg/cloudbroker/disks/from_platform_disk.go
@@ -27,12 +27,6 @@ type FromPlatformDiskRequest struct {
// Required: true
ImageType string `url:"imagetype" json:"imagetype" validate:"imageType"`
- // Binary architecture of this image
- // Should be:
- // - X86_64
- // Required: true
- Architecture string `url:"architecture" json:"architecture" validate:"imageArchitecture"`
-
// Username for the image
// Required: false
Username string `url:"username,omitempty" json:"username,omitempty"`
diff --git a/pkg/cloudbroker/extnet/create.go b/pkg/cloudbroker/extnet/create.go
index 7ea42c3..0cfa90f 100644
--- a/pkg/cloudbroker/extnet/create.go
+++ b/pkg/cloudbroker/extnet/create.go
@@ -47,6 +47,11 @@ type CreateRequest struct {
// Required: false
DNS []string `url:"dns,omitempty" json:"dns,omitempty"`
+ // Maximum transmission unit
+ // Default: 1500
+ // Required: false
+ MTU uint `url:"mtu,omitempty" json:"mtu,omitempty"`
+
// List of NTP addresses
// Required: false
NTP []string `url:"ntp,omitempty" json:"ntp,omitempty"`
@@ -71,9 +76,13 @@ type CreateRequest struct {
// Required: false
EndIP string `url:"endIP,omitempty" json:"endIP,omitempty"`
- // IP to create VNFDev with
+ // IP to create primary vnfdev with
+ // Required: false
+ PriVNFDevIP string `url:"priVnfdevIP,omitempty" json:"priVnfdevIP,omitempty"`
+
+ // IP to create secondary vnfdev with
// Required: false
- VNFDevIP string `url:"vnfdevIP,omitempty" json:"vnfdevIP,omitempty"`
+ SecVNFDevIP string `url:"secVnfdevIP,omitempty" json:"secVnfdevIP,omitempty"`
// Number of pre created reservations
// Required: false
@@ -86,6 +95,15 @@ type CreateRequest struct {
// List of static routes, each item must have destination, netmask, and gateway fields
// Required: false
Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
+
+ // High Availability mode is enabled, default False
+ // Required: false
+ // Default: false
+ HAMode bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"`
}
type wrapperCreateRequest struct {
diff --git a/pkg/cloudbroker/extnet/device_migrate.go b/pkg/cloudbroker/extnet/device_migrate.go
index d7fcbd2..a2653c9 100644
--- a/pkg/cloudbroker/extnet/device_migrate.go
+++ b/pkg/cloudbroker/extnet/device_migrate.go
@@ -17,6 +17,11 @@ type DeviceMigrateRequest struct {
// Target stack ID to migrate to
// Required: false
StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"`
+
+ // Target device to migrate
+ // Required: false
+ // Default: primary
+ Device string `url:"device,omitempty" json:"device,omitempty" validate:"omitempty,device"`
}
// DeviceMigrate migrates external network VNF device
diff --git a/pkg/cloudbroker/extnet/filter_test.go b/pkg/cloudbroker/extnet/filter_test.go
index e92a0b3..4dcb212 100644
--- a/pkg/cloudbroker/extnet/filter_test.go
+++ b/pkg/cloudbroker/extnet/filter_test.go
@@ -18,7 +18,7 @@ var extnets = ListExtNet{
IPCIDR: "176.118.164.0/24",
Milestones: 1355466,
Name: "176.118.164.0/24",
- NetworkID: 0,
+ NetworkIDs: NetworkIDs{Primary: 10, Secondary: 0},
OVSBridge: "",
PreReservationsNum: 0,
PriVNFDevID: 0,
@@ -41,7 +41,7 @@ var extnets = ListExtNet{
IPCIDR: "45.134.255.0/24",
Milestones: 2135543,
Name: "45.134.255.0/24",
- NetworkID: 0,
+ NetworkIDs: NetworkIDs{Primary: 10, Secondary: 0},
OVSBridge: "",
PreReservationsNum: 0,
PriVNFDevID: 0,
@@ -64,7 +64,7 @@ var extnets = ListExtNet{
IPCIDR: "88.218.249.0/24",
Milestones: 1232134,
Name: "88.218.249.0/24",
- NetworkID: 0,
+ NetworkIDs: NetworkIDs{Primary: 10, Secondary: 0},
OVSBridge: "",
PreReservationsNum: 0,
PriVNFDevID: 0,
diff --git a/pkg/cloudbroker/extnet/migrate_to_zone.go b/pkg/cloudbroker/extnet/migrate_to_zone.go
new file mode 100644
index 0000000..d98b1f6
--- /dev/null
+++ b/pkg/cloudbroker/extnet/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package extnet
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move extnet to another zone
+type MigrateToZoneRequest struct {
+ // ID of external network
+ // Required: true
+ NetID uint64 `url:"net_id" json:"net_id" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zone_id" json:"zone_id" validate:"required"`
+}
+
+// MoveToZone moves extnet to new zone
+func (e ExtNet) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/extnet/migrateToZone"
+
+ res, err := e.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
+}
diff --git a/pkg/cloudbroker/extnet/models.go b/pkg/cloudbroker/extnet/models.go
index 645b5d4..fcc44b9 100644
--- a/pkg/cloudbroker/extnet/models.go
+++ b/pkg/cloudbroker/extnet/models.go
@@ -91,11 +91,14 @@ type ItemExtNet struct {
// Milestones
Milestones uint64 `json:"milestones"`
+ // MTU
+ MTU uint64 `json:"mtu"`
+
// Name
Name string `json:"name"`
- // Network ID
- NetworkID uint64 `json:"networkId"`
+ // Network IDs
+ NetworkIDs NetworkIDs `json:"networkIds"`
// OVSBridge
OVSBridge string `json:"ovsBridge"`
@@ -106,6 +109,12 @@ type ItemExtNet struct {
// PriVNFDevID
PriVNFDevID uint64 `json:"priVnfDevId"`
+ // Redundant
+ Redundant bool `json:"redundant"`
+
+ // SecVnfDevId
+ SecVNFDevID uint64 `json:"secVnfDevId"`
+
// List of shared with
SharedWith []interface{} `json:"sharedWith"`
@@ -117,6 +126,9 @@ type ItemExtNet struct {
// VNFs
VNFs VNFs `json:"vnfs"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// List external networks
@@ -175,14 +187,17 @@ type RecordExtNet struct {
// Milestones
Milestones uint64 `json:"milestones"`
+ // MTU
+ MTU uint64 `json:"mtu"`
+
// Name
Name string `json:"name"`
// Network
Network string `json:"network"`
- // Network ID
- NetworkID uint64 `json:"networkId"`
+ // Network IDs
+ NetworkIDs NetworkIDs `json:"networkIds"`
// NTP
NTP []string `json:"ntp"`
@@ -199,9 +214,18 @@ type RecordExtNet struct {
// PriVNFDevID
PriVNFDevID uint64 `json:"priVnfDevId"`
+ // Redundant
+ Redundant bool `json:"redundant"`
+
+ // SecVnfDevId
+ SecVNFDevID uint64 `json:"secVnfDevId"`
+
// List reservations
Reservations ListReservations `json:"reservations"`
+ // List pre-reservations
+ PreReservations ListReservations `json:"pre-reservations"`
+
// List of shared with
SharedWith []interface{} `json:"sharedWith"`
@@ -213,6 +237,17 @@ type RecordExtNet struct {
// VNFs
VNFs VNFs `json:"vnfs"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
+}
+
+type NetworkIDs struct {
+ // Primary
+ Primary uint64 `json:"primary"`
+
+ // Secondary
+ Secondary uint64 `json:"secondary"`
}
// List of static routes
diff --git a/pkg/cloudbroker/extnet/set_highly_available.go b/pkg/cloudbroker/extnet/set_highly_available.go
new file mode 100644
index 0000000..a869cb7
--- /dev/null
+++ b/pkg/cloudbroker/extnet/set_highly_available.go
@@ -0,0 +1,42 @@
+package extnet
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// SetHAModeRequest struct to set HA mode for external network
+type SetHAModeRequest struct {
+ // ID of external network
+ // Required: true
+ NetID uint64 `url:"net_id" json:"net_id" validate:"required"`
+
+ // HA Mode
+ // Required: true
+ HAMode bool `url:"highly_available" json:"highly_available" validate:"required"`
+}
+
+// SetHAMode set HA mode for external network
+func (e ExtNet) SetHAMode(ctx context.Context, req SetHAModeRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/extnet/set_highly_available"
+
+ res, err := e.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
+}
diff --git a/pkg/cloudbroker/extnet/update.go b/pkg/cloudbroker/extnet/update.go
index e1c7aac..7c35cb0 100644
--- a/pkg/cloudbroker/extnet/update.go
+++ b/pkg/cloudbroker/extnet/update.go
@@ -21,6 +21,11 @@ type UpdateRequest struct {
// New external network description
// Required: false
Description string `url:"desc,omitempty" json:"desc,omitempty"`
+
+ // Maximum transmission unit
+ // Default: 1500
+ // Required: false
+ MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty"`
}
// Update updates external network parameters
diff --git a/pkg/cloudbroker/flipgroup/create.go b/pkg/cloudbroker/flipgroup/create.go
index f232dab..ee3690d 100644
--- a/pkg/cloudbroker/flipgroup/create.go
+++ b/pkg/cloudbroker/flipgroup/create.go
@@ -32,8 +32,9 @@ type CreateRequest struct {
// Type of client
// - 'compute'
// - 'vins' (will be later)
- // Required: true
- ClientType string `url:"clientType" json:"clientType" validate:"flipgroupClientType"`
+ // Required: false
+ // Default: "compute"
+ ClientType string `url:"clientType,omitempty" json:"clientType,omitempty"`
// IP address to associate with this group. If empty, the platform will autoselect IP address
// Required: false
diff --git a/pkg/cloudbroker/grid/models.go b/pkg/cloudbroker/grid/models.go
index 1e78e81..9f5a6ed 100644
--- a/pkg/cloudbroker/grid/models.go
+++ b/pkg/cloudbroker/grid/models.go
@@ -93,6 +93,12 @@ type RecordGrid struct {
// Name
Name string `json:"name"`
+
+ // Network modes
+ NetworkModes []string `json:"network_modes"`
+
+ // SDN support
+ SDNSupport bool `json:"sdn_support"`
}
// Information about grid
@@ -120,6 +126,12 @@ type ItemGridList struct {
// Name
Name string `json:"name"`
+
+ // Network modes
+ NetworkModes []string `json:"network_modes"`
+
+ // SDN support
+ SDNSupport bool `json:"sdn_support"`
}
// List Grids
diff --git a/pkg/cloudbroker/image/create_cdrom_image.go b/pkg/cloudbroker/image/create_cdrom_image.go
index a469be8..b7946af 100644
--- a/pkg/cloudbroker/image/create_cdrom_image.go
+++ b/pkg/cloudbroker/image/create_cdrom_image.go
@@ -38,12 +38,6 @@ type CreateCDROMImageRequest struct {
// Required: false
PasswordDl string `url:"passwordDL,omitempty" json:"passwordDL,omitempty"`
- // Binary architecture of this image
- // Should be one of:
- // - X86_64
- // Required: false
- Architecture string `url:"architecture,omitempty" json:"architecture,omitempty"`
-
// List of types of compute suitable for image.
// Example: [ "KVM_X86" ]
// Required: false
diff --git a/pkg/cloudbroker/image/create_image.go b/pkg/cloudbroker/image/create_image.go
index f150e8d..050f99d 100644
--- a/pkg/cloudbroker/image/create_image.go
+++ b/pkg/cloudbroker/image/create_image.go
@@ -2,6 +2,7 @@ package image
import (
"context"
+ "encoding/json"
"net/http"
"strconv"
@@ -72,12 +73,6 @@ type CreateRequest struct {
// Required: false
PoolName string `url:"poolName,omitempty" json:"poolName,omitempty"`
- // Binary architecture of this image
- // Should be one of:
- // - X86_64
- // Required: false
- Architecture string `url:"architecture,omitempty" json:"architecture,omitempty"`
-
// List of types of compute suitable for image
// Example: [ "KVM_X86" ]
// Required: required
@@ -88,6 +83,11 @@ type CreateRequest struct {
Bootable bool `url:"bootable,omitempty" json:"bootable,omitempty"`
}
+type asyncWrapperCreateRequest struct {
+ CreateRequest
+ AsyncMode bool `url:"asyncMode"`
+}
+
// CreateImage creates image from a media identified by URL
func (i Image) CreateImage(ctx context.Context, req CreateRequest) (uint64, error) {
err := validators.ValidateRequest(req)
@@ -109,3 +109,29 @@ func (i Image) CreateImage(ctx context.Context, req CreateRequest) (uint64, erro
return result, nil
}
+
+// AsyncCreate creates image from a media identified by URL in async mode
+func (i Image) AsyncCreateImage(ctx context.Context, req CreateRequest) (string, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return "", validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/image/create"
+
+ asyncReq := asyncWrapperCreateRequest{CreateRequest: req, AsyncMode: true}
+
+ res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, asyncReq)
+ if err != nil {
+ return " ", err
+ }
+
+ var taskID string
+
+ err = json.Unmarshal(res, &taskID)
+ if err != nil {
+ return "", err
+ }
+
+ return taskID, nil
+}
diff --git a/pkg/cloudbroker/image/list.go b/pkg/cloudbroker/image/list.go
index b3291b7..8396c3a 100644
--- a/pkg/cloudbroker/image/list.go
+++ b/pkg/cloudbroker/image/list.go
@@ -26,10 +26,6 @@ type ListRequest struct {
// Required: false
Status string `url:"status,omitempty" json:"status,omitempty"`
- // Find by architecture
- // Required: false
- Architecture string `url:"architecture,omitempty" json:"architecture,omitempty"`
-
// Find by type
// Required: false
TypeImage string `url:"typeImage,omitempty" json:"typeImage,omitempty"`
diff --git a/pkg/cloudbroker/image/models.go b/pkg/cloudbroker/image/models.go
index 6ace868..fd4aaa8 100644
--- a/pkg/cloudbroker/image/models.go
+++ b/pkg/cloudbroker/image/models.go
@@ -331,9 +331,6 @@ type ItemListStacks struct {
// CKey
CKey string `json:"_ckey"`
- // Meta
- Meta []interface{} `json:"_meta"`
-
// API URL
APIURL string `json:"apiUrl"`
diff --git a/pkg/cloudbroker/image/sync_create_image.go b/pkg/cloudbroker/image/sync_create_image.go
deleted file mode 100644
index 6eb91ef..0000000
--- a/pkg/cloudbroker/image/sync_create_image.go
+++ /dev/null
@@ -1,111 +0,0 @@
-package image
-
-import (
- "context"
- "net/http"
- "strconv"
-
- "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
-)
-
-// SyncCreateRequest struct to sync create image
-type SyncCreateRequest struct {
- // Name of the rescue disk
- // Required: true
- Name string `url:"name" json:"name" validate:"required"`
-
- // URL where to download media from
- // Required: true
- URL string `url:"url" json:"url" validate:"required"`
-
- // Boot type of image
- // Should be one of:
- // - bios
- // - UEFI
- // Required: true
- BootType string `url:"boottype" json:"boottype" validate:"required,imageBootType"`
-
- // Image type
- // Should be one of:
- // - linux
- // - windows
- // - or other
- // Required: true
- ImageType string `url:"imagetype" json:"imagetype" validate:"required,imageType"`
-
- // Select a network interface naming pattern for your Linux machine. eth - onboard, ens - pci slot naming
- // Should be:
- // - eth
- // - ens (default value)
- // Required: false
- NetworkInterfaceNaming string `url:"networkInterfaceNaming,omitempty" json:"networkInterfaceNaming,omitempty" validate:"omitempty,networkInterfaceNaming"`
-
- // Does this machine supports hot resize
- // Required: false
- HotResize bool `url:"hotresize,omitempty" json:"hotresize,omitempty"`
-
- // Optional username for the image
- // Required: false
- Username string `url:"username,omitempty" json:"username,omitempty"`
-
- // Optional password for the image
- // Required: false
- Password string `url:"password,omitempty" json:"password,omitempty"`
-
- // Account ID to make the image exclusive
- // Required: false
- AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"`
-
- // Username for upload binary media
- // Required: false
- UsernameDL string `url:"usernameDL,omitempty" json:"usernameDL,omitempty"`
-
- // Password for upload binary media
- // Required: false
- PasswordDL string `url:"passwordDL,omitempty" json:"passwordDL,omitempty"`
-
- // Storage endpoint provider ID
- // Required: false
- SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
-
- // Pool for image create
- // Required: false
- PoolName string `url:"poolName,omitempty" json:"poolName,omitempty"`
-
- // Binary architecture of this image
- // Should be one of:
- // - X86_64
- // Required: false
- Architecture string `url:"architecture,omitempty" json:"architecture,omitempty"`
-
- // List of types of compute suitable for image
- // Example: [ "KVM_X86" ]
- // Required: true
- Drivers []string `url:"drivers" json:"drivers" validate:"min=1,max=2,imageDrivers"`
-
- // Bootable image or not
- // Required: false
- Bootable bool `url:"bootable,omitempty" json:"bootable,omitempty"`
-}
-
-// SyncCreate creates image from a media identified by URL (in synchronous mode)
-func (i Image) SyncCreate(ctx context.Context, req SyncCreateRequest) (uint64, error) {
- err := validators.ValidateRequest(req)
- if err != nil {
- return 0, validators.ValidationErrors(validators.GetErrors(err))
- }
-
- url := "/cloudbroker/image/syncCreateImage"
-
- res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, req)
- if err != nil {
- return 0, err
- }
-
- result, err := strconv.ParseUint(string(res), 10, 64)
- if err != nil {
- return 0, err
- }
-
- return result, nil
-}
diff --git a/pkg/cloudbroker/k8s/create.go b/pkg/cloudbroker/k8s/create.go
index 0a44290..c30cf81 100644
--- a/pkg/cloudbroker/k8s/create.go
+++ b/pkg/cloudbroker/k8s/create.go
@@ -168,6 +168,10 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// GetRAM returns RAM values
diff --git a/pkg/cloudbroker/k8s/migrate_to_zone.go b/pkg/cloudbroker/k8s/migrate_to_zone.go
new file mode 100644
index 0000000..00b6c64
--- /dev/null
+++ b/pkg/cloudbroker/k8s/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package k8s
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move k8s cluster to another zone
+type MigrateToZoneRequest struct {
+ // Kubernetes cluster ID to move
+ // Required: true
+ K8SID uint64 `url:"k8sId" json:"k8sId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
+}
+
+// MigrateToZone moves k8s cluster instance to new zone
+func (k8s K8S) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/k8s/migrateToZone"
+
+ res, err := k8s.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
+}
diff --git a/pkg/cloudbroker/k8s/models.go b/pkg/cloudbroker/k8s/models.go
index ec180c1..f3d5fbe 100644
--- a/pkg/cloudbroker/k8s/models.go
+++ b/pkg/cloudbroker/k8s/models.go
@@ -139,6 +139,9 @@ type RecordK8S struct {
// With LB
WithLB bool `json:"withLB"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Detailed info about address of the Virtual Internet Protocol
@@ -307,6 +310,9 @@ type ItemK8S struct {
// List workers
WorkersGroup ListK8SGroup `json:"workersGroups"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Service account
diff --git a/pkg/cloudbroker/kvmx86/create.go b/pkg/cloudbroker/kvmx86/create.go
index d7647f6..473fae4 100644
--- a/pkg/cloudbroker/kvmx86/create.go
+++ b/pkg/cloudbroker/kvmx86/create.go
@@ -16,6 +16,9 @@ type Interface struct {
// - EXTNET
// - VFNIC
// - DPDK
+ // - EMPTY
+ // - SDN
+ // - TRUNK
NetType string `url:"netType" json:"netType" validate:"required,kvmx86NetType"`
// Network ID for connect to,
@@ -35,6 +38,10 @@ type Interface struct {
// MAC address to assign to this VM when connecting to the specified network
// Required: false
MAC string `url:"mac,omitempty" json:"mac,omitempty" validate:"omitempty"`
+
+ // SDN interface id
+ // Required: false
+ SDNInterfaceID string `url:"sdn_interface_id,omitempty" json:"sdn_interface_id,omitempty"`
}
// DataDisk detailed struct for DataDisks field in CreateRequest, CreateBlankRequest and MassCreateRequest
@@ -176,6 +183,10 @@ type CreateRequest struct {
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// GetRAM returns RAM field values
diff --git a/pkg/cloudbroker/kvmx86/create_blank.go b/pkg/cloudbroker/kvmx86/create_blank.go
index a7261fe..49fd0e0 100644
--- a/pkg/cloudbroker/kvmx86/create_blank.go
+++ b/pkg/cloudbroker/kvmx86/create_blank.go
@@ -88,6 +88,10 @@ type CreateBlankRequest struct {
// Does this machine supports hot resize
// Required: false
HotResize bool `url:"hotResize,omitempty" json:"hotResize,omitempty"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
// GetRAM returns RAM field values
diff --git a/pkg/cloudbroker/kvmx86/mass_create.go b/pkg/cloudbroker/kvmx86/mass_create.go
index 2fddda5..4f34fe8 100644
--- a/pkg/cloudbroker/kvmx86/mass_create.go
+++ b/pkg/cloudbroker/kvmx86/mass_create.go
@@ -79,6 +79,10 @@ type MassCreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
type asyncWrapperMassCreateRequest struct {
diff --git a/pkg/cloudbroker/lb/create.go b/pkg/cloudbroker/lb/create.go
index 046652a..13d9055 100644
--- a/pkg/cloudbroker/lb/create.go
+++ b/pkg/cloudbroker/lb/create.go
@@ -44,6 +44,10 @@ type CreateRequest struct {
// Text description of this load balancer
// Required: false
Description string `url:"desc,omitempty" json:"desc,omitempty"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
type wrapperCreateRequest struct {
diff --git a/pkg/cloudbroker/lb/migrate_to_zone.go b/pkg/cloudbroker/lb/migrate_to_zone.go
new file mode 100644
index 0000000..57aada1
--- /dev/null
+++ b/pkg/cloudbroker/lb/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package lb
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move lb to another zone
+type MigrateToZoneRequest struct {
+ // ID of the load balancer instance to move
+ // Required: true
+ LBID uint64 `url:"lbId" json:"lbId" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
+}
+
+// MigrateToZone moves lb instance to new zone
+func (l LB) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/lb/migrateToZone"
+
+ res, err := l.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
+}
diff --git a/pkg/cloudbroker/lb/models.go b/pkg/cloudbroker/lb/models.go
index 11382cd..c4d41f1 100644
--- a/pkg/cloudbroker/lb/models.go
+++ b/pkg/cloudbroker/lb/models.go
@@ -153,6 +153,9 @@ type RecordLB struct {
// Meta
Meta []interface{} `json:"_meta"`
+ //Account ID
+ AccountID uint64 `json:"accountId"`
+
// Access Control List
ACL interface{} `json:"acl"`
@@ -220,7 +223,7 @@ type RecordLB struct {
Status string `json:"status"`
// Sysctl Params
- SysctlParams interface{} `json:"sysctlParams"`
+ SysctlParams map[string]string `json:"sysctlParams"`
// Tech status
TechStatus string `json:"techStatus"`
@@ -230,6 +233,9 @@ type RecordLB struct {
// VINS ID
VINSID uint64 `json:"vinsId"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Detailed information about load balancer in List
@@ -316,7 +322,7 @@ type ItemLBList struct {
Status string `json:"status"`
// Sysctl Params
- SysctlParams interface{} `json:"sysctlParams"`
+ SysctlParams map[string]string `json:"sysctlParams"`
// Tech status
TechStatus string `json:"techStatus"`
@@ -332,4 +338,7 @@ type ItemLBList struct {
// VINS ID
VINSID uint64 `json:"vinsId"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
diff --git a/pkg/cloudbroker/node/apply_ipmi_action.go b/pkg/cloudbroker/node/apply_ipmi_action.go
index 5408710..d239435 100644
--- a/pkg/cloudbroker/node/apply_ipmi_action.go
+++ b/pkg/cloudbroker/node/apply_ipmi_action.go
@@ -14,7 +14,7 @@ type ApplyIpmiActionRequest struct {
NID uint64 `url:"nid" json:"nid" validate:"required"`
// Action
- // on of actions power_on shutdown force_shutdown reboot
+ // Available values : is_powered, power_on, shutdown, force_shutdown, reboot.
// Required: true
Action string `url:"action" json:"action" validate:"required,action"`
}
diff --git a/pkg/cloudbroker/node/models.go b/pkg/cloudbroker/node/models.go
index 6f4c5cf..b4c9dd5 100644
--- a/pkg/cloudbroker/node/models.go
+++ b/pkg/cloudbroker/node/models.go
@@ -73,6 +73,9 @@ type RecordNode struct {
// Version
Version string `json:"version"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Resource consumption of the node
@@ -227,6 +230,9 @@ type ItemNode struct {
// Roles
Roles []string `json:"roles"`
+ // SDN Hypervisor Name
+ SDNHypervisorName string `json:"sdn_hypervisor_name"`
+
// Seps
Seps []uint64 `json:"seps"`
@@ -253,6 +259,9 @@ type ItemNode struct {
// Version
Version string `json:"version"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Numa Topology Info
diff --git a/pkg/cloudbroker/rg/create.go b/pkg/cloudbroker/rg/create.go
index f1e1531..2181876 100644
--- a/pkg/cloudbroker/rg/create.go
+++ b/pkg/cloudbroker/rg/create.go
@@ -73,9 +73,13 @@ type CreateRequest struct {
UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"`
// Advanced compute features,
- // one of: hugepages, numa, cpupin, vfnic, dpdk, changemac
+ // one of: hugepages, numa, cpupin, vfnic, dpdk, changemac, trunk
// Required: false
ComputeFeatures []string `url:"computeFeatures,omitempty" json:"computeFeatures,omitempty" validate:"omitempty,computeFeatures"`
+
+ // SDN access group id
+ // Required: false
+ SDNAccessGroupID string `url:"sdn_access_group_id,omitempty" json:"sdn_access_group_id,omitempty"`
}
// Create creates resource group
diff --git a/pkg/cloudbroker/rg/mass_delete.go b/pkg/cloudbroker/rg/mass_delete.go
index b0b6b8b..758f92a 100644
--- a/pkg/cloudbroker/rg/mass_delete.go
+++ b/pkg/cloudbroker/rg/mass_delete.go
@@ -26,18 +26,18 @@ type MassDeleteRequest struct {
}
// MassDelete starts jobs to delete several resource groups
-func (r RG) MassDelete(ctx context.Context, req MassDeleteRequest) (bool, error) {
+func (r RG) MassDelete(ctx context.Context, req MassDeleteRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/rg/massDelete"
- _, err = r.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(res), nil
}
diff --git a/pkg/cloudbroker/rg/mass_disable.go b/pkg/cloudbroker/rg/mass_disable.go
index 000dc66..49cd63a 100644
--- a/pkg/cloudbroker/rg/mass_disable.go
+++ b/pkg/cloudbroker/rg/mass_disable.go
@@ -15,18 +15,18 @@ type MassDisableRequest struct {
}
// MassDisable start jobs to disable several resource groups
-func (r RG) MassDisable(ctx context.Context, req MassDisableRequest) (bool, error) {
+func (r RG) MassDisable(ctx context.Context, req MassDisableRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/rg/massDisable"
- _, err = r.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(res), nil
}
diff --git a/pkg/cloudbroker/rg/mass_enable.go b/pkg/cloudbroker/rg/mass_enable.go
index e178e6a..a1f49f4 100644
--- a/pkg/cloudbroker/rg/mass_enable.go
+++ b/pkg/cloudbroker/rg/mass_enable.go
@@ -15,18 +15,18 @@ type MassEnableRequest struct {
}
// MassEnable start jobs to enable several resource groups
-func (r RG) MassEnable(ctx context.Context, req MassEnableRequest) (bool, error) {
+func (r RG) MassEnable(ctx context.Context, req MassEnableRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
- return false, validators.ValidationErrors(validators.GetErrors(err))
+ return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/rg/massEnable"
- _, err = r.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
- return false, err
+ return "", err
}
- return true, nil
+ return string(res), nil
}
diff --git a/pkg/cloudbroker/rg/models.go b/pkg/cloudbroker/rg/models.go
index c09ea4e..fa5798d 100644
--- a/pkg/cloudbroker/rg/models.go
+++ b/pkg/cloudbroker/rg/models.go
@@ -202,6 +202,9 @@ type ItemRG struct {
// Resource types list
ResTypes []string `json:"resourceTypes"`
+ // SDN access group id
+ SDNAccessGroupID string `json:"sdn_access_group_id"`
+
// Secret
Secret string `json:"secret"`
diff --git a/pkg/cloudbroker/tasks/models.go b/pkg/cloudbroker/tasks/models.go
index f2cbd13..43b7c17 100644
--- a/pkg/cloudbroker/tasks/models.go
+++ b/pkg/cloudbroker/tasks/models.go
@@ -28,9 +28,6 @@ type ItemTask struct {
// Error
Error string `json:"error"`
- // GUID
- GUID string `json:"guid"`
-
// List of logs
Log []string `json:"log"`
diff --git a/pkg/cloudbroker/trunk.go b/pkg/cloudbroker/trunk.go
new file mode 100644
index 0000000..2d0f377
--- /dev/null
+++ b/pkg/cloudbroker/trunk.go
@@ -0,0 +1,10 @@
+package cloudbroker
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/trunk"
+)
+
+// Accessing the Trunk method group
+func (cb *CloudBroker) Trunk() *trunk.Trunk {
+ return trunk.New(cb.client)
+}
diff --git a/pkg/cloudbroker/trunk/access_grant.go b/pkg/cloudbroker/trunk/access_grant.go
new file mode 100644
index 0000000..2f1b1ab
--- /dev/null
+++ b/pkg/cloudbroker/trunk/access_grant.go
@@ -0,0 +1,42 @@
+package trunk
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// AccessGrant struct to grant access to a trunk to some accounts
+type AccessGrantRequest struct {
+ // ID of the trunk to disable
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+
+ // IDs of the accounts to grant access to
+ // Required: true
+ AccountIDs []uint64 `url:"account_ids" json:"account_ids" validate:"required"`
+}
+
+// AccessGrant grants access to a trunk
+func (t Trunk) AccessGrant(ctx context.Context, req AccessGrantRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/access_grant"
+
+ res, err := t.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
+}
diff --git a/pkg/cloudbroker/trunk/access_revoke.go b/pkg/cloudbroker/trunk/access_revoke.go
new file mode 100644
index 0000000..6efa86e
--- /dev/null
+++ b/pkg/cloudbroker/trunk/access_revoke.go
@@ -0,0 +1,42 @@
+package trunk
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// AccessRevoke struct to grant access to a trunk to some accounts
+type AccessRevokeRequest struct {
+ // ID of the trunk to disable
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+
+ // IDs of the accounts to revoke access from
+ // Required: true
+ AccountIDs []uint64 `url:"account_ids" json:"account_ids" validate:"required"`
+}
+
+// AccessRevoke revokes access to a trunk from accounts
+func (t Trunk) AccessRevoke(ctx context.Context, req AccessRevokeRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/access_revoke"
+
+ res, err := t.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
+}
diff --git a/pkg/cloudbroker/trunk/create.go b/pkg/cloudbroker/trunk/create.go
new file mode 100644
index 0000000..4985187
--- /dev/null
+++ b/pkg/cloudbroker/trunk/create.go
@@ -0,0 +1,58 @@
+package trunk
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// CreateRequest struct to create a trunk
+type CreateRequest struct {
+ // Name of the trunk
+ // Required: true
+ Name string `url:"name" json:"name" validate:"required"`
+
+ // List of trunk tags (values between 1-4095)
+ // Required: true
+ TrunkTags string `url:"trunk_tags" json:"trunk_tags" validate:"required,trunkTags"`
+
+ // OVS bridge name
+ // Required: true
+ OVSBridge string `url:"ovs_bridge" json:"ovs_bridge" validate:"required"`
+
+ // Description of the trunk
+ // Required: false
+ Description string `url:"description,omitempty" json:"description,omitempty"`
+
+ // List of account IDs with access to this trunk
+ // Required: false
+ AccountIDs []uint64 `url:"account_ids,omitempty" json:"account_ids,omitempty"`
+
+ // Native VLAN ID
+ // Required: false
+ NativeVLANID uint64 `url:"native_vlan_id,omitempty" json:"native_vlan_id,omitempty"`
+}
+
+// Create creates a user.
+func (t Trunk) Create(ctx context.Context, req CreateRequest) (uint64, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return 0, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/create"
+
+ res, err := t.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ if err != nil {
+ return 0, err
+ }
+
+ result, err := strconv.ParseUint(string(res), 10, 64)
+ if err != nil {
+ return 0, err
+ }
+
+ return result, nil
+}
diff --git a/pkg/cloudbroker/trunk/destroy.go b/pkg/cloudbroker/trunk/destroy.go
new file mode 100644
index 0000000..b41cca3
--- /dev/null
+++ b/pkg/cloudbroker/trunk/destroy.go
@@ -0,0 +1,38 @@
+package trunk
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// DestroyRequest struct to destroy a trunk
+type DestroyRequest struct {
+ // ID of the trunk to destroy
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Destroy destroys a trunk
+func (t Trunk) Destroy(ctx context.Context, req DestroyRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/destroy"
+
+ res, err := t.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
+}
diff --git a/pkg/cloudbroker/trunk/disable.go b/pkg/cloudbroker/trunk/disable.go
new file mode 100644
index 0000000..5ced481
--- /dev/null
+++ b/pkg/cloudbroker/trunk/disable.go
@@ -0,0 +1,38 @@
+package trunk
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// DisableRequest struct to disable a trunk
+type DisableRequest struct {
+ // ID of the trunk to disable
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Disable disables a trunk by ID
+func (t Trunk) Disable(ctx context.Context, req DisableRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/disable"
+
+ res, err := t.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
+}
diff --git a/pkg/cloudbroker/trunk/enable.go b/pkg/cloudbroker/trunk/enable.go
new file mode 100644
index 0000000..11582c8
--- /dev/null
+++ b/pkg/cloudbroker/trunk/enable.go
@@ -0,0 +1,38 @@
+package trunk
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// EnableRequest struct to enable a trunk
+type EnableRequest struct {
+ // ID of the trunk to enable
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Enable enables a trunk
+func (t Trunk) Enable(ctx context.Context, req EnableRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/enable"
+
+ res, err := t.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
+}
diff --git a/pkg/cloudbroker/trunk/get.go b/pkg/cloudbroker/trunk/get.go
new file mode 100644
index 0000000..39c4ce7
--- /dev/null
+++ b/pkg/cloudbroker/trunk/get.go
@@ -0,0 +1,46 @@
+package trunk
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GetRequest struct to get information about a trunk
+type GetRequest struct {
+ // ID of trunk
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Get gets detailed information about a trunk as a ItemTrunk struct
+func (t Trunk) Get(ctx context.Context, req GetRequest) (*ItemTrunk, error) {
+ res, err := t.GetRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ info := ItemTrunk{}
+
+ err = json.Unmarshal(res, &info)
+ if err != nil {
+ return nil, err
+ }
+
+ return &info, nil
+}
+
+// GetRaw gets detailed information about a trunk as an array of bytes
+func (t Trunk) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/get"
+
+ res, err := t.client.DecortApiCall(ctx, http.MethodGet, url, req)
+ return res, err
+}
diff --git a/pkg/cloudbroker/trunk/list.go b/pkg/cloudbroker/trunk/list.go
new file mode 100644
index 0000000..da75c08
--- /dev/null
+++ b/pkg/cloudbroker/trunk/list.go
@@ -0,0 +1,61 @@
+package trunk
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// ListRequest struct to get list of trunks
+type ListRequest struct {
+ // Account access ID to filter by
+ AccountIDs []uint64 `url:"account_ids,omitempty" json:"account_ids,omitempty"`
+
+ // ID of the trunk to filter by
+ IDs []uint64 `url:"ids,omitempty" json:"ids,omitempty"`
+
+ // Sort by one of supported fields, format ±
+ SortBy string `url:"sort_by,omitempty" json:"sort_by,omitempty"`
+
+ // Trunk tags to filter by
+ TrunkTags string `url:"trunk_tags,omitempty" json:"trunk_tags,omitempty" validate:"omitempty,trunkTags"`
+
+ // Page number
+ Page uint64 `url:"page,omitempty" json:"page,omitempty"`
+
+ // Page size
+ Size uint64 `url:"size,omitempty" json:"size,omitempty"`
+}
+
+// List gets list of all trunks as a ListTrunks struct
+func (t Trunk) List(ctx context.Context, req ListRequest) (*ListTrunks, error) {
+
+ res, err := t.ListRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ list := ListTrunks{}
+
+ err = json.Unmarshal(res, &list)
+ if err != nil {
+ return nil, err
+ }
+
+ return &list, nil
+}
+
+// ListRaw gets list of all trunks as an array of bytes
+func (t Trunk) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
+
+ if err := validators.ValidateRequest(req); err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/list"
+
+ res, err := t.client.DecortApiCall(ctx, http.MethodGet, url, req)
+ return res, err
+}
diff --git a/pkg/cloudbroker/trunk/models.go b/pkg/cloudbroker/trunk/models.go
new file mode 100644
index 0000000..de7742a
--- /dev/null
+++ b/pkg/cloudbroker/trunk/models.go
@@ -0,0 +1,59 @@
+package trunk
+
+type ItemTrunk struct {
+
+ // List of account IDs with access to this trunk
+ AccountIDs []uint64 `json:"accountIds"`
+
+ // Created at
+ CreatedAt uint64 `json:"created_at"`
+
+ // Created by
+ CreatedBy string `json:"created_by"`
+
+ // Deleted at
+ DeletedAt uint64 `json:"deleted_at"`
+
+ // Deleted by
+ DeletedBy string `json:"deleted_by"`
+
+ // Description of a trunk
+ Description string `json:"description"`
+
+ // GUID
+ GUID uint64 `json:"guid"`
+
+ // ID of a trunk
+ ID uint64 `json:"id"`
+
+ // MAC
+ MAC string `json:"mac"`
+
+ // Name of a trunk
+ Name string `json:"name"`
+
+ // Native VLAN ID
+ NativeVLANID uint64 `json:"nativeVlanId"`
+
+ // OVS bridge name
+ OVSBridge string `json:"ovsBridge"`
+
+ // If the trunk is enabled
+ Status string `json:"status"`
+
+ // List of trunk tags (values between 1-4095)
+ TrunkTags string `json:"trunkTags"`
+
+ // Updated at
+ UpdatedAt uint64 `json:"updated_at"`
+
+ // Updated by
+ UpdatedBy string `json:"updated_by"`
+}
+
+// List of trunks
+type ListTrunks struct {
+ Data []ItemTrunk `json:"data"`
+
+ EntryCount uint64 `json:"entryCount"`
+}
diff --git a/pkg/cloudbroker/trunk/trunk.go b/pkg/cloudbroker/trunk/trunk.go
new file mode 100644
index 0000000..079b5d0
--- /dev/null
+++ b/pkg/cloudbroker/trunk/trunk.go
@@ -0,0 +1,17 @@
+package trunk
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
+)
+
+// Structure for creating request to trunk
+type Trunk struct {
+ client interfaces.Caller
+}
+
+// Builder for trunk endpoints
+func New(client interfaces.Caller) *Trunk {
+ return &Trunk{
+ client,
+ }
+}
diff --git a/pkg/cloudbroker/trunk/update.go b/pkg/cloudbroker/trunk/update.go
new file mode 100644
index 0000000..8258971
--- /dev/null
+++ b/pkg/cloudbroker/trunk/update.go
@@ -0,0 +1,54 @@
+package trunk
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// UpdateRequest struct to update a trunk
+type UpdateRequest struct {
+ // ID of the trunk to update
+ // Required: true
+ TrunkID uint64 `url:"id" json:"id" validate:"required"`
+
+ // New name of the trunk
+ // Required: true
+ Name string `url:"name" json:"name" validate:"required"`
+
+ // List of trunk tags (values between 1-4095)
+ // Required: true
+ TrunkTags string `url:"trunk_tags" json:"trunk_tags" validate:"required,trunkTags"`
+
+ // New description of the trunk
+ // Required: false
+ Description string `url:"description,omitempty" json:"description,omitempty"`
+
+ // New native VLAN ID
+ // Required: false
+ NativeVLANID uint64 `url:"native_vlan_id,omitempty" json:"native_vlan_id,omitempty"`
+}
+
+// Update updates a trunk
+func (t Trunk) Update(ctx context.Context, req UpdateRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/trunk/update"
+
+ res, err := t.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
+}
diff --git a/pkg/cloudbroker/user/block.go b/pkg/cloudbroker/user/block.go
new file mode 100644
index 0000000..bc02bb4
--- /dev/null
+++ b/pkg/cloudbroker/user/block.go
@@ -0,0 +1,38 @@
+package user
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// BlockRequest struct to block a user.
+type BlockRequest struct {
+ // ID of the user to block.
+ // Required: true
+ UserID string `url:"user_id" json:"user_id" validate:"required"`
+}
+
+// Block blocks a user
+func (u User) Block(ctx context.Context, req BlockRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/user/block"
+
+ res, err := u.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
+}
diff --git a/pkg/cloudbroker/user/create.go b/pkg/cloudbroker/user/create.go
index a3f4e48..c3b9383 100644
--- a/pkg/cloudbroker/user/create.go
+++ b/pkg/cloudbroker/user/create.go
@@ -20,15 +20,17 @@ type CreateRequest struct {
// Password of user
// Required: false
+ // Default: strongpassword
Password string `url:"password,omitempty" json:"password,omitempty"`
- // List of groups this user belongs to.
- // Required: false
- Groups []string `url:"groups,omitempty" json:"groups,omitempty"`
-
// List of apiaccess groups this user belongs to.
// Required: false
APIAccess []uint64 `url:"apiaccess,omitempty" json:"apiaccess,omitempty"`
+
+ // Provider of user
+ // one of: bvs, decs3o
+ // Required: false
+ Provider string `url:"provider,omitempty" json:"provider,omitempty" validate:"omitempty,userProvider"`
}
// Create creates a user.
diff --git a/pkg/cloudbroker/user/list.go b/pkg/cloudbroker/user/list.go
index 493cf1f..53baa73 100644
--- a/pkg/cloudbroker/user/list.go
+++ b/pkg/cloudbroker/user/list.go
@@ -18,6 +18,10 @@ type ListRequest struct {
// Required: false
Active interface{} `url:"active,omitempty" json:"active,omitempty" validate:"omitempty,isBool"`
+ // Find by email.
+ // Required: false
+ Email string `url:"email,omitempty" json:"email,omitempty"`
+
// Find by serviceaccount. True or False.
// Required: false
ServiceAccount interface{} `url:"serviceaccount,omitempty" json:"serviceaccount,omitempty" validate:"omitempty,isBool"`
diff --git a/pkg/cloudbroker/user/models.go b/pkg/cloudbroker/user/models.go
index a928088..1c2cb47 100644
--- a/pkg/cloudbroker/user/models.go
+++ b/pkg/cloudbroker/user/models.go
@@ -21,6 +21,9 @@ type ItemUser struct {
// AuthKeys
AuthKeys []interface{}
+ // Blocked
+ Blocked bool `json:"blocked"`
+
// Data
Data string `json:"data"`
diff --git a/pkg/cloudbroker/user/unblock.go b/pkg/cloudbroker/user/unblock.go
new file mode 100644
index 0000000..593f36c
--- /dev/null
+++ b/pkg/cloudbroker/user/unblock.go
@@ -0,0 +1,38 @@
+package user
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// UnblockRequest struct to block a user.
+type UnblockRequest struct {
+ // ID of the user to block.
+ // Required: true
+ UserID string `url:"user_id" json:"user_id" validate:"required"`
+}
+
+// Unblock unblocks a user
+func (u User) Unblock(ctx context.Context, req UnblockRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/user/unblock"
+
+ res, err := u.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
+}
diff --git a/pkg/cloudbroker/vins/create_in_account.go b/pkg/cloudbroker/vins/create_in_account.go
index eb7387a..b1e6e44 100644
--- a/pkg/cloudbroker/vins/create_in_account.go
+++ b/pkg/cloudbroker/vins/create_in_account.go
@@ -53,6 +53,10 @@ type CreateInAccountRequest struct {
// List of static routes, each item must have destination, netmask, and gateway fields
// Required: false
Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
type wrapperCreateRequestInAcc struct {
diff --git a/pkg/cloudbroker/vins/create_in_rg.go b/pkg/cloudbroker/vins/create_in_rg.go
index 7a01e85..f6f3c62 100644
--- a/pkg/cloudbroker/vins/create_in_rg.go
+++ b/pkg/cloudbroker/vins/create_in_rg.go
@@ -47,6 +47,10 @@ type CreateInRGRequest struct {
// List of static routes, each item must have destination, netmask, and gateway fields
// Required: false
Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"`
+
+ // Zone ID
+ // Required: false
+ ZoneID uint64 `url:"zoneId,omitempty" json:"zoneId,omitempty"`
}
type wrapperCreateRequestInRG struct {
diff --git a/pkg/cloudbroker/vins/migrate_to_zone.go b/pkg/cloudbroker/vins/migrate_to_zone.go
new file mode 100644
index 0000000..99a2059
--- /dev/null
+++ b/pkg/cloudbroker/vins/migrate_to_zone.go
@@ -0,0 +1,42 @@
+package vins
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// MigrateToZone struct to move VINS to another zone
+type MigrateToZoneRequest struct {
+ // VINSID to move
+ // Required: true
+ VINSID uint64 `url:"net_id" json:"net_id" validate:"required"`
+
+ // ID of the zone to move
+ // Required: true
+ ZoneID uint64 `url:"zone_id" json:"zone_id" validate:"required"`
+}
+
+// MigrateToZone moves VINS instance to new zone
+func (v VINS) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/vins/migrateToZone"
+
+ res, err := v.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
+}
diff --git a/pkg/cloudbroker/vins/models.go b/pkg/cloudbroker/vins/models.go
index 3e3a2be..16f3a81 100644
--- a/pkg/cloudbroker/vins/models.go
+++ b/pkg/cloudbroker/vins/models.go
@@ -158,6 +158,9 @@ type ItemInterface struct {
// NodeID
NodeID int64 `json:"nodeId"`
+ // SDNInterfaceID
+ SDNInterfaceID string `json:"sdn_interface_id"`
+
// PCI slot
PCISlot int64 `json:"pciSlot"`
@@ -567,6 +570,9 @@ type RecordVINS struct {
// VXLAN ID
VXLANID uint64 `json:"vxlanId"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// Information about libvirt settings
@@ -786,6 +792,9 @@ type ItemVINS struct {
// VXLAN ID
VXLANID uint64 `json:"vxlanId"`
+
+ // Zone ID
+ ZoneID uint64 `json:"zoneId"`
}
// List of VINS
diff --git a/pkg/cloudbroker/zone.go b/pkg/cloudbroker/zone.go
new file mode 100644
index 0000000..a43e226
--- /dev/null
+++ b/pkg/cloudbroker/zone.go
@@ -0,0 +1,10 @@
+package cloudbroker
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/zone"
+)
+
+// Accessing the Zone method group
+func (ca *CloudBroker) Zone() *zone.Zone {
+ return zone.New(ca.client)
+}
diff --git a/pkg/cloudbroker/zone/add_node.go b/pkg/cloudbroker/zone/add_node.go
new file mode 100644
index 0000000..8d2fc98
--- /dev/null
+++ b/pkg/cloudbroker/zone/add_node.go
@@ -0,0 +1,43 @@
+package zone
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// AddNodeRequest struct to add node to zone
+type AddNodeRequest struct {
+ // ID of zone
+ // Required: true
+ ID uint64 `url:"id" json:"id" validate:"required"`
+
+ // List of node ids
+ // Required: true
+ NodeIDs []uint64 `url:"nodeIds" json:"nodeIds" validate:"required"`
+}
+
+// AddNode add nodes to zone
+func (e Zone) AddNode(ctx context.Context, req AddNodeRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/zone/addNode"
+
+ res, err := e.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
+}
diff --git a/pkg/cloudbroker/zone/create.go b/pkg/cloudbroker/zone/create.go
new file mode 100644
index 0000000..c4f9eb9
--- /dev/null
+++ b/pkg/cloudbroker/zone/create.go
@@ -0,0 +1,43 @@
+package zone
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// CreateRequest struct to create zone
+type CreateRequest struct {
+ // Name of zone
+ // Required: true
+ Name string `url:"name" json:"name" validate:"required"`
+
+ // Description
+ // Required: false
+ Description string `url:"description,omitempty" json:"description,omitempty"`
+}
+
+// Create creates zone object
+func (e Zone) Create(ctx context.Context, req CreateRequest) (uint64, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return 0, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/zone/create"
+
+ res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
+
+ if err != nil {
+ return 0, err
+ }
+
+ result, err := strconv.ParseUint(string(res), 10, 64)
+ if err != nil {
+ return 0, err
+ }
+
+ return result, nil
+}
diff --git a/pkg/cloudbroker/zone/del_node.go b/pkg/cloudbroker/zone/del_node.go
new file mode 100644
index 0000000..a6a2ee4
--- /dev/null
+++ b/pkg/cloudbroker/zone/del_node.go
@@ -0,0 +1,43 @@
+package zone
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// DelNodeRequest struct to remove node from zone
+type DelNodeRequest struct {
+ // ID of zone
+ // Required: true
+ ID uint64 `url:"id" json:"id" validate:"required"`
+
+ // List of node ids
+ // Required: true
+ NodeIDs []uint64 `url:"nodeIds" json:"nodeIds" validate:"required"`
+}
+
+// DelNode remove nodes from zone
+func (e Zone) DelNode(ctx context.Context, req DelNodeRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/zone/delNode"
+
+ res, err := e.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
+}
diff --git a/pkg/cloudbroker/zone/delete.go b/pkg/cloudbroker/zone/delete.go
new file mode 100644
index 0000000..3d64b00
--- /dev/null
+++ b/pkg/cloudbroker/zone/delete.go
@@ -0,0 +1,39 @@
+package zone
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// DeleteRequest struct to delete zone
+type DeleteRequest struct {
+ // ID of zone
+ // Required: true
+ ID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Delete deletes zone object
+func (e Zone) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/zone/delete"
+
+ res, err := e.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
+}
diff --git a/pkg/cloudbroker/zone/filter.go b/pkg/cloudbroker/zone/filter.go
new file mode 100644
index 0000000..ec55a7a
--- /dev/null
+++ b/pkg/cloudbroker/zone/filter.go
@@ -0,0 +1,53 @@
+package zone
+
+// FilterByID returns ListZones with specified ID.
+func (list ListZones) FilterByID(id uint64) ListZones {
+ predicate := func(izone RecordZone) bool {
+ return izone.ID == id
+ }
+
+ return list.FilterFunc(predicate)
+}
+
+// FilterByName returns ListZones with specified Name.
+func (list ListZones) FilterByName(name string) ListZones {
+ predicate := func(izone RecordZone) bool {
+ return izone.Name == name
+ }
+
+ return list.FilterFunc(predicate)
+}
+
+// FilterByStatus returns ListZones with specified Status.
+func (list ListZones) FilterByStatus(status string) ListZones {
+ predicate := func(izone RecordZone) bool {
+ return izone.Status == status
+ }
+
+ return list.FilterFunc(predicate)
+}
+
+// FilterFunc allows filtering ListZones based on a user-specified predicate.
+func (list ListZones) FilterFunc(predicate func(RecordZone) bool) ListZones {
+ var result ListZones
+
+ for _, item := range list.Data {
+ if predicate(item) {
+ result.Data = append(result.Data, item)
+ }
+ }
+
+ result.EntryCount = uint64(len(result.Data))
+
+ return result
+}
+
+// FindOne returns first found RecordZone
+// If none was found, returns an empty struct.
+func (list ListZones) FindOne() RecordZone {
+ if list.EntryCount == 0 {
+ return RecordZone{}
+ }
+
+ return list.Data[0]
+}
diff --git a/pkg/cloudbroker/zone/filter_test.go b/pkg/cloudbroker/zone/filter_test.go
new file mode 100644
index 0000000..5966796
--- /dev/null
+++ b/pkg/cloudbroker/zone/filter_test.go
@@ -0,0 +1,86 @@
+package zone
+
+import "testing"
+
+var zones = ListZones{
+ Data: []RecordZone{
+
+ {
+ ID: 2,
+ GUID: 0,
+ GID: 0,
+ Name: "System Config",
+ Description: "",
+ Deletable: true,
+ Status: "LOCKED",
+ CreatedTime: 1640995200, // 2022-01-01
+ UpdatedTime: 1640995200,
+ NodeIDs: nil,
+ },
+ {
+ ID: 5,
+ GUID: 5500,
+ GID: 6600,
+ Name: "ssss Nodes",
+ Description: " infrastructure",
+ Deletable: true,
+ Status: "DISABLED",
+ CreatedTime: 1577836800, // 2020-01-01
+ UpdatedTime: 1580515200, // 2020-02-01
+ NodeIDs: []uint64{777, 888, 999},
+ },
+ {
+ ID: 10,
+ GUID: 5500,
+ GID: 6600,
+ Name: "node",
+ Description: "infrastructure",
+ Deletable: true,
+ Status: "DISABLED",
+ CreatedTime: 1577836800,
+ UpdatedTime: 1580515200,
+ NodeIDs: []uint64{777, 888, 999},
+ },
+ },
+}
+
+func TestFilterByID(t *testing.T) {
+ actual := zones.FilterByID(10).FindOne()
+
+ if actual.ID != 10 {
+ t.Fatal("expected ID 10, found: ", actual.ID)
+ }
+}
+
+func TestFilterByName(t *testing.T) {
+ name := "node"
+ actual := zones.FilterByName(name).FindOne()
+
+ if actual.Name != name {
+ t.Fatal("expected ", name, " found: ", actual.Name)
+ }
+}
+
+func TestFilterByStatus(t *testing.T) {
+ actual := zones.FilterByStatus("DISABLED")
+
+ if len(actual.Data) != 2 {
+ t.Fatal("expected 2 found, actual: ", len(actual.Data))
+ }
+
+ for _, item := range actual.Data {
+ if item.Status != "DISABLED" {
+ t.Fatal("expected Status 'DISABLED', found: ", item.Status)
+ }
+ }
+}
+
+func TestFilterFunc(t *testing.T) {
+ actual := zones.FilterFunc(func(ien RecordZone) bool {
+ return ien.Deletable == true
+ })
+
+ if len(actual.Data) != 3 {
+ t.Fatal("expected 3 elements, found: ", len(actual.Data))
+ }
+}
diff --git a/pkg/cloudbroker/zone/get.go b/pkg/cloudbroker/zone/get.go
new file mode 100644
index 0000000..788770a
--- /dev/null
+++ b/pkg/cloudbroker/zone/get.go
@@ -0,0 +1,46 @@
+package zone
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// GetRequest struct to get detailed information about zone
+type GetRequest struct {
+ // ID of zone
+ // Required: true
+ ID uint64 `url:"id" json:"id" validate:"required"`
+}
+
+// Get gets detailed information about zone struct
+func (e Zone) Get(ctx context.Context, req GetRequest) (*RecordZone, error) {
+ res, err := e.GetRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ info := RecordZone{}
+
+ err = json.Unmarshal(res, &info)
+ if err != nil {
+ return nil, err
+ }
+
+ return &info, nil
+}
+
+// GetRaw gets detailed information about zone as an array of bytes
+func (e Zone) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/zone/get"
+
+ res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ return res, err
+}
diff --git a/pkg/cloudbroker/zone/ids.go b/pkg/cloudbroker/zone/ids.go
new file mode 100644
index 0000000..33f6193
--- /dev/null
+++ b/pkg/cloudbroker/zone/ids.go
@@ -0,0 +1,10 @@
+package zone
+
+// IDs gets array of IDs from ListZones struct
+func (le ListZones) IDs() []uint64 {
+ res := make([]uint64, 0, len(le.Data))
+ for _, e := range le.Data {
+ res = append(res, e.ID)
+ }
+ return res
+}
diff --git a/pkg/cloudbroker/zone/list.go b/pkg/cloudbroker/zone/list.go
new file mode 100644
index 0000000..2b7d141
--- /dev/null
+++ b/pkg/cloudbroker/zone/list.go
@@ -0,0 +1,84 @@
+package zone
+
+import (
+ "context"
+ "encoding/json"
+ "net/http"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// ListRequest struct to get list of zones
+type ListRequest struct {
+
+ // Find by ID
+ // Required: false
+ ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"`
+
+ // Find by Grid ID
+ // Required: false
+ GID uint64 `url:"gid,omitempty" json:"gid,omitempty"`
+
+ // Find by name
+ // Required: false
+ Name string `url:"name,omitempty" json:"name,omitempty"`
+
+ // Find by description
+ // Required: false
+ Description string `url:"description,omitempty" json:"description,omitempty"`
+
+ // Find by status
+ // Required: false
+ Status string `url:"status,omitempty" json:"status,omitempty"`
+
+ // Find by deletable
+ // Required: false
+ Deletable bool `url:"deletable,omitempty" json:"deletable,omitempty"`
+
+ // Find by node ID
+ // Required: false
+ NodeID uint64 `url:"nodeId,omitempty" json:"nodeId,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 all zones as a ListZones struct
+func (e Zone) List(ctx context.Context, req ListRequest) (*ListZones, error) {
+
+ res, err := e.ListRaw(ctx, req)
+ if err != nil {
+ return nil, err
+ }
+
+ list := ListZones{}
+
+ err = json.Unmarshal(res, &list)
+ if err != nil {
+ return nil, err
+ }
+
+ return &list, nil
+}
+
+// ListRaw gets list of all available zones as an array of bytes
+func (e Zone) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
+
+ if err := validators.ValidateRequest(req); err != nil {
+ return nil, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/zone/list"
+
+ res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
+ return res, err
+}
diff --git a/pkg/cloudbroker/zone/models.go b/pkg/cloudbroker/zone/models.go
new file mode 100644
index 0000000..b2340ca
--- /dev/null
+++ b/pkg/cloudbroker/zone/models.go
@@ -0,0 +1,42 @@
+package zone
+
+type ListZones struct {
+ // Entry count
+ EntryCount uint64 `json:"entryCount"`
+
+ // Data
+ Data []RecordZone `json:"data"`
+}
+
+// Detailed information about the zone record
+type RecordZone struct {
+ // ID
+ ID uint64 `json:"id"`
+
+ // GUID
+ GUID uint64 `json:"guid"`
+
+ // GID
+ GID uint64 `json:"gid"`
+
+ // Name
+ Name string `json:"name"`
+
+ // Description
+ Description string `json:"description"`
+
+ // Deletable flag
+ Deletable bool `json:"deletable"`
+
+ // Status
+ Status string `json:"status"`
+
+ // Created timestamp
+ CreatedTime uint64 `json:"createdTime"`
+
+ // Updated timestamp
+ UpdatedTime uint64 `json:"updatedTime"`
+
+ // List of associated Node IDs
+ NodeIDs []uint64 `json:"nodeIds"`
+}
diff --git a/pkg/cloudbroker/zone/serialize.go b/pkg/cloudbroker/zone/serialize.go
new file mode 100644
index 0000000..5e22cf3
--- /dev/null
+++ b/pkg/cloudbroker/zone/serialize.go
@@ -0,0 +1,43 @@
+package zone
+
+import (
+ "encoding/json"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/serialization"
+)
+
+// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
+//
+// In order to serialize with indent make sure to follow these guidelines:
+// - First argument -> prefix
+// - Second argument -> indent
+func (list ListZones) Serialize(params ...string) (serialization.Serialized, error) {
+ if list.EntryCount == 0 {
+ return []byte{}, nil
+ }
+
+ if len(params) > 1 {
+ prefix := params[0]
+ indent := params[1]
+
+ return json.MarshalIndent(list, prefix, indent)
+ }
+
+ return json.Marshal(list)
+}
+
+// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
+//
+// In order to serialize with indent make sure to follow these guidelines:
+// - First argument -> prefix
+// - Second argument -> indent
+func (item RecordZone) Serialize(params ...string) (serialization.Serialized, error) {
+ if len(params) > 1 {
+ prefix := params[0]
+ indent := params[1]
+
+ return json.MarshalIndent(item, prefix, indent)
+ }
+
+ return json.Marshal(item)
+}
diff --git a/pkg/cloudbroker/zone/update.go b/pkg/cloudbroker/zone/update.go
new file mode 100644
index 0000000..c017ae7
--- /dev/null
+++ b/pkg/cloudbroker/zone/update.go
@@ -0,0 +1,47 @@
+package zone
+
+import (
+ "context"
+ "net/http"
+ "strconv"
+
+ "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
+)
+
+// UpdateRequest struct to update zone
+type UpdateRequest struct {
+ // ID of zone
+ // Required: true
+ ID uint64 `url:"id" json:"id" validate:"required"`
+
+ // Name of zone
+ // Required: false
+ Name string `url:"name,omitempty" json:"name,omitempty"`
+
+ // Description
+ // Required: false
+ Description string `url:"description,omitempty" json:"description,omitempty"`
+}
+
+// Update updates zone object
+func (e Zone) Update(ctx context.Context, req UpdateRequest) (bool, error) {
+ err := validators.ValidateRequest(req)
+ if err != nil {
+ return false, validators.ValidationErrors(validators.GetErrors(err))
+ }
+
+ url := "/cloudbroker/zone/update"
+
+ res, err := e.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
+}
diff --git a/pkg/cloudbroker/zone/zone.go b/pkg/cloudbroker/zone/zone.go
new file mode 100644
index 0000000..f0605f5
--- /dev/null
+++ b/pkg/cloudbroker/zone/zone.go
@@ -0,0 +1,18 @@
+// API Actor for use zones
+package zone
+
+import (
+ "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
+)
+
+// Structure for creating request to zone
+type Zone struct {
+ client interfaces.Caller
+}
+
+// Builder for zone endpoints
+func New(client interfaces.Caller) *Zone {
+ return &Zone{
+ client,
+ }
+}
diff --git a/tests/platform_upgrade/cloud_test.go b/tests/platform_upgrade/cloud_test.go
index 6b01359..c14ca90 100644
--- a/tests/platform_upgrade/cloud_test.go
+++ b/tests/platform_upgrade/cloud_test.go
@@ -20,7 +20,10 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/sep"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/stack"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/tasks"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/trunk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/zone"
+
account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
audit_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit"
bservice_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/bservice"
@@ -39,7 +42,9 @@ import (
sep_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
stack_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/stack"
tasks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/tasks"
+ trunk_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/trunk"
vins_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vins"
+ zone_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/zone"
)
// TestGetListCloudAPI tests platforms responses vs. json tags of golang structures in cloudapi get/list methods
@@ -316,6 +321,26 @@ func TestGetListCloudAPI(t *testing.T) {
t.Errorf("Can not test Tasks get because Tasks list is empty")
}
+ // Trunk
+ // List
+ bytes, err = client.CloudAPI().Trunk().ListRaw(context.Background(), trunk.ListRequest{})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Trunk list", bytes, tasks.ListTasks{}, t)
+ // Get
+ listTrunk, _ := client.CloudAPI().Trunk().List(context.Background(), trunk.ListRequest{})
+ if len(listTrunk.Data) > 0 {
+ id := listTrunk.Data[0].ID
+ bytes, err = client.CloudAPI().Trunk().GetRaw(context.Background(), trunk.GetRequest{TrunkID: id})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Trunk get", bytes, trunk.ItemTrunk{}, t)
+ } else {
+ t.Errorf("Can not test Trunk get because Trunk list is empty")
+ }
+
// VINS
// List
bytes, err = client.CloudAPI().VINS().ListRaw(context.Background(), vins.ListRequest{})
@@ -336,6 +361,25 @@ func TestGetListCloudAPI(t *testing.T) {
t.Errorf("Can not test VINS get because VINS list is empty")
}
+ // Zone
+ // List
+ bytes, err = client.CloudAPI().Zone().ListRaw(context.Background(), zone.ListRequest{})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Zone list", bytes, vins.ListVINS{}, t)
+ // Get
+ ListZones, _ := client.CloudAPI().Zone().List(context.Background(), zone.ListRequest{})
+ if len(ListZones.Data) > 0 {
+ id := ListZones.Data[0].ID
+ bytes, err = client.CloudAPI().Zone().GetRaw(context.Background(), zone.GetRequest{ID: id})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Zone get", bytes, zone.RecordZone{}, t)
+ } else {
+ t.Errorf("Can not test Zone get because Zones list is empty")
+ }
}
// WARNING: not working correctly due to inclusions of tagless structures in cloudbroker
@@ -348,6 +392,7 @@ func TestGetListCloudbroker(t *testing.T) {
t.Fatalf("Cannot get client: %v", err)
}
+ const logFileName = "test_get_list_cloudbroker.log"
// Account
// List
bytes, err = client.CloudBroker().Account().ListRaw(context.Background(), account_cb.ListRequest{})
@@ -690,6 +735,26 @@ func TestGetListCloudbroker(t *testing.T) {
}
getResult("Tasks list", bytes, tasks_cb.ListTasks{}, t)
+ // Trunk
+ // List
+ bytes, err = client.CloudBroker().Trunk().ListRaw(context.Background(), trunk_cb.ListRequest{})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Trunk list", bytes, trunk_cb.ListTrunks{}, t)
+ // Get
+ listTrunks, _ := client.CloudBroker().Trunk().List(context.Background(), trunk_cb.ListRequest{})
+ if len(listTrunks.Data) > 0 {
+ id := listTrunks.Data[0].ID
+ bytes, err = client.CloudBroker().Trunk().GetRaw(context.Background(), trunk_cb.GetRequest{TrunkID: id})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Trunk get", bytes, trunk_cb.ItemTrunk{}, t)
+ } else {
+ t.Errorf("Can not test Trunk get because Trunk list is empty")
+ }
+
// VINS
// List
bytes, err = client.CloudBroker().VINS().ListRaw(context.Background(), vins_cb.ListRequest{})
@@ -709,6 +774,26 @@ func TestGetListCloudbroker(t *testing.T) {
} else {
t.Errorf("Can not test VINS get because VINS list is empty")
}
+
+ // Zone
+ // List
+ bytes, err = client.CloudBroker().Zone().ListRaw(context.Background(), zone_cb.ListRequest{})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Zone list", bytes, zone.ListZones{}, t)
+ // Get
+ ListZones, _ := client.CloudBroker().Zone().List(context.Background(), zone_cb.ListRequest{})
+ if len(ListZones.Data) > 0 {
+ id := ListZones.Data[0].ID
+ bytes, err = client.CloudBroker().Zone().GetRaw(context.Background(), zone_cb.GetRequest{ID: id})
+ if err != nil {
+ t.Error(err)
+ }
+ getResult("Zone get", bytes, zone_cb.RecordZone{}, t)
+ } else {
+ t.Errorf("Can not test Zone get because Zones list is empty")
+ }
}
// TestRequestsCloudAPI tests platform requests vs. golang request structures in sdk for cloudapi requests
diff --git a/tests/platform_upgrade/request_map.go b/tests/platform_upgrade/request_map.go
index aa29c73..5526088 100644
--- a/tests/platform_upgrade/request_map.go
+++ b/tests/platform_upgrade/request_map.go
@@ -21,9 +21,11 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/sep"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/stack"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/tasks"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/trunk"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/user"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vfpool"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
+ "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/zone"
account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
apiaccess_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/apiaccess"
@@ -48,10 +50,12 @@ import (
sep_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
stack_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/stack"
tasks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/tasks"
+ trunk_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/trunk"
user_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/user"
vfpool_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vfpool"
vgpu_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vgpu"
vins_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vins"
+ zone_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/zone"
)
type EmptyStruct struct{}
@@ -116,83 +120,91 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/bservice/stop": bservice.StopRequest{},
// compute
- "/restmachine/cloudapi/compute/affinityLabelRemove": compute.AffinityLabelRemoveRequest{},
- "/restmachine/cloudapi/compute/affinityLabelSet": compute.AffinityLabelSetRequest{},
- "/restmachine/cloudapi/compute/affinityRelations": compute.AffinityRelationsRequest{},
- "/restmachine/cloudapi/compute/affinityRuleAdd": compute.AffinityRuleAddRequest{},
- "/restmachine/cloudapi/compute/affinityRuleRemove": compute.AffinityRuleRemoveRequest{},
- "/restmachine/cloudapi/compute/affinityRulesClear": compute.AffinityRulesClearRequest{},
- "/restmachine/cloudapi/compute/antiAffinityRuleAdd": compute.AntiAffinityRuleAddRequest{},
- "/restmachine/cloudapi/compute/antiAffinityRuleRemove": compute.AntiAffinityRuleRemoveRequest{},
- "/restmachine/cloudapi/compute/antiAffinityRulesClear": compute.AffinityRulesClearRequest{},
- "/restmachine/cloudapi/compute/attachGpu": compute.AttachGPURequest{},
- "/restmachine/cloudapi/compute/attachPciDevice": compute.AttachPCIDeviceRequest{},
- "/restmachine/cloudapi/compute/audits": compute.AuditsRequest{},
- "/restmachine/cloudapi/compute/bootDiskSet": compute.BootDiskSetRequest{},
- "/restmachine/cloudapi/compute/bootOrderGet": compute.BootOrderGetRequest{},
- "/restmachine/cloudapi/compute/bootOrderSet": compute.BootOrderSetRequest{},
- "/restmachine/cloudapi/compute/cdEject": compute.CDEjectRequest{},
- "/restmachine/cloudapi/compute/cdInsert": compute.CDInsertRequest{},
- "/restmachine/cloudapi/compute/changeLinkState": compute.ChangeLinkStateRequest{},
- "/restmachine/cloudapi/compute/clone": compute.CloneRequest{},
- "/restmachine/cloudapi/compute/createTemplate": compute.CreateTemplateRequest{},
- "/restmachine/cloudapi/compute/createTemplateFromBlank": compute.CreateTemplateFromBlankRequest{},
- "/restmachine/cloudapi/compute/delete": compute.DeleteRequest{},
- "/restmachine/cloudapi/compute/deleteCustomFields": compute.DeleteCustomFieldsRequest{},
- "/restmachine/cloudapi/compute/detachGpu": compute.DetachGPURequest{},
- "/restmachine/cloudapi/compute/detachPciDevice": compute.DetachPCIDeviceRequest{},
- "/restmachine/cloudapi/compute/disable": compute.DisableRequest{},
- "/restmachine/cloudapi/compute/diskAdd": compute.DiskAddRequest{},
- "/restmachine/cloudapi/compute/diskAttach": compute.DiskAttachRequest{},
- "/restmachine/cloudapi/compute/diskDel": compute.DiskDelRequest{},
- "/restmachine/cloudapi/compute/diskDetach": compute.DiskDetachRequest{},
- "/restmachine/cloudapi/compute/diskMigrate": compute.DiskMigrateRequest{},
- "/restmachine/cloudapi/compute/diskQos": compute.DiskQOSRequest{},
- "/restmachine/cloudapi/compute/diskSwitchToReplication": compute.DiskSwitchToReplicationRequest{},
- "/restmachine/cloudapi/compute/diskResize": compute.DiskResizeRequest{},
- "/restmachine/cloudapi/compute/enable": compute.EnableRequest{},
- "/restmachine/cloudapi/compute/get": compute.GetRequest{},
- "/restmachine/cloudapi/compute/getAudits": compute.GetAuditsRequest{},
- "/restmachine/cloudapi/compute/getConsoleUrl": compute.GetConsoleURLRequest{},
- "/restmachine/cloudapi/compute/getCustomFields": compute.GetCustomFieldsRequest{},
- "/restmachine/cloudapi/compute/getLog": compute.GetLogRequest{},
- "/restmachine/cloudapi/compute/list": compute.ListRequest{},
- "/restmachine/cloudapi/compute/listDeleted": compute.ListDeletedRequest{},
- "/restmachine/cloudapi/compute/listPciDevice": compute.ListPCIDeviceRequest{},
- "/restmachine/cloudapi/compute/listVGpu": compute.ListVGPURequest{},
- "/restmachine/cloudapi/compute/moveToRg": compute.MoveToRGRequest{},
- "/restmachine/cloudapi/compute/netAttach": compute.NetAttachRequest{},
- "/restmachine/cloudapi/compute/netDetach": compute.NetDetachRequest{},
- "/restmachine/cloudapi/compute/pfwAdd": compute.PFWAddRequest{},
- "/restmachine/cloudapi/compute/pfwDel": compute.PFWDelRequest{},
- "/restmachine/cloudapi/compute/pfwList": compute.PFWListRequest{},
- "/restmachine/cloudapi/compute/pause": compute.PauseRequest{},
- "/restmachine/cloudapi/compute/pinToStack": compute.PinToStackRequest{},
- "/restmachine/cloudapi/compute/powerCycle": compute.PowerCycleRequest{},
- "/restmachine/cloudapi/compute/reboot": compute.RebootRequest{},
- "/restmachine/cloudapi/compute/redeploy": compute.RedeployRequest{},
- "/restmachine/cloudapi/compute/reset": compute.ResetRequest{},
- "/restmachine/cloudapi/compute/resize": compute.ResizeRequest{},
- "/restmachine/cloudapi/compute/restore": compute.RestoreRequest{},
- "/restmachine/cloudapi/compute/resume": compute.ResumeRequest{},
- "/restmachine/cloudapi/compute/setCustomFields": compute.SetCustomFieldsRequest{},
- "/restmachine/cloudapi/compute/snapshotCreate": compute.SnapshotCreateRequest{},
- "/restmachine/cloudapi/compute/snapshotDelete": compute.SnapshotDeleteRequest{},
- "/restmachine/cloudapi/compute/snapshotList": compute.SnapshotListRequest{},
- "/restmachine/cloudapi/compute/snapshotRollback": compute.SnapshotRollbackRequest{},
- "/restmachine/cloudapi/compute/snapshotUsage": compute.SnapshotUsageRequest{},
- "/restmachine/cloudapi/compute/start": compute.StartRequest{},
- "/restmachine/cloudapi/compute/stop": compute.StopRequest{},
- "/restmachine/cloudapi/compute/tagAdd": compute.TagAddRequest{},
- "/restmachine/cloudapi/compute/tagRemove": compute.TagRemoveRequest{},
- "/restmachine/cloudapi/compute/unpinFromStack": compute.UnpinFromStackRequest{},
- "/restmachine/cloudapi/compute/update": compute.UpdateRequest{},
- "/restmachine/cloudapi/compute/userGrant": compute.UserGrantRequest{},
- "/restmachine/cloudapi/compute/userList": compute.UserListRequest{},
- "/restmachine/cloudapi/compute/userRevoke": compute.UserRevokeRequest{},
- "/restmachine/cloudapi/compute/userUpdate": compute.UserUpdateRequest{},
- "/restmachine/cloudapi/compute/changeMac": compute.ChangeMACRequest{},
- "/restmachine/cloudapi/compute/changeIp": compute.ChangeIPRequest{},
+ "/restmachine/cloudapi/compute/abort_shared_snapshot_merge": compute.AbortSharedSnapshotMergeRequest{},
+ "/restmachine/cloudapi/compute/shared_snapshot_merge_status": compute.SharedSnapshotMergeStatusRequest{},
+ "/restmachine/cloudapi/compute/change_mtu": compute.ChangeMTURequest{},
+ "/restmachine/cloudapi/compute/affinityLabelRemove": compute.AffinityLabelRemoveRequest{},
+ "/restmachine/cloudapi/compute/affinityLabelSet": compute.AffinityLabelSetRequest{},
+ "/restmachine/cloudapi/compute/affinityRelations": compute.AffinityRelationsRequest{},
+ "/restmachine/cloudapi/compute/affinityRuleAdd": compute.AffinityRuleAddRequest{},
+ "/restmachine/cloudapi/compute/affinityRuleRemove": compute.AffinityRuleRemoveRequest{},
+ "/restmachine/cloudapi/compute/affinityRulesClear": compute.AffinityRulesClearRequest{},
+ "/restmachine/cloudapi/compute/antiAffinityRuleAdd": compute.AntiAffinityRuleAddRequest{},
+ "/restmachine/cloudapi/compute/antiAffinityRuleRemove": compute.AntiAffinityRuleRemoveRequest{},
+ "/restmachine/cloudapi/compute/antiAffinityRulesClear": compute.AffinityRulesClearRequest{},
+ "/restmachine/cloudapi/compute/attachGpu": compute.AttachGPURequest{},
+ "/restmachine/cloudapi/compute/attachPciDevice": compute.AttachPCIDeviceRequest{},
+ "/restmachine/cloudapi/compute/audits": compute.AuditsRequest{},
+ "/restmachine/cloudapi/compute/bootDiskSet": compute.BootDiskSetRequest{},
+ "/restmachine/cloudapi/compute/bootOrderGet": compute.BootOrderGetRequest{},
+ "/restmachine/cloudapi/compute/bootOrderSet": compute.BootOrderSetRequest{},
+ "/restmachine/cloudapi/compute/cdEject": compute.CDEjectRequest{},
+ "/restmachine/cloudapi/compute/cdInsert": compute.CDInsertRequest{},
+ "/restmachine/cloudapi/compute/changeLinkState": compute.ChangeLinkStateRequest{},
+ "/restmachine/cloudapi/compute/clone": compute.CloneRequest{},
+ "/restmachine/cloudapi/compute/createTemplate": compute.CreateTemplateRequest{},
+ "/restmachine/cloudapi/compute/createTemplateFromBlank": compute.CreateTemplateFromBlankRequest{},
+ "/restmachine/cloudapi/compute/delete": compute.DeleteRequest{},
+ "/restmachine/cloudapi/compute/deleteCustomFields": compute.DeleteCustomFieldsRequest{},
+ "/restmachine/cloudapi/compute/detachGpu": compute.DetachGPURequest{},
+ "/restmachine/cloudapi/compute/detachPciDevice": compute.DetachPCIDeviceRequest{},
+ "/restmachine/cloudapi/compute/disable": compute.DisableRequest{},
+ "/restmachine/cloudapi/compute/diskAdd": compute.DiskAddRequest{},
+ "/restmachine/cloudapi/compute/diskAttach": compute.DiskAttachRequest{},
+ "/restmachine/cloudapi/compute/diskDel": compute.DiskDelRequest{},
+ "/restmachine/cloudapi/compute/diskDetach": compute.DiskDetachRequest{},
+ "/restmachine/cloudapi/compute/diskMigrate": compute.DiskMigrateRequest{},
+ "/restmachine/cloudapi/compute/diskQos": compute.DiskQOSRequest{},
+ "/restmachine/cloudapi/compute/diskSwitchToReplication": compute.DiskSwitchToReplicationRequest{},
+ "/restmachine/cloudapi/compute/diskResize": compute.DiskResizeRequest{},
+ "/restmachine/cloudapi/compute/enable": compute.EnableRequest{},
+ "/restmachine/cloudapi/compute/get": compute.GetRequest{},
+ "/restmachine/cloudapi/compute/getAudits": compute.GetAuditsRequest{},
+ "/restmachine/cloudapi/compute/getConsoleUrl": compute.GetConsoleURLRequest{},
+ "/restmachine/cloudapi/compute/getCustomFields": compute.GetCustomFieldsRequest{},
+ "/restmachine/cloudapi/compute/getLog": compute.GetLogRequest{},
+ "/restmachine/cloudapi/compute/list": compute.ListRequest{},
+ "/restmachine/cloudapi/compute/listDeleted": compute.ListDeletedRequest{},
+ "/restmachine/cloudapi/compute/listPciDevice": compute.ListPCIDeviceRequest{},
+ "/restmachine/cloudapi/compute/listVGpu": compute.ListVGPURequest{},
+ "/restmachine/cloudapi/compute/moveToRg": compute.MoveToRGRequest{},
+ "/restmachine/cloudapi/compute/netAttach": compute.NetAttachRequest{},
+ "/restmachine/cloudapi/compute/netDetach": compute.NetDetachRequest{},
+ "/restmachine/cloudapi/compute/pfwAdd": compute.PFWAddRequest{},
+ "/restmachine/cloudapi/compute/pfwDel": compute.PFWDelRequest{},
+ "/restmachine/cloudapi/compute/pfwList": compute.PFWListRequest{},
+ "/restmachine/cloudapi/compute/pause": compute.PauseRequest{},
+ "/restmachine/cloudapi/compute/pinToStack": compute.PinToStackRequest{},
+ "/restmachine/cloudapi/compute/powerCycle": compute.PowerCycleRequest{},
+ "/restmachine/cloudapi/compute/reboot": compute.RebootRequest{},
+ "/restmachine/cloudapi/compute/redeploy": compute.RedeployRequest{},
+ "/restmachine/cloudapi/compute/reset": compute.ResetRequest{},
+ "/restmachine/cloudapi/compute/resize": compute.ResizeRequest{},
+ "/restmachine/cloudapi/compute/restore": compute.RestoreRequest{},
+ "/restmachine/cloudapi/compute/resume": compute.ResumeRequest{},
+ "/restmachine/cloudapi/compute/setCustomFields": compute.SetCustomFieldsRequest{},
+ "/restmachine/cloudapi/compute/snapshotCreate": compute.SnapshotCreateRequest{},
+ "/restmachine/cloudapi/compute/snapshotDelete": compute.SnapshotDeleteRequest{},
+ "/restmachine/cloudapi/compute/snapshotList": compute.SnapshotListRequest{},
+ "/restmachine/cloudapi/compute/snapshotRollback": compute.SnapshotRollbackRequest{},
+ "/restmachine/cloudapi/compute/snapshotUsage": compute.SnapshotUsageRequest{},
+ "/restmachine/cloudapi/compute/start": compute.StartRequest{},
+ "/restmachine/cloudapi/compute/stop": compute.StopRequest{},
+ "/restmachine/cloudapi/compute/tagAdd": compute.TagAddRequest{},
+ "/restmachine/cloudapi/compute/tagRemove": compute.TagRemoveRequest{},
+ "/restmachine/cloudapi/compute/unpinFromStack": compute.UnpinFromStackRequest{},
+ "/restmachine/cloudapi/compute/update": compute.UpdateRequest{},
+ "/restmachine/cloudapi/compute/userGrant": compute.UserGrantRequest{},
+ "/restmachine/cloudapi/compute/userList": compute.UserListRequest{},
+ "/restmachine/cloudapi/compute/userRevoke": compute.UserRevokeRequest{},
+ "/restmachine/cloudapi/compute/userUpdate": compute.UserUpdateRequest{},
+ "/restmachine/cloudapi/compute/changeMac": compute.ChangeMACRequest{},
+ "/restmachine/cloudapi/compute/changeIp": compute.ChangeIPRequest{},
+ "/restmachine/cloudapi/compute/guest_agent_disable": compute.GuestAgentDisableRequest{},
+ "/restmachine/cloudapi/compute/guest_agent_enable": compute.GuestAgentEnableRequest{},
+ "/restmachine/cloudapi/compute/guest_agent_execute": compute.GuestAgentExecuteRequest{},
+ "/restmachine/cloudapi/compute/guest_agent_feature_get": compute.GuestAgentFeatureGetRequest{},
+ "/restmachine/cloudapi/compute/guest_agent_feature_update": compute.GuestAgentFeatureUpdateRequest{},
// disks
"/restmachine/cloudapi/disks/create": disks.CreateRequest{},
@@ -372,6 +384,10 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/tasks/get": tasks.GetRequest{},
"/restmachine/cloudapi/tasks/list": tasks.ListRequest{},
+ // trunk
+ "/restmachine/cloudapi/trunk/get": trunk.GetRequest{},
+ "/restmachine/cloudapi/trunk/list": trunk.ListRequest{},
+
// user
"/restmachine/cloudapi/user/apiList": user.APIListRequest{},
"/restmachine/cloudapi/user/authenticate": user.AuthenticateRequest{},
@@ -414,6 +430,10 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/vins/staticRouteList": vins.StaticRouteListRequest{},
"/restmachine/cloudapi/vins/vnfdevRedeploy": vins.VNFDevRedeployRequest{},
"/restmachine/cloudapi/vins/vnfdevRestart": vins.VNFDevRestartRequest{},
+
+ // zone
+ "/restmachine/cloudapi/zone/get": zone.GetRequest{},
+ "/restmachine/cloudapi/zone/list": zone.ListRequest{},
}
}
@@ -485,99 +505,107 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/backup/restoreDisksFromBackup": backup_cb.RestoreDisksFromBackupRequest{},
// compute_cb
- "/restmachine/cloudbroker/compute/affinityGroupCheckStart": compute_cb.AffinityGroupCheckStartRequest{},
- "/restmachine/cloudbroker/compute/affinityLabelRemove": compute_cb.AffinityLabelRemoveRequest{},
- "/restmachine/cloudbroker/compute/affinityLabelSet": compute_cb.AffinityLabelSetRequest{},
- "/restmachine/cloudbroker/compute/affinityRelations": compute_cb.AffinityRelationsRequest{},
- "/restmachine/cloudbroker/compute/affinityRuleAdd": compute_cb.AffinityRuleAddRequest{},
- "/restmachine/cloudbroker/compute/affinityRuleRemove": compute_cb.AffinityRuleRemoveRequest{},
- "/restmachine/cloudbroker/compute/affinityRulesClear": compute_cb.AffinityRulesClearRequest{},
- "/restmachine/cloudbroker/compute/antiAffinityRuleAdd": compute_cb.AntiAffinityRuleAddRequest{},
- "/restmachine/cloudbroker/compute/antiAffinityRuleRemove": compute_cb.AntiAffinityRuleRemoveRequest{},
- "/restmachine/cloudbroker/compute/antiAffinityRulesClear": compute_cb.AffinityRulesClearRequest{},
- "/restmachine/cloudbroker/compute/attachGpu": compute_cb.AttachGPURequest{},
- "/restmachine/cloudbroker/compute/attachPciDevice": compute_cb.AttachPCIDeviceRequest{},
- "/restmachine/cloudbroker/compute/audits": compute_cb.AuditsRequest{},
- "/restmachine/cloudbroker/compute/bootDiskSet": compute_cb.BootDiskSetRequest{},
- "/restmachine/cloudbroker/compute/bootOrderGet": compute_cb.BootOrderGetRequest{},
- "/restmachine/cloudbroker/compute/bootOrderSet": compute_cb.BootOrderSetRequest{},
- "/restmachine/cloudbroker/compute/cdEject": compute_cb.CDEjectRequest{},
- "/restmachine/cloudbroker/compute/cdInsert": compute_cb.CDInsertRequest{},
- "/restmachine/cloudbroker/compute/changeLinkState": compute_cb.ChangeLinkStateRequest{},
- "/restmachine/cloudbroker/compute/clone": compute_cb.CloneRequest{},
- "/restmachine/cloudbroker/compute/computeciSet": compute_cb.ComputeCISetRequest{},
- "/restmachine/cloudbroker/compute/computeciUnset": compute_cb.ComputeCIUnsetRequest{},
- "/restmachine/cloudbroker/compute/createTemplate": compute_cb.CreateTemplateRequest{},
- "/restmachine/cloudbroker/compute/createTemplateFromBlank": compute_cb.CreateTemplateFromBlankRequest{},
- "/restmachine/cloudbroker/compute/delete": compute_cb.DeleteRequest{},
- "/restmachine/cloudbroker/compute/deleteCustomFields": compute_cb.DeleteCustomFieldsRequest{},
- "/restmachine/cloudbroker/compute/detachGpu": compute_cb.DetachGPURequest{},
- "/restmachine/cloudbroker/compute/detachPciDevice": compute_cb.DetachPCIDeviceRequest{},
- "/restmachine/cloudbroker/compute/disable": compute_cb.DisableRequest{},
- "/restmachine/cloudbroker/compute/diskAdd": compute_cb.DiskAddRequest{},
- "/restmachine/cloudbroker/compute/diskAttach": compute_cb.DiskAttachRequest{},
- "/restmachine/cloudbroker/compute/diskDel": compute_cb.DiskDelRequest{},
- "/restmachine/cloudbroker/compute/diskDetach": compute_cb.DiskDetachRequest{},
- "/restmachine/cloudbroker/compute/diskMigrate": compute_cb.DiskMigrateRequest{},
- "/restmachine/cloudbroker/compute/diskResize": compute_cb.DiskResizeRequest{},
- "/restmachine/cloudbroker/compute/diskSwitchToReplication": compute_cb.DiskSwitchToReplicationRequest{},
- "/restmachine/cloudbroker/compute/diskQos": compute_cb.DiskQOSRequest{},
- "/restmachine/cloudbroker/compute/enable": compute_cb.EnableRequest{},
- "/restmachine/cloudbroker/compute/get": compute_cb.GetRequest{},
- "/restmachine/cloudbroker/compute/getAudits": compute_cb.GetAuditsRequest{},
- "/restmachine/cloudbroker/compute/getConsoleUrl": compute_cb.GetConsoleURLRequest{},
- "/restmachine/cloudbroker/compute/getCustomFields": compute_cb.GetCustomFieldsRequest{},
- "/restmachine/cloudbroker/compute/getLog": compute_cb.GetLogRequest{},
- "/restmachine/cloudbroker/compute/list": compute_cb.ListRequest{},
- "/restmachine/cloudbroker/compute/listDeleted": compute_cb.ListDeletedRequest{},
- "/restmachine/cloudbroker/compute/listPciDevice": compute_cb.ListPCIDeviceRequest{},
- "/restmachine/cloudbroker/compute/listVGpu": compute_cb.ListVGPURequest{},
- "/restmachine/cloudbroker/compute/massDelete": compute_cb.MassDeleteRequest{},
- "/restmachine/cloudbroker/compute/massStart": compute_cb.MassStartRequest{},
- "/restmachine/cloudbroker/compute/massStop": compute_cb.MassStopRequest{},
- "/restmachine/cloudbroker/compute/massReboot": compute_cb.MassRebootRequest{},
- "/restmachine/cloudbroker/compute/migrate": compute_cb.MigrateRequest{},
- "/restmachine/cloudbroker/compute/migrateStorage": compute_cb.MigrateStorageRequest{},
- "/restmachine/cloudbroker/compute/migrateStorageAbort": compute_cb.MigrateStorageAbortRequest{},
- "/restmachine/cloudbroker/compute/migrateStorageCleanup": compute_cb.MigrateStorageCleanUpRequest{},
- "/restmachine/cloudbroker/compute/migrateStorageInfo": compute_cb.MigrateStorageInfoRequest{},
- "/restmachine/cloudbroker/compute/moveToRg": compute_cb.MoveToRGRequest{},
- "/restmachine/cloudbroker/compute/netAttach": compute_cb.NetAttachRequest{},
- "/restmachine/cloudbroker/compute/netDetach": compute_cb.NetDetachRequest{},
- "/restmachine/cloudbroker/compute/netQos": compute_cb.NetQOSRequest{},
- "/restmachine/cloudbroker/compute/pfwAdd": compute_cb.PFWAddRequest{},
- "/restmachine/cloudbroker/compute/pfwDel": compute_cb.PFWDelRequest{},
- "/restmachine/cloudbroker/compute/pfwList": compute_cb.PFWListRequest{},
- "/restmachine/cloudbroker/compute/pause": compute_cb.PauseRequest{},
- "/restmachine/cloudbroker/compute/pinToStack": compute_cb.PinToStackRequest{},
- "/restmachine/cloudbroker/compute/powerCycle": compute_cb.PowerCycleRequest{},
- "/restmachine/cloudbroker/compute/raiseDown": EmptyStruct{},
- "/restmachine/cloudbroker/compute/reboot": compute_cb.RebootRequest{},
- "/restmachine/cloudbroker/compute/redeploy": compute_cb.RedeployRequest{},
- "/restmachine/cloudbroker/compute/reset": compute_cb.ResetRequest{},
- "/restmachine/cloudbroker/compute/resize": compute_cb.ResizeRequest{},
- "/restmachine/cloudbroker/compute/restore": compute_cb.RestoreRequest{},
- "/restmachine/cloudbroker/compute/resume": compute_cb.ResumeRequest{},
- "/restmachine/cloudbroker/compute/setCustomFields": compute_cb.SetCustomFieldsRequest{},
- "/restmachine/cloudbroker/compute/snapshotCreate": compute_cb.SnapshotCreateRequest{},
- "/restmachine/cloudbroker/compute/snapshotDelete": compute_cb.SnapshotDeleteRequest{},
- "/restmachine/cloudbroker/compute/snapshotEvictDisk": compute_cb.SnapshotEvictDiskRequest{},
- "/restmachine/cloudbroker/compute/snapshotList": compute_cb.SnapshotListRequest{},
- "/restmachine/cloudbroker/compute/snapshotRollback": compute_cb.SnapshotRollbackRequest{},
- "/restmachine/cloudbroker/compute/snapshotUsage": compute_cb.SnapshotUsageRequest{},
- "/restmachine/cloudbroker/compute/start": compute_cb.StartRequest{},
- "/restmachine/cloudbroker/compute/stop": compute_cb.StopRequest{},
- "/restmachine/cloudbroker/compute/tagAdd": compute_cb.TagAddRequest{},
- "/restmachine/cloudbroker/compute/tagRemove": compute_cb.TagRemoveRequest{},
- "/restmachine/cloudbroker/compute/unpinFromStack": compute_cb.UnpinFromStackRequest{},
- "/restmachine/cloudbroker/compute/update": compute_cb.UpdateRequest{},
- "/restmachine/cloudbroker/compute/userGrant": compute_cb.UserGrantRequest{},
- "/restmachine/cloudbroker/compute/userList": compute_cb.UserListRequest{},
- "/restmachine/cloudbroker/compute/userRevoke": compute_cb.UserRevokeRequest{},
- "/restmachine/cloudbroker/compute/userUpdate": compute_cb.UserUpdateRequest{},
- "/restmachine/cloudbroker/compute/changeIp": compute_cb.ChangeIPRequest{},
- "/restmachine/cloudbroker/compute/changeMac": compute_cb.ChangeMACRequest{},
- "/restmachine/cloudbroker/compute/setNetConfig": compute_cb.SetNetConfigRequest{},
+ "/restmachine/cloudapi/compute/abort_shared_snapshot_merge": compute.AbortSharedSnapshotMergeRequest{},
+ "/restmachine/cloudapi/compute/shared_snapshot_merge_status": compute.SharedSnapshotMergeStatusRequest{},
+ "/restmachine/cloudbroker/compute/affinityGroupCheckStart": compute_cb.AffinityGroupCheckStartRequest{},
+ "/restmachine/cloudbroker/compute/affinityLabelRemove": compute_cb.AffinityLabelRemoveRequest{},
+ "/restmachine/cloudbroker/compute/affinityLabelSet": compute_cb.AffinityLabelSetRequest{},
+ "/restmachine/cloudbroker/compute/affinityRelations": compute_cb.AffinityRelationsRequest{},
+ "/restmachine/cloudbroker/compute/affinityRuleAdd": compute_cb.AffinityRuleAddRequest{},
+ "/restmachine/cloudbroker/compute/affinityRuleRemove": compute_cb.AffinityRuleRemoveRequest{},
+ "/restmachine/cloudbroker/compute/affinityRulesClear": compute_cb.AffinityRulesClearRequest{},
+ "/restmachine/cloudbroker/compute/antiAffinityRuleAdd": compute_cb.AntiAffinityRuleAddRequest{},
+ "/restmachine/cloudbroker/compute/antiAffinityRuleRemove": compute_cb.AntiAffinityRuleRemoveRequest{},
+ "/restmachine/cloudbroker/compute/antiAffinityRulesClear": compute_cb.AffinityRulesClearRequest{},
+ "/restmachine/cloudbroker/compute/attachGpu": compute_cb.AttachGPURequest{},
+ "/restmachine/cloudbroker/compute/attachPciDevice": compute_cb.AttachPCIDeviceRequest{},
+ "/restmachine/cloudbroker/compute/audits": compute_cb.AuditsRequest{},
+ "/restmachine/cloudbroker/compute/bootDiskSet": compute_cb.BootDiskSetRequest{},
+ "/restmachine/cloudbroker/compute/bootOrderGet": compute_cb.BootOrderGetRequest{},
+ "/restmachine/cloudbroker/compute/bootOrderSet": compute_cb.BootOrderSetRequest{},
+ "/restmachine/cloudbroker/compute/cdEject": compute_cb.CDEjectRequest{},
+ "/restmachine/cloudbroker/compute/cdInsert": compute_cb.CDInsertRequest{},
+ "/restmachine/cloudbroker/compute/changeLinkState": compute_cb.ChangeLinkStateRequest{},
+ "/restmachine/cloudbroker/compute/change_mtu": compute_cb.ChangeMTURequest{},
+ "/restmachine/cloudbroker/compute/clone": compute_cb.CloneRequest{},
+ "/restmachine/cloudbroker/compute/computeciSet": compute_cb.ComputeCISetRequest{},
+ "/restmachine/cloudbroker/compute/computeciUnset": compute_cb.ComputeCIUnsetRequest{},
+ "/restmachine/cloudbroker/compute/createTemplate": compute_cb.CreateTemplateRequest{},
+ "/restmachine/cloudbroker/compute/createTemplateFromBlank": compute_cb.CreateTemplateFromBlankRequest{},
+ "/restmachine/cloudbroker/compute/delete": compute_cb.DeleteRequest{},
+ "/restmachine/cloudbroker/compute/deleteCustomFields": compute_cb.DeleteCustomFieldsRequest{},
+ "/restmachine/cloudbroker/compute/detachGpu": compute_cb.DetachGPURequest{},
+ "/restmachine/cloudbroker/compute/detachPciDevice": compute_cb.DetachPCIDeviceRequest{},
+ "/restmachine/cloudbroker/compute/disable": compute_cb.DisableRequest{},
+ "/restmachine/cloudbroker/compute/diskAdd": compute_cb.DiskAddRequest{},
+ "/restmachine/cloudbroker/compute/diskAttach": compute_cb.DiskAttachRequest{},
+ "/restmachine/cloudbroker/compute/diskDel": compute_cb.DiskDelRequest{},
+ "/restmachine/cloudbroker/compute/diskDetach": compute_cb.DiskDetachRequest{},
+ "/restmachine/cloudbroker/compute/diskMigrate": compute_cb.DiskMigrateRequest{},
+ "/restmachine/cloudbroker/compute/diskResize": compute_cb.DiskResizeRequest{},
+ "/restmachine/cloudbroker/compute/diskSwitchToReplication": compute_cb.DiskSwitchToReplicationRequest{},
+ "/restmachine/cloudbroker/compute/diskQos": compute_cb.DiskQOSRequest{},
+ "/restmachine/cloudbroker/compute/enable": compute_cb.EnableRequest{},
+ "/restmachine/cloudbroker/compute/get": compute_cb.GetRequest{},
+ "/restmachine/cloudbroker/compute/getAudits": compute_cb.GetAuditsRequest{},
+ "/restmachine/cloudbroker/compute/getConsoleUrl": compute_cb.GetConsoleURLRequest{},
+ "/restmachine/cloudbroker/compute/getCustomFields": compute_cb.GetCustomFieldsRequest{},
+ "/restmachine/cloudbroker/compute/getLog": compute_cb.GetLogRequest{},
+ "/restmachine/cloudbroker/compute/list": compute_cb.ListRequest{},
+ "/restmachine/cloudbroker/compute/listDeleted": compute_cb.ListDeletedRequest{},
+ "/restmachine/cloudbroker/compute/listPciDevice": compute_cb.ListPCIDeviceRequest{},
+ "/restmachine/cloudbroker/compute/listVGpu": compute_cb.ListVGPURequest{},
+ "/restmachine/cloudbroker/compute/massDelete": compute_cb.MassDeleteRequest{},
+ "/restmachine/cloudbroker/compute/massStart": compute_cb.MassStartRequest{},
+ "/restmachine/cloudbroker/compute/massStop": compute_cb.MassStopRequest{},
+ "/restmachine/cloudbroker/compute/massReboot": compute_cb.MassRebootRequest{},
+ "/restmachine/cloudbroker/compute/migrate": compute_cb.MigrateRequest{},
+ "/restmachine/cloudbroker/compute/migrateStorage": compute_cb.MigrateStorageRequest{},
+ "/restmachine/cloudbroker/compute/migrateStorageAbort": compute_cb.MigrateStorageAbortRequest{},
+ "/restmachine/cloudbroker/compute/migrateStorageCleanup": compute_cb.MigrateStorageCleanUpRequest{},
+ "/restmachine/cloudbroker/compute/migrateStorageInfo": compute_cb.MigrateStorageInfoRequest{},
+ "/restmachine/cloudbroker/compute/moveToRg": compute_cb.MoveToRGRequest{},
+ "/restmachine/cloudbroker/compute/netAttach": compute_cb.NetAttachRequest{},
+ "/restmachine/cloudbroker/compute/netDetach": compute_cb.NetDetachRequest{},
+ "/restmachine/cloudbroker/compute/netQos": compute_cb.NetQOSRequest{},
+ "/restmachine/cloudbroker/compute/pfwAdd": compute_cb.PFWAddRequest{},
+ "/restmachine/cloudbroker/compute/pfwDel": compute_cb.PFWDelRequest{},
+ "/restmachine/cloudbroker/compute/pfwList": compute_cb.PFWListRequest{},
+ "/restmachine/cloudbroker/compute/pause": compute_cb.PauseRequest{},
+ "/restmachine/cloudbroker/compute/pinToStack": compute_cb.PinToStackRequest{},
+ "/restmachine/cloudbroker/compute/powerCycle": compute_cb.PowerCycleRequest{},
+ "/restmachine/cloudbroker/compute/raiseDown": EmptyStruct{},
+ "/restmachine/cloudbroker/compute/reboot": compute_cb.RebootRequest{},
+ "/restmachine/cloudbroker/compute/redeploy": compute_cb.RedeployRequest{},
+ "/restmachine/cloudbroker/compute/reset": compute_cb.ResetRequest{},
+ "/restmachine/cloudbroker/compute/resize": compute_cb.ResizeRequest{},
+ "/restmachine/cloudbroker/compute/restore": compute_cb.RestoreRequest{},
+ "/restmachine/cloudbroker/compute/resume": compute_cb.ResumeRequest{},
+ "/restmachine/cloudbroker/compute/setCustomFields": compute_cb.SetCustomFieldsRequest{},
+ "/restmachine/cloudbroker/compute/snapshotCreate": compute_cb.SnapshotCreateRequest{},
+ "/restmachine/cloudbroker/compute/snapshotDelete": compute_cb.SnapshotDeleteRequest{},
+ "/restmachine/cloudbroker/compute/snapshotEvictDisk": compute_cb.SnapshotEvictDiskRequest{},
+ "/restmachine/cloudbroker/compute/snapshotList": compute_cb.SnapshotListRequest{},
+ "/restmachine/cloudbroker/compute/snapshotRollback": compute_cb.SnapshotRollbackRequest{},
+ "/restmachine/cloudbroker/compute/snapshotUsage": compute_cb.SnapshotUsageRequest{},
+ "/restmachine/cloudbroker/compute/start": compute_cb.StartRequest{},
+ "/restmachine/cloudbroker/compute/stop": compute_cb.StopRequest{},
+ "/restmachine/cloudbroker/compute/tagAdd": compute_cb.TagAddRequest{},
+ "/restmachine/cloudbroker/compute/tagRemove": compute_cb.TagRemoveRequest{},
+ "/restmachine/cloudbroker/compute/unpinFromStack": compute_cb.UnpinFromStackRequest{},
+ "/restmachine/cloudbroker/compute/update": compute_cb.UpdateRequest{},
+ "/restmachine/cloudbroker/compute/userGrant": compute_cb.UserGrantRequest{},
+ "/restmachine/cloudbroker/compute/userList": compute_cb.UserListRequest{},
+ "/restmachine/cloudbroker/compute/userRevoke": compute_cb.UserRevokeRequest{},
+ "/restmachine/cloudbroker/compute/userUpdate": compute_cb.UserUpdateRequest{},
+ "/restmachine/cloudbroker/compute/changeIp": compute_cb.ChangeIPRequest{},
+ "/restmachine/cloudbroker/compute/changeMac": compute_cb.ChangeMACRequest{},
+ "/restmachine/cloudbroker/compute/setNetConfig": compute_cb.SetNetConfigRequest{},
+ "/restmachine/cloudbroker/compute/guest_agent_disable": compute_cb.GuestAgentDisableRequest{},
+ "/restmachine/cloudbroker/compute/guest_agent_enable": compute_cb.GuestAgentEnableRequest{},
+ "/restmachine/cloudbroker/compute/guest_agent_execute": compute_cb.GuestAgentExecuteRequest{},
+ "/restmachine/cloudbroker/compute/guest_agent_feature_get": compute_cb.GuestAgentFeatureGetRequest{},
+ "/restmachine/cloudbroker/compute/guest_agent_feature_update": compute_cb.GuestAgentFeatureUpdateRequest{},
// disks
"/restmachine/cloudbroker/disks/create": disks_cb.CreateRequest{},
@@ -643,6 +671,7 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/extnet/ntpApply": extnet_cb.NTPApplyRequest{},
"/restmachine/cloudbroker/extnet/raiseDown": EmptyStruct{},
"/restmachine/cloudbroker/extnet/setDefault": extnet_cb.SetDefaultRequest{},
+ "/restmachine/cloudbroker/extnet/set_highly_available": extnet_cb.SetHAModeRequest{},
"/restmachine/cloudbroker/extnet/staticRouteAccessGrant": extnet_cb.StaticRouteAccessGrantRequest{},
"/restmachine/cloudbroker/extnet/staticRouteAccessRevoke": extnet_cb.StaticRouteAccessRevokeRequest{},
"/restmachine/cloudbroker/extnet/staticRouteAdd": extnet_cb.StaticRouteAddRequest{},
@@ -707,7 +736,6 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/image/rename": image_cb.RenameRequest{},
"/restmachine/cloudbroker/image/revokeAccess": image_cb.RevokeAccessRequest{},
"/restmachine/cloudbroker/image/share": image_cb.ShareRequest{},
- "/restmachine/cloudbroker/image/syncCreateImage": image_cb.SyncCreateRequest{},
"/restmachine/cloudbroker/image/updateNodes": image_cb.UpdateNodesRequest{},
// k8ci
@@ -896,11 +924,23 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/tasks/get": tasks_cb.GetRequest{},
"/restmachine/cloudbroker/tasks/list": tasks_cb.ListRequest{},
+ // trunk
+ "/restmachine/cloudbroker/trunk/get": trunk_cb.GetRequest{},
+ "/restmachine/cloudbroker/trunk/list": trunk_cb.ListRequest{},
+ "/restmachine/cloudbroker/trunk/create": trunk_cb.CreateRequest{},
+ "/restmachine/cloudbroker/trunk/enable": trunk_cb.EnableRequest{},
+ "/restmachine/cloudbroker/trunk/disable": trunk_cb.DisableRequest{},
+ "/restmachine/cloudbroker/trunk/destroy": trunk_cb.DestroyRequest{},
+ "/restmachine/cloudbroker/trunk/update": trunk_cb.UpdateRequest{},
+ "/restmachine/cloudbroker/trunk/access_grant": trunk_cb.AccessGrantRequest{},
+ "/restmachine/cloudbroker/trunk/access_revoke": trunk_cb.AccessRevokeRequest{},
+
// user
"/restmachine/cloudbroker/user/apiaccessJoin": user_cb.APIAccessJoinRequest{},
"/restmachine/cloudbroker/user/apiaccessLeave": user_cb.APIAccessLeaveRequest{},
"/restmachine/cloudbroker/user/apiaccessList": user_cb.APIAccessListRequest{},
"/restmachine/cloudbroker/user/apiList": user_cb.APIListRequest{},
+ "/restmachine/cloudbroker/user/block": user_cb.BlockRequest{},
"/restmachine/cloudbroker/user/create": user_cb.CreateRequest{},
"/restmachine/cloudbroker/user/delete": user_cb.DeleteRequest{},
"/restmachine/cloudbroker/user/deleteByGuid": user_cb.DeleteByGUIDRequest{},
@@ -909,6 +949,7 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/user/getAudit": user_cb.GetAuditRequest{},
"/restmachine/cloudbroker/user/getMatchingUsernames": user_cb.GetMatchingUsernamesRequest{},
"/restmachine/cloudbroker/user/list": user_cb.ListRequest{},
+ "/restmachine/cloudbroker/user/unblock": user_cb.UnblockRequest{},
// vfpool
"/restmachine/cloudbroker/vfpool/create": vfpool_cb.CreateRequest{},
@@ -964,5 +1005,14 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/vins/vnfdevReset": vins_cb.VNFDevResetRequest{},
"/restmachine/cloudbroker/vins/vnfdevStart": vins_cb.VNFDevStartRequest{},
"/restmachine/cloudbroker/vins/vnfdevStop": vins_cb.VNFDevStopRequest{},
+
+ // zone
+ "/restmachine/cloudbroker/zone/get": zone_cb.GetRequest{},
+ "/restmachine/cloudbroker/zone/list": zone_cb.ListRequest{},
+ "/restmachine/cloudbroker/zone/create": zone_cb.CreateRequest{},
+ "/restmachine/cloudbroker/zone/delete": zone_cb.DeleteRequest{},
+ "/restmachine/cloudbroker/zone/update": zone_cb.UpdateRequest{},
+ "/restmachine/cloudbroker/zone/addNode": zone_cb.AddNodeRequest{},
+ "/restmachine/cloudbroker/zone/delNode": zone_cb.DelNodeRequest{},
}
}