diff --git a/.gitignore b/.gitignore index 09215c4..54c2405 100644 --- a/.gitignore +++ b/.gitignore @@ -3,3 +3,7 @@ cmd/ .vscode/ .fleet/ .DS_Store +tests/platform_upgrade/.env +tests/platform_upgrade/input.json +tests/platform_upgrade/*.txt +*.env diff --git a/CHANGELOG.md b/CHANGELOG.md index 753ffa1..87d76b6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,131 @@ -## Version 1.8.3 +## Version 1.9.0 + +### Feature + +#### account +- Delete field RecursiveDelete in DeleteUserRequest in cloudapi/account and cloudbroker/account +- Add field UniqPools in UpdateRequest in cloudapi/account +- Add field ClearUniqPools in UpdateRequest in cloudbroker/account +- Add field SortBy in listFlipGroups in cloudapi/account +- Change Ratio field from required to optional in SetCPUAllocationRatioRequest in cloudbroker/compute + +#### audit +- Add endpoint Get in cloudapi/audit +- Add endpoint ExportAuditsToFile in cloudbroker/audit +- Delete field Apitask in model RecordAudit in cloudbroker/audit + +#### compute +- Add support DPDK network net type in NetAttach endpoints in cloudapi/compute and cloudbroker/compute +- Add field Force in CloneRequest in cloudapi/compute and cloudbroker/compute +- Change TargetStackID field from required to optional (add default 0 value) in PinToStackRequest in cloudbroker/compute +- Change return value type from bool to string in SnapshotDelete in cloudbroker/compute and cloudapi/compute +- Add field StatusCheck in MigrateStorageAbortRequest in cloudbroker/compute +- Add function SnapshotDeleteAsync in cloudapi/compute and cloudbroker/compute +- Add field StackID in ListRequest in cloudbroker/compute +- Add field NodeID in model RecordCompute in cloudbroker/compute +- Add function SetNetConfig in cloudbroker/compute +- Add field MTU in model RecordNetAttach in cloudapi/compute and cloudbroker/compute +- Change Mode field from required to optional in DiskMigrateRequest in cloudapi/compute +- Add field Chipset in model RecordCompute in cloudapi/compute and cloudbroker/compute +- Add field BusNumber in model RecordCompute, ItemComputeDisk, ItemDisk, InfoDisk in cloudapi/compute and cloudbroker/compute +- Add field ImageID in ListRequest in cloudbroker/compute +- Change Mode field from required to optional in DiskMigrateRequest in cloudbroker/compute +- Add field Chipset in ListRequest in cloudbroker/compute +- Add endpoints ChangeIP in cloudapi/compute and cloudbroker/compute + +#### disks +- Change drivers field from optional to required in FromPlatformDiskRequest in cloudapi/disks, cloudbroker/disks + +#### dpdknet +- Add endpoints List, Get in cloudapi/dpdk +- Add endpoints Create, Delete, Disable Enable, Get, List, Update in cloudbroker/dpdk + +#### extnet +- Change StackId field from required to optional in DeviceMigrateRequest in cloudbroker/extnet + +#### flipgroup +- Change ClientIDs field from []uint64 to []string in ListRequest, cloudapi/flipgroup + +#### grid +- Change PasswordLength field from required to optional (add default 9 value) in SetPasswordPolicyRequest in cloudbroker/grid +- Set Default value (true) in fields Digits and Uppercase in SetPasswordPolicyRequest in cloudbroker/grid +- Add fields ckey, meta in model RecordGrid in cloudbroker/grid +- Change GID field from uint64 to string in ExecuteMaintenanceScriptRequest in cloudbroker/grid +- Add endpoints GetSettings and GetSettingsRaw in cloudbroker/grid + +#### group +- Change StackId field from uint64 to string in ListRequest in cloudbroker/group + +#### image: +- Change Drivers field from required to optional in CreateCDROMImageRequest in cloudbroker/image +- Add field Enabled in ListRequest in cloudapi/image and cloudbroker/image +- Delete field GID in SyncCreateRequest in cloudbroker/image +- Delete field Permanently in DeleteRequest in cloudapi/image and cloudbroker/image +- Delete field Permanently in DeleteImagesRequest in cloudbroker/image + +#### k8s +- Add fields HighlyAvailableLB, AddressVip, ExtnetOnly, WithLB in model RecordK8S in cloudbroker/k8s and cloudapi/k8s +- Change MasterIds field from a slice of string to a slice of integers in DeleteMasterFromGroupRequest in cloudbroker/k8s and cloudapi/k8s +- Add field Chipset in WorkerAddRequest, WorkersGroupAddRequest in cloudapi/k8s, cloudbroker/k8s +- Add field Chipset in CreateRequest in cloudapi/k8s, cloudbroker/k8s + +#### kvmx86 +- Add support DPDK network interface in Create endpoints in cloudapi/kvmx86 and cloudbroker/kvmx8 +- Add field Chipset in CreateRequest, CreateBlankRequest, MassCreateRequest, CreateBlankRequest in cloudapi/kvmx86 and cloudbroker/kvmx86 +- Add function MassCreateAsync in cloudbroker/kvmx86 + +#### lb +- Change ExtNetID field from uint64 to int64 in CreateRequest, ItemLBList, RecordLB in cloudapi/lb, cloudbroker/lb +- Change ExtNetID, VINSID fields from required to optional in CreateRequest in cloudapi/lb + +#### node +- Add field Force in EnableRequest in cloudbroker/node +- Add function EnableAsync in cloudbroker/node + +#### rg +- Add endpoints removeDefNet in cloudapi/rg and cloudbroker/rg +- Add field ClearUniqPools in UpdateRequest in cloudbroker/rg and cloudapi/rg +- Add field UniqPools in UpdateRequest in cloudapi/rg +- Delete field IPCIDR in CreateRequest in cloudbroker/rg + +#### sep +- Add endpoints SharedLockStart and SharedLockStop in cloudbroker/sep + +#### user +- Add field GUID in models ItemAudit in cloudapi/user and cloudbroker/user +- Add fields MaxStatusCode and MinStatusCode in GetAuditRequest in cloudapi/user + +#### vins +- Add field Computes in model ListVINS in cloudbroker/vins +- Add fields VNFDevId in ListRequest in cloudapi/vins and in ListDeletedRequest in cloudbroker/vins +- Add field MTU, LibvirtSettings in model ItemInterface in cloudapi/vins and cloudbroker/vins +- Add field BusNumber in model ItemInterface in cloudapi/vins and cloudbroker/vins + +### Removed + +#### common +- The reason field has been deleted everywhere + +#### accounts +- The GetConsumption function was removed in cloudapi/account + +#### grid +- The CheckVMs function was removed in cloudbroker/grid +- The CreateSystemSpace function was removed in cloudbroker/grid + +#### image +- The Permanently field has been removed from DeleteCDROMImageRequest in cloudbroker/image + +#### kvmppc +- The group has been completely deleted + +#### sizes +- The group has been completely deleted + +#### user +- The StatusCode field has been deleted from GetAuditRequest in cloudapi/user ### Bugfix -- Change validation conditions in field type in models IPReserveRequest (cloudapi/vins/ip_reserve and cloudbroker/vins/ip_reserve). -- Fixed the return value in cloudbroker/sep/AddPool -- Fixed the InfoDisk model in cloudbroker/disks/models -- Change variable types in fields freeIPs in models ItemVINS (cloudapi/account/listVins, cloudbroker/account/listVins, cloudapi/rg/listVins, cloudbroker/rg/listVins, cloudapi/vins/list, cloudapi/vins/listDeleted, cloudbroker/vins/list, cloudbroker/vins/listdeleted) -- Change variable types in fields freeIPs in models RecordExtNet (cloudapi/extnet/get, cloudbroker/extnet/get) and ItemExtNet(cloudbroker/extnet/list) \ No newline at end of file +#### backup +- Fixed RestoreDisksFromBackupRequest in cloudbroker/backup diff --git a/LICENSE b/LICENSE index 403d7a2..e628f08 100644 --- a/LICENSE +++ b/LICENSE @@ -186,7 +186,7 @@ APPENDIX: How to apply the Apache License to your work. same "printed page" as the copyright notice for easier identification within third-party archives. -Copyright [yyyy] [name of copyright owner] +Copyright 2022 Basis LTD Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. diff --git a/README.md b/README.md index 3c6c0d2..45dc0e1 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@ # Decort SDK -Decort SDK - это библиотека, написанная на языке GO, позволяющая взаимодействовать с API облачной платформы **DECORT**. Библиотека содеражит в себе структуры и методы, необходимые для отправки запросов. Decort SDK имеет встроенный http-клиент и поддерживает разные способы авторизации на платформе. Библиотека так же содержит в себе модели ответов от платформы. +Decort SDK - это библиотека, написанная на языке GO, позволяющая взаимодействовать с API облачной платформы **DECORT**. Библиотека содержит в себе структуры и методы, необходимые для отправки запросов. Decort SDK имеет встроенный http-клиент и поддерживает разные способы авторизации на платформе. Библиотека так же содержит в себе модели ответов от платформы. ## Версии @@ -13,6 +13,7 @@ Decort SDK - это библиотека, написанная на языке G - Версия 1.6.x Decort-SDK соответствует 3.8.8 версии платформы - Версия 1.7.х Decort-SDK соответствует 3.8.9 версии платформы - Версия 1.8.х Decort-SDK соответствует 4.0.0 версии платформы + - Версия 1.9.х Decort-SDK соответствует 4.1.0 версии платформы ## Оглавление @@ -98,20 +99,20 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk Данная группа ручек позволяет выполнять следующие операции в платформе: - `Account` - управление аккаунтами - внутренними учетными записями платформы, которые являются владельцами вычислительных ресурсов; +- `Audit` - получение информации о событиях системы; - `BService` - управление группами виртуальных машин (computes); - `Compute` - управление виртуальными машинами (индивидуально); - `Disks` - управление виртуальными дисками; +- `DPDK` - управление виртуальными сетями DPDK; - `ExtNet` - управление виртуальными сетями, отвечающими за внешний доступ; - `FLIPgroup` - управление группами "плавающими" ip - адресами; - `Image` - управление образами операционных систем; - `K8CI` - получение информации о конвейере для создания кластера; - `K8S` - управление кластерами kubernetes; -- `KVMPPC` - создание виртуальной машины Power PC (IBM); - `KVMx86` - создание виртуальной машины x86; - `LB` - управление балансировщиками нагрузки; - `Locations` - получение информации о grid площадки; - `RG` - управление ресурсными группами аккаунта; -- `Sizes` - получение информации о потребляемых ресурсах виртуальными машинами и дисками; - `Stack` - получение информации о вычислительных узлах; - `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера); - `VFPool` - управление пулом виртуальных сетевых функций; @@ -123,10 +124,12 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk Данная группа ручек позволяет выполнять следующие операции в платформе: - `Account` - управление аккаунтами - внутренними учетными записями платформы, которые являются владельцами вычислительных ресурсов; +- `Audit` - получение информации о событиях системы; - `APIAccess` - управление доступом к API и его объектам; - `Backup` - управление резервным копированием; - `Compute` - управление виртуальными машинами (индивидуально); - `Disks` - управление виртуальными дисками; +- `DPDK` - управление виртуальными сетями DPDK; - `ExtNet` - управление виртуальными сетями, отвечающими за внешний доступ; - `FLIPGroup` - управление группами с «плавающими» ip адресами; - `Grid` - управление площадками; @@ -134,7 +137,6 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk - `Image` - управление образами операционных систем; - `K8CI` - управление конвейром для создания кластера; - `K8S` - управление кластерами kubernetes; -- `KVMPPC` - создание виртуальной машины Power PC (IBM); - `KVMx86` - создание виртуальной машины x86; - `LB` - управление балансировщиками нагрузки; - `Node` - управление нодами платформы; @@ -279,30 +281,32 @@ func main() { - **cloudapi**: - `pkg/cloudapi/account` - для `Account` + - `pkg/cloudapi/audit` - для `Audit` - `pkg/cloudapi/bservice` - для `Basic Service` - `pkg/cloudapi/compute` - для `Compute` - `pkg/cloudapi/disks` - для `Disks` + - `pkg/cloudapi/dpdknet` - для `DPDK` - `pkg/cloudapi/extnet` - для `ExtNet` - `pkg/cloudapi/flipgroup` - для `FLIPGroup` - `pkg/cloudapi/image` - для `Image` - `pkg/cloudapi/k8ci` - для `K8CI` - `pkg/cloudapi/k8s` - для `K8S` - - `pkg/cloudapi/kvmppc` - для `KVMPPC` - `pkg/cloudapi/kvmx86` - для `KVMX86` - `pkg/cloudapi/lb` - для `LB` - `pkg/cloudapi/locations` - для `Locations` - `pkg/cloudapi/rg` - для `RG` - - `pkg/cloudapi/sizes` - для `Sizes` - `pkg/cloudapi/stack` - для `Stack` - `pkg/cloudapi/tasks` - для `Tasks` - `pkg/cloudapi/vfpool` - для `VFPool` - `pkg/cloudapi/vins` - для `VINS` - **cloudbroker**: - `pkg/cloudbroker/account` - для `Account` + - `pkg/cloudbroker/audit` - для `Audit` - `pkg/cloudbroker/apiaccess` - для `APIAccess` - `pkg/cloudbroker/backup` - для `Backup` - `pkg/cloudbroker/compute` - для `Compute` - `pkg/cloudbroker/disks` - для `Disks` + - `pkg/cloudbroker/dpdknet` - для `DPDK` - `pkg/cloudbroker/extnet` - для `ExtNet` - `pkg/cloudbroker/flipgroup` - для `FLIPGroup` - `pkg/cloudbroker/grid` - для `Grid` @@ -310,7 +314,6 @@ func main() { - `pkg/cloudbroker/image` - для `Image` - `pkg/cloudbroker/k8ci` - для `K8CI` - `pkg/cloudbroker/k8s` - для `K8S` - - `pkg/cloudbroker/kvmppc` - для `KVMPPC` - `pkg/cloudbroker/kvmx86` - для `KVMX86` - `pkg/cloudbroker/lb` - для `LB` - `pkg/cloudbroker/node` - для `Node` @@ -412,9 +415,7 @@ type CreateRequest struct { // Required: false IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"` - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` + } ``` @@ -464,20 +465,20 @@ func main() { Доступные методы для `.CloudAPI()`: - `.Account()` - для работы с `Account` + - `.Audit()` - для работы с `Audit` - `.BService()` - для работы с `BService` - `.Compute()` - для работы с `Compute` - `.Disks()` - для работы с `Disks` + - `.DPDKNet()` - для работы с `DPDK` - `.ExtNet()` - для работы с `ExtNet` - `.FLIPgroup()` - для работы с `FLIPGroup` - `.Image()` - для работы с `Image` - `.K8CI()` - для работы с `K8CI` - `.K8S()` - для работы с `K8S` - - `.KVMPPC()` - для работы с `KVMPPC` - `.KVMx86()` - для работы с `KVMX86` - `.LB()` - для работы с `LB` - `.Locations()` - для работы с `Locations` - `.RG()` - для работы с `RG` - - `.Sizes()` - для работы с `Sizes` - `.Stack()` - для работы с `Stack` - `.Tasks()` - для работы с `Tasks` - `.VFPool()` - для работы с `VFPool` @@ -486,10 +487,12 @@ func main() { Доступные методы для `.CloudBroker()`: - `.Account()` - для работы с `Account` + - `.Audit()` - для работы с `Audit` - `.APIAccess()` - для работы с `APIAccess` - `.Backup()` - для работы с `Backup` - `.Compute()` - для работы с `Compute` - `.Disks()` - для работы с `Disks` + - `.DPDKNet()` - для работы с `DPDK` - `.ExtNet()` - для работы с `ExtNet` - `.FLIPGroup()` - для работы с `FLIPGroup` - `.Grid()` - для работы с `Grid` @@ -497,7 +500,6 @@ func main() { - `.Image()` - для работы с `Image` - `.K8CI()` - для работы с `K8CI` - `.K8S()` - для работы с `K8S` - - `.KVMPPC()` - для работы с `KVMPPC` - `.KVMx86()` - для работы с `KVMX86` - `.LB()` - для работы с `LB` - `.Node()` - для работы с `Node` diff --git a/internal/validators/custom.go b/internal/validators/custom.go index 6f741cd..406d4c6 100644 --- a/internal/validators/custom.go +++ b/internal/validators/custom.go @@ -3,6 +3,7 @@ package validators import ( "errors" "fmt" + "net/url" "reflect" "regexp" "strings" @@ -12,7 +13,7 @@ import ( "repository.basistech.ru/BASIS/decort-golang-sdk/internal/multierror" ) -// computeDriverValidator is used to validate Driver field in kvmx86/kvmppc create. +// computeDriverValidator is used to validate Driver field in kvmx86 create. func computeDriverValidator(fe validator.FieldLevel) bool { fieldValue := fe.Field().String() @@ -270,6 +271,27 @@ func interfaceStateValidator(fe validator.FieldLevel) bool { return IsInSlice(fieldValue, interfaceStateValues) } +func interfaceTXModelValidator(fe validator.FieldLevel) bool { + fieldValue := fe.Field().String() + fieldValue = strings.ToLower(fieldValue) + + return IsInSlice(fieldValue, txModelValues) +} + +func interfaceIOEventFDValidator(fe validator.FieldLevel) bool { + fieldValue := fe.Field().String() + fieldValue = strings.ToLower(fieldValue) + + return IsInSlice(fieldValue, ioEventFDValues) +} + +func interfaceEventIDxValidator(fe validator.FieldLevel) bool { + fieldValue := fe.Field().String() + fieldValue = strings.ToLower(fieldValue) + + return IsInSlice(fieldValue, eventIDxValues) +} + func strictLooseValidator(fe validator.FieldLevel) bool { fieldValue := fe.Field().String() fieldValue = strings.ToLower(fieldValue) @@ -304,6 +326,12 @@ func vmActionValidator(fe validator.FieldLevel) bool { return IsInSlice(fieldValue, vmActionValues) } +func mtuValidator(fe validator.FieldLevel) bool { + fieldValue := fe.Field().Uint() + + return fieldValue >= uint64(mtuMin) && fieldValue <= uint64(mtuMax) +} + func computeFeaturesValidator(fe validator.FieldLevel) bool { field := fe.Field() slice, ok := field.Interface().([]string) @@ -337,6 +365,13 @@ func isBoolTypeValidator(fe validator.FieldLevel) bool { return fe.Field().CanConvert(reflect.TypeOf(true)) } +func urlValidartor(fl validator.FieldLevel) bool { + fieldValues := fl.Field().String() + + _, err := url.ParseRequestURI(fieldValues) + return err == nil +} + // 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 { diff --git a/internal/validators/messages.go b/internal/validators/messages.go index 19d534c..aa18412 100644 --- a/internal/validators/messages.go +++ b/internal/validators/messages.go @@ -25,6 +25,8 @@ func errorMessage(fe validator.FieldError) string { return fmt.Sprintf("%s %s: unexpected URL format", prefix, fe.Field()) case "email": return fmt.Sprintf("%s %s: unexpected E-Mail format", prefix, fe.Field()) + case "isBool": + return fmt.Sprintf("%s %s: must be bool type", prefix, fe.Field()) case "driver": return fmt.Sprintf("%s %s must be one of the following: %s", @@ -89,17 +91,20 @@ func errorMessage(fe validator.FieldError) string { fe.Field(), joinValues(computeDiskTypeValues)) - case "computeNetType": + case "mtu": + return fmt.Sprint(prefix, fe.Field(), "must be ", mtuMin, "-", mtuMax) + + case "computex86NetType": return fmt.Sprintf("%s %s must be one of the following: %s", prefix, fe.Field(), - joinValues(computeNetTypeValues)) + joinValues(computex86NetTypeValues)) - case "computex86NetType": + case "computeNetType": return fmt.Sprintf("%s %s must be one of the following: %s", prefix, fe.Field(), - joinValues(computex86NetTypeValues)) + joinValues(computeNetTypeValues)) case "computeOrder": return fmt.Sprintf("%s %s can contain only the following values: %s", @@ -139,7 +144,7 @@ func errorMessage(fe validator.FieldError) string { prefix, fe.Field()) - // KVM_X86/KVM_PPC Validators + // KVM_X86 Validators case "kvmNetType": return fmt.Sprintf("%s %s must be one of the following: %s", prefix, @@ -236,6 +241,24 @@ func errorMessage(fe validator.FieldError) string { fe.Field(), joinValues(interfaceStateValues)) + case "interfaceTXModel": + return fmt.Sprintf("%s %s must be one of the following: %s", + prefix, + fe.Field(), + joinValues(txModelValues)) + + case "interfaceIOEventFD": + return fmt.Sprintf("%s %s must be one of the following: %s", + prefix, + fe.Field(), + joinValues(ioEventFDValues)) + + case "interfaceEventIDx": + return fmt.Sprintf("%s %s must be one of the following: %s", + prefix, + fe.Field(), + joinValues(eventIDxValues)) + case "sortBy": return fmt.Sprintf("%s %s must be in format +|-(field)", prefix, diff --git a/internal/validators/validator.go b/internal/validators/validator.go index cab98b6..832f435 100644 --- a/internal/validators/validator.go +++ b/internal/validators/validator.go @@ -186,6 +186,21 @@ func registerAllValidators(validate *validator.Validate) error { return err } + err = validate.RegisterValidation("interfaceTXModel", interfaceTXModelValidator) + if err != nil { + return err + } + + err = validate.RegisterValidation("interfaceIOEventFD", interfaceIOEventFDValidator) + if err != nil { + return err + } + + err = validate.RegisterValidation("interfaceEventIDx", interfaceEventIDxValidator) + if err != nil { + return err + } + err = validate.RegisterValidation("workerGroupName", workerGroupNameValidator) if err != nil { return err @@ -206,6 +221,11 @@ func registerAllValidators(validate *validator.Validate) error { return err } + err = validate.RegisterValidation("mtu", mtuValidator) + if err != nil { + return err + } + err = validate.RegisterValidation("computeFeatures", computeFeaturesValidator) if err != nil { return err @@ -231,5 +251,10 @@ func registerAllValidators(validate *validator.Validate) error { return err } + err = validate.RegisterValidation("url", urlValidartor) + if err != nil { + return err + } + return nil } diff --git a/internal/validators/values.go b/internal/validators/values.go index 121321a..caf43aa 100644 --- a/internal/validators/values.go +++ b/internal/validators/values.go @@ -1,7 +1,7 @@ package validators var ( - driverValues = []string{"KVM_X86", "KVM_PPC"} + driverValues = []string{"KVM_X86"} accessTypeValues = []string{"R", "RCX", "ARCXDU"} resTypesValues = []string{"compute", "vins", "k8s", "openshift", "lb", "flipgroup"} protoValues = []string{"tcp", "udp"} @@ -15,7 +15,7 @@ var ( computeModeValues = []string{"EQ", "EN", "ANY"} computeDiskTypeValues = []string{"D", "B"} computeNetTypeValues = []string{"EXTNET", "VINS"} - computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC"} + computex86NetTypeValues = []string{"EXTNET", "VINS", "VFNIC", "DPDK"} computeOrderValues = []string{"cdrom", "network", "hd"} computeDataDisksValues = []string{"KEEP", "DETACH", "DESTROY"} computeDriverValues = []string{"KVM_X86", "SVA_KVM_X86"} @@ -25,7 +25,7 @@ var ( flipgroupClientTypeValues = []string{"compute", "vins"} kvmNetTypeValues = []string{"EXTNET", "VINS", "NONE"} - kvmx86NetTypeValues = []string{"EXTNET", "VINS", "NONE", "VFNIC"} + kvmx86NetTypeValues = []string{"EXTNET", "VINS", "NONE", "VFNIC", "DPDK"} lbAlgorithmValues = []string{"roundrobin", "static-rr", "leastconn"} @@ -37,7 +37,7 @@ var ( imageBootTypeValues = []string{"uefi", "bios"} imageTypeValues = []string{"windows", "linux", "other"} imageDriversValues = []string{"KVM_X86"} - imageArchitectureValues = []string{"X86_64", "PPC64_LE"} + imageArchitectureValues = []string{"X86_64"} sepFieldTypeValues = []string{"int", "str", "bool", "list", "dict"} @@ -56,4 +56,16 @@ var ( networkInterfaceNamingValues = []string{"eth", "ens"} numaAffinityValues = []string{"none", "strict", "loose"} + + txModelValues = []string{"iothread", "timer", "selected by hypervisor"} + + ioEventFDValues = []string{"on", "off", "selected by hypervisor"} + + eventIDxValues = []string{"on", "off", "selected by hypervisor"} +) + +const ( + mtuMin = 1 + + mtuMax = 9216 ) diff --git a/pkg/cloudapi/account/delete_user.go b/pkg/cloudapi/account/delete_user.go index 21a78b7..9aed43d 100644 --- a/pkg/cloudapi/account/delete_user.go +++ b/pkg/cloudapi/account/delete_user.go @@ -17,10 +17,6 @@ type DeleteUserRequest struct { // ID or emailaddress of the user to remove // Required: true UserID string `url:"userId" json:"userId" validate:"required"` - - // Recursively revoke access rights from owned cloudspaces and vmachines - // Required: false - RecursiveDelete bool `url:"recursivedelete" json:"recursivedelete"` } // DeleteUser revokes user access from the account diff --git a/pkg/cloudapi/account/get_consumption.go b/pkg/cloudapi/account/get_consumption.go deleted file mode 100644 index 2044323..0000000 --- a/pkg/cloudapi/account/get_consumption.go +++ /dev/null @@ -1,58 +0,0 @@ -package account - -import ( - "context" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// GetConsumptionRequest struct to download the resources tracking files for an account -type GetConsumptionRequest struct { - // ID an account - // Required: true - AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` - - // Epoch represents the start time - // Required: true - Start float64 `url:"start" json:"start" validate:"required"` - - // Epoch represents the end time - // Required: true - End float64 `url:"end" json:"end" validate:"required"` -} - -// GetConsumption downloads the resources tracking files for an account within a given period -func (a Account) GetConsumption(ctx context.Context, req GetConsumptionRequest) (string, error) { - err := validators.ValidateRequest(req) - if err != nil { - return "", validators.ValidationErrors(validators.GetErrors(err)) - } - - url := "/cloudapi/account/getConsumption" - - res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return "", err - } - - return string(res), nil - -} - -// GetConsumptionGet downloads the resources tracking files for an account within a given period -func (a Account) GetConsumptionGet(ctx context.Context, req GetConsumptionRequest) (string, error) { - err := validators.ValidateRequest(req) - if err != nil { - return "", validators.ValidationErrors(validators.GetErrors(err)) - } - - url := "/cloudapi/account/getConsumption" - - res, err := a.client.DecortApiCall(ctx, http.MethodGet, url, req) - if err != nil { - return "", err - } - - return string(res), nil -} diff --git a/pkg/cloudapi/account/list_flipgroups.go b/pkg/cloudapi/account/list_flipgroups.go index 0259dde..cda34b1 100644 --- a/pkg/cloudapi/account/list_flipgroups.go +++ b/pkg/cloudapi/account/list_flipgroups.go @@ -38,6 +38,10 @@ type ListFLIPGroupsRequest struct { // Required: false FLIPGroupID uint64 `url:"flipGroupId,omitempty" json:"flipGroupId,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"` diff --git a/pkg/cloudapi/account/update.go b/pkg/cloudapi/account/update.go index 223ca62..2d793fd 100644 --- a/pkg/cloudapi/account/update.go +++ b/pkg/cloudapi/account/update.go @@ -45,6 +45,11 @@ type UpdateRequest struct { // Limit (positive) or disable (0) GPU resources // Required: false GPUUnits int64 `url:"gpu_units,omitempty" json:"gpu_units,omitempty"` + + // List of strings with pools + // i.e.: ["sep1_poolName1", "sep2_poolName2", etc] + // Required: false + UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"` } // Update updates an account name and resource types and limits diff --git a/pkg/cloudapi/audit.go b/pkg/cloudapi/audit.go new file mode 100644 index 0000000..620abe2 --- /dev/null +++ b/pkg/cloudapi/audit.go @@ -0,0 +1,10 @@ +package cloudapi + +import ( + "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/audit" +) + +// Accessing the Stack method group +func (ca *CloudAPI) Audit() *audit.Audit { + return audit.New(ca.client) +} diff --git a/pkg/cloudapi/audit/audit.go b/pkg/cloudapi/audit/audit.go new file mode 100644 index 0000000..26f69ef --- /dev/null +++ b/pkg/cloudapi/audit/audit.go @@ -0,0 +1,15 @@ +package audit + +import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" + +// Structure for creating request to audit +type Audit struct { + client interfaces.Caller +} + +// Builder for audit endpoint +func New(client interfaces.Caller) *Audit{ + return &Audit{ + client: client, + } +} \ No newline at end of file diff --git a/pkg/cloudapi/audit/get.go b/pkg/cloudapi/audit/get.go new file mode 100644 index 0000000..9db2148 --- /dev/null +++ b/pkg/cloudapi/audit/get.go @@ -0,0 +1,46 @@ +package audit + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// GetRequest struct to get information about account +type GetRequest struct { + // Audit GUID + // Required: true + AuditGuid string `url:"auditGuid" json:"auditGuid" validate:"required"` +} + +// Get gets information about audit as a RecordAudit struct +func (a Audit) Get(ctx context.Context, req GetRequest) (*RecordAudit, error) { + res, err := a.GetRaw(ctx, req) + if err != nil { + return nil, err + } + + info := RecordAudit{} + + err = json.Unmarshal(res, &info) + if err != nil { + return nil, err + } + + return &info, nil +} + +// GetRaw gets information about audit as an array of bytes +func (a Audit) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudapi/audit/get" + + res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudapi/audit/models.go b/pkg/cloudapi/audit/models.go new file mode 100644 index 0000000..8bb0ef0 --- /dev/null +++ b/pkg/cloudapi/audit/models.go @@ -0,0 +1,41 @@ +package audit + +// Main info about audit +type RecordAudit struct { + + // Arguments + Arguments string `json:"args"` + + // Call + Call string `json:"call"` + + // GUID + GUID string `json:"guid"` + + // Kwargs + Kwargs string `json:"kwargs"` + + // RemoteAddr + RemoteAddr string `json:"remote_addr"` + + // Response time + ResponseTime float64 `json:"responsetime"` + + // Result + Result string `json:"result"` + + // Status code + StatusCode uint64 `json:"statuscode"` + + // Tags + Tags string `json:"tags"` + + // Timestamp + Timestamp float64 `json:"timestamp"` + + // TimestampEnd + TimestampEnd float64 `json:"timestampEnd"` + + // User + User string `json:"user"` +} diff --git a/pkg/cloudapi/bservice/group_add.go b/pkg/cloudapi/bservice/group_add.go index 60ce80f..3ad6575 100644 --- a/pkg/cloudapi/bservice/group_add.go +++ b/pkg/cloudapi/bservice/group_add.go @@ -41,7 +41,6 @@ type GroupAddRequest struct { // Compute driver // should be one of: // - KVM_X86 - // - KVM_PPC // Required: true Driver string `url:"driver" json:"driver" validate:"driver"` diff --git a/pkg/cloudapi/compute/change_ip.go b/pkg/cloudapi/compute/change_ip.go new file mode 100644 index 0000000..39dfa7f --- /dev/null +++ b/pkg/cloudapi/compute/change_ip.go @@ -0,0 +1,54 @@ +package compute + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// ChangeIPRequest struct to change IP for network +type ChangeIPRequest struct { + // ID of compute instance + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` + + // Network type + // 'EXTNET' for connect to external network directly + // 'VINS' for connect to ViNS + // Required: true + NetType string `url:"netType" json:"netType" validate:"computeNetType"` + + // Network ID for connect to + // For EXTNET - external network ID + // For VINS - VINS ID + // Required: true + NetID uint64 `url:"netId" json:"netId" validate:"required"` + + // IP address to which we will change the existing one, it must be from the same subnet + // Required: true + IPAddr string `url:"ipAddr" json:"ipAddr" validate:"required"` +} + +// ChangeIP change reserved IP for compute instance +func (c Compute) ChangeIP(ctx context.Context, req ChangeIPRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudapi/compute/changeIp" + + 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/clone.go b/pkg/cloudapi/compute/clone.go index f6612f0..589ea31 100644 --- a/pkg/cloudapi/compute/clone.go +++ b/pkg/cloudapi/compute/clone.go @@ -25,6 +25,11 @@ type CloneRequest struct { // Name of the parent's snapshot to create clone from // Required: false SnapshotName string `url:"snapshotName,omitempty" json:"snapshotName,omitempty"` + + // true ignore that the compute is running + // Default: false + // Required: false + Force bool `url:"force" json:"force"` } // Clone clones compute instance diff --git a/pkg/cloudapi/compute/disk_migrate.go b/pkg/cloudapi/compute/disk_migrate.go index 5f797c8..f6b7724 100644 --- a/pkg/cloudapi/compute/disk_migrate.go +++ b/pkg/cloudapi/compute/disk_migrate.go @@ -24,8 +24,8 @@ type DiskMigrateRequest struct { // Migration mode. 1 - Data migration and domain update were already completed by third-party software. // Use this if target disk already connected to compute and you only need to save changes for next reboot. - // Required: true - Mode int64 `url:"mode" json:"mode" validate:"required"` + // Required: false + Mode int64 `url:"mode,omitempty" json:"mode,omitempty"` } // DiskMigrate - migrate compute's disk to target disk. Source disk will be detached, target disk will be attached to the same PCI slot. diff --git a/pkg/cloudapi/compute/models.go b/pkg/cloudapi/compute/models.go index 5e9f99e..3272bfe 100644 --- a/pkg/cloudapi/compute/models.go +++ b/pkg/cloudapi/compute/models.go @@ -214,6 +214,9 @@ type RecordNetAttach struct { // List VNF IDs VNFs []uint64 `json:"vnfs"` + + // Maximum transmission unit + MTU uint64 `json:"mtu"` } // Detailed information about audit @@ -305,9 +308,12 @@ type RecordCompute struct { // Boot disk size BootDiskSize uint64 `json:"bootdiskSize"` - // cd Image Id + // CD Image Id CdImageId uint64 `json:"cdImageId"` + // Chipset + Chipset string `json:"chipset"` + // Clone reference CloneReference uint64 `json:"cloneReference"` @@ -480,6 +486,30 @@ type RecordCompute struct { VirtualImageName string `json:"virtualImageName"` } +// Information about libvirt settings +type LibvirtSettings struct { + // TX mode + TXMode string `json:"txmode"` + + // IO event + IOEventFD string `json:"ioeventfd"` + + // Event ID + EventIDx string `json:"event_idx"` + + // Number of queues + Queues uint64 `json:"queues"` + + // RX queue size + RXQueueSize uint64 `json:"rx_queue_size"` + + // TX queue size + TXQueueSize uint64 `json:"tx_queue_size"` + + // GUID + GUID string `json:"guid"` +} + // Main information about OS user type ItemOSUser struct { // GUID @@ -518,6 +548,9 @@ type ListSnapSets []ItemSnapSet // Main information about VNF type ItemVNFInterface struct { + // Bus number + BusNumber uint64 `json:"bus_number"` + // Connection ID ConnID uint64 `json:"connId"` @@ -542,9 +575,15 @@ type ItemVNFInterface struct { // Listen SSH or not ListenSSH bool `json:"listenSsh"` + // Libvirt Settings + LibvirtSettings LibvirtSettings `json:"libvirtSettings"` + // MAC MAC string `json:"mac"` + // Maximum transmission unit + MTU uint64 `json:"mtu"` + // Name Name string `json:"name"` @@ -603,6 +642,9 @@ type ItemComputeDisk struct { // Boot partition BootPartition uint64 `json:"bootPartition"` + // Bus number + BusNumber uint64 `json:"bus_number"` + // Created time CreatedTime uint64 `json:"createdTime"` @@ -833,9 +875,12 @@ type ItemCompute struct { // Boot disk size BootDiskSize uint64 `json:"bootdiskSize"` - // cd Image Id + // CD Image Id CdImageId uint64 `json:"cdImageId"` + // Chipset + Chipset string `json:"chipset"` + // Clone reference CloneReference uint64 `json:"cloneReference"` @@ -997,6 +1042,9 @@ type InfoDisk struct { // PCISlot PCISlot int64 `json:"pciSlot"` + + // Bus number + BusNumber uint64 `json:"bus_number"` } // List information about computes diff --git a/pkg/cloudapi/compute/net_attach.go b/pkg/cloudapi/compute/net_attach.go index 22068f5..aa3768c 100644 --- a/pkg/cloudapi/compute/net_attach.go +++ b/pkg/cloudapi/compute/net_attach.go @@ -18,6 +18,7 @@ type NetAttachRequest struct { // 'EXTNET' for connect to external network directly // 'VINS' for connect to ViNS // 'VFNIC' for connect to vfpool + // 'DPDK' for connect to DPDK // Required: true NetType string `url:"netType" json:"netType" validate:"computex86NetType"` @@ -30,6 +31,10 @@ type NetAttachRequest struct { // Directly required IP address for new network interface // Required: false IPAddr string `url:"ipAddr,omitempty" json:"ipAddr,omitempty"` + + // Used only for DPDK type, must be 1-9216 + // Required: false + MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"` } // NetAttach attaches network to compute and gets info about network diff --git a/pkg/cloudapi/compute/snapshot_delete.go b/pkg/cloudapi/compute/snapshot_delete.go index 48b7eb7..f5ecea1 100644 --- a/pkg/cloudapi/compute/snapshot_delete.go +++ b/pkg/cloudapi/compute/snapshot_delete.go @@ -3,7 +3,6 @@ package compute import ( "context" "net/http" - "strconv" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) @@ -19,24 +18,52 @@ type SnapshotDeleteRequest struct { Label string `url:"label" json:"label" validate:"required"` } +type wrapperSnapshotDeleteRequeststruct struct { + SnapshotDeleteRequest + + AsyncMode bool `url:"asyncMode"` +} + // SnapshotDelete deletes specified compute snapshot -func (c Compute) SnapshotDelete(ctx context.Context, req SnapshotDeleteRequest) (bool, error) { +func (c Compute) SnapshotDelete(ctx context.Context, req SnapshotDeleteRequest) (string, error) { err := validators.ValidateRequest(req) if err != nil { - return false, validators.ValidationErrors(validators.GetErrors(err)) + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSnapshotDeleteRequeststruct{ + SnapshotDeleteRequest: req, + AsyncMode: false, } url := "/cloudapi/compute/snapshotDelete" - res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) + res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) if err != nil { - return false, err + return "", err } - result, err := strconv.ParseBool(string(res)) + return string(res), nil +} + +// SnapshotDeleteAsync deletes specified compute snapshot +func (c Compute) SnapshotDeleteAsync(ctx context.Context, req SnapshotDeleteRequest) (string, error) { + err := validators.ValidateRequest(req) + if err != nil { + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSnapshotDeleteRequeststruct{ + SnapshotDeleteRequest: req, + AsyncMode: true, + } + + url := "/cloudapi/compute/snapshotDelete" + + res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) if err != nil { - return false, err + return "", err } - return result, nil + return string(res), nil } diff --git a/pkg/cloudapi/compute/update.go b/pkg/cloudapi/compute/update.go index ef29bda..f4296e7 100644 --- a/pkg/cloudapi/compute/update.go +++ b/pkg/cloudapi/compute/update.go @@ -35,6 +35,10 @@ type UpdateRequest struct { // Default: false CPUPin bool `url:"cpupin" json:"cpupin"` + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` + // Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node // Required: false // Default: false diff --git a/pkg/cloudapi/disks/delete.go b/pkg/cloudapi/disks/delete.go index 030de9e..37f3123 100644 --- a/pkg/cloudapi/disks/delete.go +++ b/pkg/cloudapi/disks/delete.go @@ -21,10 +21,6 @@ type DeleteRequest struct { // Whether to completely delete the disk, works only with non attached disks // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason to delete - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Delete deletes disk by ID diff --git a/pkg/cloudapi/disks/delete_disks.go b/pkg/cloudapi/disks/delete_disks.go index ebbe743..29ff230 100644 --- a/pkg/cloudapi/disks/delete_disks.go +++ b/pkg/cloudapi/disks/delete_disks.go @@ -14,10 +14,6 @@ type DisksDeleteRequest struct { // Required: true DisksIDs []uint64 `url:"diskIds" json:"diskIds" validate:"required"` - // Reason for deleting the disks - // Required: true - Reason string `url:"reason" json:"reason" validate:"required"` - // Whether to completely delete the disks, works only with non attached disks // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` diff --git a/pkg/cloudapi/disks/from_platform_disk.go b/pkg/cloudapi/disks/from_platform_disk.go index 0d030f1..9268834 100644 --- a/pkg/cloudapi/disks/from_platform_disk.go +++ b/pkg/cloudapi/disks/from_platform_disk.go @@ -30,7 +30,6 @@ type FromPlatformDiskRequest struct { // Binary architecture of this image // Should be: // - X86_64 - // - PPC64_LE // Required: true Architecture string `url:"architecture" json:"architecture" validate:"imageArchitecture"` @@ -56,8 +55,8 @@ type FromPlatformDiskRequest struct { // List of types of compute suitable for image // Example: [ "KVM_X86" ] - // Required: false - Drivers []string `url:"drivers,omitempty" json:"drivers,omitempty"` + // Required: true + Drivers []string `url:"drivers" json:"drivers" validate:"required"` // Does this machine supports hot resize // Required: false diff --git a/pkg/cloudapi/disks/restore.go b/pkg/cloudapi/disks/restore.go index 60fd49d..a5db0bd 100644 --- a/pkg/cloudapi/disks/restore.go +++ b/pkg/cloudapi/disks/restore.go @@ -13,10 +13,6 @@ type RestoreRequest struct { // ID of the disk to restore // Required: true DiskID uint64 `url:"diskId" json:"diskId" validate:"required"` - - // Reason for restoring the disk - // Required: true - Reason string `url:"reason" json:"reason" validate:"required"` } // Restore restores a deleted unattached disk from recycle bin diff --git a/pkg/cloudapi/dpdknet.go b/pkg/cloudapi/dpdknet.go new file mode 100644 index 0000000..1e82dc0 --- /dev/null +++ b/pkg/cloudapi/dpdknet.go @@ -0,0 +1,8 @@ +package cloudapi + +import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/dpdknet" + +// Accessing the DPDKNet method group +func (ca *CloudAPI) DPDKNet() *dpdknet.DPDKNet { + return dpdknet.New(ca.client) +} diff --git a/pkg/cloudapi/dpdknet/dpdknet.go b/pkg/cloudapi/dpdknet/dpdknet.go new file mode 100644 index 0000000..356b959 --- /dev/null +++ b/pkg/cloudapi/dpdknet/dpdknet.go @@ -0,0 +1,15 @@ +package dpdknet + +import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" + +// Structure for creating request to DPDK network +type DPDKNet struct { + client interfaces.Caller +} + +// Builder for dpdk endpoints +func New(client interfaces.Caller) *DPDKNet { + return &DPDKNet{ + client, + } +} diff --git a/pkg/cloudapi/dpdknet/get.go b/pkg/cloudapi/dpdknet/get.go new file mode 100644 index 0000000..2372a82 --- /dev/null +++ b/pkg/cloudapi/dpdknet/get.go @@ -0,0 +1,46 @@ +package dpdknet + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// GetRequest struct to get information about DPDK network +type GetRequest struct { + // ID of the DPDK network + // Required: true + DPDKID uint64 `url:"dpdkId" json:"dpdkId" validate:"required"` +} + +// Get DPDK network details as a RecordDPDKNet struct +func (d DPDKNet) Get(ctx context.Context, req GetRequest) (*RecordDPDKNet, error) { + res, err := d.GetRaw(ctx, req) + if err != nil { + return nil, err + } + + info := RecordDPDKNet{} + + err = json.Unmarshal(res, &info) + if err != nil { + return nil, err + } + + return &info, nil +} + +// GetRaw gets DPDK network details as an array of bytes +func (d DPDKNet) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudapi/dpdknet/get" + + res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudapi/dpdknet/list.go b/pkg/cloudapi/dpdknet/list.go new file mode 100644 index 0000000..5e0c6c7 --- /dev/null +++ b/pkg/cloudapi/dpdknet/list.go @@ -0,0 +1,79 @@ +package dpdknet + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// ListRequest struct to get list of DPDK networks +type ListRequest struct { + // Find by id + // Required: false + ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"` + + // Find by gid + // 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 computeIDs + // Required: false + ComputeIDs []uint64 `url:"computeIds,omitempty" json:"computeIds,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 the created DPDK networks belonging to an account as a ListDPDKNet struct +func (d DPDKNet) List(ctx context.Context, req ListRequest) (*ListDPDKNet, error) { + + res, err := d.ListRaw(ctx, req) + if err != nil { + return nil, err + } + + list := ListDPDKNet{} + + err = json.Unmarshal(res, &list) + if err != nil { + return nil, err + } + + return &list, nil +} + +// ListRaw gets list of the created DPDK networks belonging to an account as an array of bytes +func (d DPDKNet) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) { + + if err := validators.ValidateRequest(req); err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudapi/dpdknet/list" + + res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudapi/dpdknet/models.go b/pkg/cloudapi/dpdknet/models.go new file mode 100644 index 0000000..7bcf84d --- /dev/null +++ b/pkg/cloudapi/dpdknet/models.go @@ -0,0 +1,92 @@ +package dpdknet + +// Detailed information about DPDK network +type RecordDPDKNet struct { + // List of accounts with access + AccountAccess []uint64 `json:"accountAccess"` + + // Created time + CreatedTime uint64 `json:"createdTime"` + + // Updated time + UpdatedTime uint64 `json:"updatedTime"` + + // Description + Description string `json:"description"` + + // Grid ID + GID uint64 `json:"gid"` + + // Guid ID + GUID uint64 `json:"guid"` + + // ID + ID uint64 `json:"id"` + + // Name + Name string `json:"name"` + + // List of resource groups with access + RGAccess []uint64 `json:"rgAccess"` + + // Status + Status string `json:"status"` + + // OVS bridge + OVSBridge string `json:"ovsBridge"` + + // Vlan ID + VlanID uint64 `json:"vlanId"` + + // Compute IDs + ComputeIDs []uint64 `json:"computeIds"` +} + +type ListDPDKNet struct { + // Data + Data []ItemDPDKNet `json:"data"` + + // Entry count + EntryCount uint64 `json:"entryCount"` +} + +type ItemDPDKNet struct { + // List of accounts with access + AccountAccess []uint64 `json:"accountAccess"` + + // Created time + CreatedTime uint64 `json:"createdTime"` + + // Updated time + UpdatedTime uint64 `json:"updatedTime"` + + // Description + Description string `json:"description"` + + // Grid ID + GID uint64 `json:"gid"` + + // Guid ID + GUID uint64 `json:"guid"` + + // ID + ID uint64 `json:"id"` + + // Name + Name string `json:"name"` + + // List of resource groups with access + RGAccess []uint64 `json:"rgAccess"` + + // Status + Status string `json:"status"` + + // OVS bridge + OVSBridge string `json:"ovsBridge"` + + // Vlan ID + VlanID uint64 `json:"vlanId"` + + // Compute IDs + ComputeIDs []uint64 `json:"computeIds"` +} diff --git a/pkg/cloudapi/flipgroup/list.go b/pkg/cloudapi/flipgroup/list.go index f248a88..e9e1c5e 100644 --- a/pkg/cloudapi/flipgroup/list.go +++ b/pkg/cloudapi/flipgroup/list.go @@ -44,7 +44,7 @@ type ListRequest struct { // Find by list of clientIds // Required: false - ClientIDs []uint64 `url:"clientIds,omitempty" json:"clientIds,omitempty"` + ClientIDs []string `url:"clientIds,omitempty" json:"clientIds,omitempty"` // Page number // Required: false diff --git a/pkg/cloudapi/image/create.go b/pkg/cloudapi/image/create.go index e45984a..4c224e3 100644 --- a/pkg/cloudapi/image/create.go +++ b/pkg/cloudapi/image/create.go @@ -72,7 +72,6 @@ type CreateRequest struct { // Binary architecture of this image // Should be: // - X86_64 - // - PPC64_LE // Required: false Architecture string `url:"architecture,omitempty" json:"architecture,omitempty" validate:"omitempty,imageArchitecture"` diff --git a/pkg/cloudapi/image/delete.go b/pkg/cloudapi/image/delete.go index 7066ab5..7bc4382 100644 --- a/pkg/cloudapi/image/delete.go +++ b/pkg/cloudapi/image/delete.go @@ -13,10 +13,6 @@ type DeleteRequest struct { // ID of the image to delete // Required: true ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` - - // Whether to completely delete the image - // Required: false - Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` } // Delete deletes image by ID diff --git a/pkg/cloudapi/image/list.go b/pkg/cloudapi/image/list.go index 52c9efb..a3e6f7d 100644 --- a/pkg/cloudapi/image/list.go +++ b/pkg/cloudapi/image/list.go @@ -48,15 +48,15 @@ type ListRequest struct { // Find by public True or False // Required: false - Public interface{} `url:"public,omitempty" json:"public,omitempty" validate:"omitempty,sortBy"` + Public interface{} `url:"public,omitempty" json:"public,omitempty" validate:"omitempty,isBool"` // Find by hot resize True or False // Required: false - HotResize interface{} `url:"hotResize,omitempty" json:"hotResize,omitempty" validate:"omitempty,sortBy"` + HotResize interface{} `url:"hotResize,omitempty" json:"hotResize,omitempty" validate:"omitempty,isBool"` // Find by bootable True or False // Required: false - Bootable interface{} `url:"bootable,omitempty" json:"bootable,omitempty" validate:"omitempty,sortBy"` + Bootable interface{} `url:"bootable,omitempty" json:"bootable,omitempty" validate:"omitempty,isBool"` // Sort by one of supported fields, format +|-(field) // Required: false @@ -69,6 +69,10 @@ type ListRequest struct { // Page size // Required: false Size uint64 `url:"size,omitempty" json:"size,omitempty"` + + // Find by enabled True or False + // Required: false + Enabled interface{} `url:"enabled,omitempty" json:"enabled,omitempty" validate:"omitempty,isBool"` } // List gets list of available images as a ListImages struct, optionally filtering by account ID diff --git a/pkg/cloudapi/k8s/create.go b/pkg/cloudapi/k8s/create.go index 78d047f..830d2cc 100644 --- a/pkg/cloudapi/k8s/create.go +++ b/pkg/cloudapi/k8s/create.go @@ -162,6 +162,10 @@ type CreateRequest struct { // Insert ssl certificate in x509 pem format // Required: false OidcCertificate string `url:"oidcCertificate,omitempty" json:"oidcCertificate,omitempty"` + + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` } // GetRAM returns RAM field values diff --git a/pkg/cloudapi/k8s/delete_master_from_group.go b/pkg/cloudapi/k8s/delete_master_from_group.go index 796a51e..89bb651 100644 --- a/pkg/cloudapi/k8s/delete_master_from_group.go +++ b/pkg/cloudapi/k8s/delete_master_from_group.go @@ -20,7 +20,7 @@ type DeleteMasterFromGroupRequest struct { // List of Compute IDs of master nodes to delete // Required: true - MasterIDs []string `url:"masterIds" json:"masterIds" validate:"min=1"` + MasterIDs []uint64 `url:"masterIds" json:"masterIds" validate:"min=1"` } // DeleteMasterFromGroup deletes compute from masters group in selected Kubernetes cluster diff --git a/pkg/cloudapi/k8s/models.go b/pkg/cloudapi/k8s/models.go index e01723c..d6df394 100644 --- a/pkg/cloudapi/k8s/models.go +++ b/pkg/cloudapi/k8s/models.go @@ -89,6 +89,15 @@ type RecordK8S struct { // Deleted time DeletedTime uint64 `json:"deletedTime"` + // Only external network + ExtnetOnly bool `json:"extnetOnly"` + + // Highly available LB + HighlyAvailableLB bool `json:"highlyAvailableLB"` + + // Address Virtual Internet Protocol + AddressVIP K8SAddressVIP `json:"addressVip"` + // ID ID uint64 `json:"id"` @@ -124,6 +133,18 @@ type RecordK8S struct { // Updated time UpdatedTime uint64 `json:"updatedTime"` + + // With LB + WithLB bool `json:"withLB"` +} + +// Detailed information about address of the Virtual Internet Protocol +type K8SAddressVIP struct { + // Backend IP + BackendIP string `json:"backendIp"` + + // Frontend IP + FrontendIP string `json:"frontendIp"` } // Detailed information about kubernetes cluster groups diff --git a/pkg/cloudapi/k8s/worker_add.go b/pkg/cloudapi/k8s/worker_add.go index 3ea4f13..0849583 100644 --- a/pkg/cloudapi/k8s/worker_add.go +++ b/pkg/cloudapi/k8s/worker_add.go @@ -21,6 +21,10 @@ type WorkerAddRequest struct { // How many worker nodes to add // Required: false Num uint64 `url:"num,omitempty" json:"num,omitempty"` + + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` } // WorkerAdd adds worker nodes to a Kubernetes cluster diff --git a/pkg/cloudapi/k8s/workers_group_add.go b/pkg/cloudapi/k8s/workers_group_add.go index 9b32d2a..97570c7 100644 --- a/pkg/cloudapi/k8s/workers_group_add.go +++ b/pkg/cloudapi/k8s/workers_group_add.go @@ -60,6 +60,10 @@ type WorkersGroupAddRequest struct { // Meta data for working group computes, format YAML "user_data": 1111 // Required: false UserData string `url:"userData,omitempty" json:"userData,omitempty"` + + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` } // GetRAM returns RAM field values diff --git a/pkg/cloudapi/kvmppc.go b/pkg/cloudapi/kvmppc.go deleted file mode 100644 index c8c4e44..0000000 --- a/pkg/cloudapi/kvmppc.go +++ /dev/null @@ -1,8 +0,0 @@ -package cloudapi - -import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/kvmppc" - -// Accessing the KVMPPC method group -func (ca *CloudAPI) KVMPPC() *kvmppc.KVMPPC { - return kvmppc.New(ca.client) -} diff --git a/pkg/cloudapi/kvmppc/create.go b/pkg/cloudapi/kvmppc/create.go deleted file mode 100644 index 9f602fb..0000000 --- a/pkg/cloudapi/kvmppc/create.go +++ /dev/null @@ -1,202 +0,0 @@ -package kvmppc - -import ( - "context" - "encoding/json" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -type Interface struct { - // Network type - // Should be one of: - // - VINS - // - EXTNET - NetType string `url:"netType" json:"netType" validate:"required,kvmNetType"` - - // Network ID for connect to, - // for EXTNET - external network ID, - // for VINS - VINS ID, - NetID uint64 `url:"netId" json:"netId" validate:"required"` - - // IP address to assign to this VM when connecting to the specified network - // Required: false - IPAddr string `url:"ipAddr,omitempty" json:"ipAddr,omitempty"` -} - -// DataDisk detailed struct for DataDisks field in CreateRequest and CreateBlankRequest -type DataDisk struct { - // Name for disk - // Required: true - DiskName string `url:"diskName" json:"diskName" validate:"required"` - - // Disk size in GB - // Required: true - Size uint64 `url:"size" json:"size" validate:"required"` - - // Storage endpoint provider ID - // By default the same with boot disk - // Required: false - SepID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` - - // Pool name - // By default will be chosen automatically - // Required: false - Pool string `url:"pool,omitempty" json:"pool,omitempty"` - - // Optional description - // Required: false - Description string `url:"desc,omitempty" json:"desc,omitempty"` - - // Specify image id for create disk from template - // Required: false - ImageID uint64 `url:"imageId,omitempty" json:"imageId,omitempty"` -} - -// CreateRequest struct to create KVM PowerPC VM -type CreateRequest struct { - // ID of the resource group, which will own this VM - // Required: true - RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Name of this VM. - // Must be unique among all VMs (including those in DELETED state) in target resource group - // Required: true - Name string `url:"name" json:"name" validate:"required"` - - // Number CPUs to allocate to this VM - // Required: true - CPU uint64 `url:"cpu" json:"cpu" validate:"required"` - - // Volume of RAM in MB to allocate to this VM - // Required: true - RAM uint64 `url:"ram" json:"ram" validate:"required"` - - // ID of the OS image to base this VM on; - // Could be boot disk image or CD-ROM image - // Required: true - ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` - - // Size of the boot disk in GB - // Required: false - BootDisk uint64 `url:"bootDisk,omitempty" json:"bootDisk,omitempty"` - - // ID of SEP to create boot disk on. - // Uses images SEP ID if not set - // Required: false - SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` - - // Pool to use if sepId is set, can be also empty if needed to be chosen by system - // Required: false - Pool string `url:"pool,omitempty" json:"pool,omitempty"` - - // Slice of structs with data disk description. Each disk has parameters: required - diskName, size; optional - sepId, pool, desc and imageId. - // If not specified, compute will be created without disks. - // To create compute without disks, pass initialized empty slice . - // Required: false - DataDisks []DataDisk `url:"-" json:"dataDisks,omitempty" validate:"omitempty,dive"` - - // Slice of structs with net interface description. - // If not specified, compute will be created with default interface from RG. - // To create compute without interfaces, pass initialized empty slice . - // Required: false - Interfaces []Interface `url:"-" json:"interfaces,omitempty" validate:"omitempty,dive"` - - // Input data for cloud-init facility - // Required: false - Userdata string `url:"userdata,omitempty" json:"userdata,omitempty"` - - // Text description of this VM - // Required: false - Description string `url:"desc,omitempty" json:"desc,omitempty"` - - // Start VM upon success - // Required: false - Start bool `url:"start" json:"start"` - - // System name - // Required: false - IS string `url:"IS,omitempty" json:"IS,omitempty"` - - // Compute purpose - // Required: false - IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"` -} - -// GetRAM returns RAM field values -func (r CreateRequest) GetRAM() map[string]uint64 { - - res := make(map[string]uint64, 1) - - res["RAM"] = r.RAM - - return res -} - -type wrapperCreateRequest struct { - CreateRequest - Interfaces []string `url:"interfaces,omitempty"` - DataDisks []string `url:"dataDisks,omitempty"` -} - -// Create creates KVM PowerPC VM based on specified OS image -func (k KVMPPC) Create(ctx context.Context, req CreateRequest) (uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - return 0, validators.ValidationErrors(validators.GetErrors(err)) - } - - var interfaces []string - - if req.Interfaces != nil && len(req.Interfaces) != 0 { - interfaces = make([]string, 0, len(req.Interfaces)) - - for i := range req.Interfaces { - b, err := json.Marshal(req.Interfaces[i]) - if err != nil { - return 0, err - } - - interfaces = append(interfaces, string(b)) - } - } else if req.Interfaces != nil && len(req.Interfaces) == 0 { - interfaces = []string{"[]"} - } - - var dataDisks []string - - if req.DataDisks != nil && len(req.DataDisks) != 0 { - dataDisks = make([]string, 0, len(req.DataDisks)) - - for i := range req.DataDisks { - b, err := json.Marshal(req.DataDisks[i]) - if err != nil { - return 0, err - } - - dataDisks = append(dataDisks, string(b)) - } - } - - reqWrapped := wrapperCreateRequest{ - CreateRequest: req, - Interfaces: interfaces, - DataDisks: dataDisks, - } - - url := "/cloudapi/kvmppc/create" - - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) - 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/cloudapi/kvmppc/create_blank.go b/pkg/cloudapi/kvmppc/create_blank.go deleted file mode 100644 index 1911ca4..0000000 --- a/pkg/cloudapi/kvmppc/create_blank.go +++ /dev/null @@ -1,135 +0,0 @@ -package kvmppc - -import ( - "context" - "encoding/json" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// CreateBlankRequest struct to create KVM PowerPC VM from scratch -type CreateBlankRequest struct { - // ID of the resource group, which will own this VM - // Required: true - RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Name of this VM. - // Must be unique among all VMs (including those in DELETED state) in target resource group - // Required: true - Name string `url:"name" json:"name" validate:"required"` - - // Number CPUs to allocate to this VM - // Required: true - CPU uint64 `url:"cpu" json:"cpu" validate:"required"` - - // Volume of RAM in MB to allocate to this VM - // Required: true - RAM uint64 `url:"ram" json:"ram" validate:"required"` - - // Size of the boot disk in GB - // Required: true - BootDisk uint64 `url:"bootDisk" json:"bootDisk" validate:"required"` - - // ID of SEP to create boot disk on - // Uses images SEP ID if not set - // Required: true - SEPID uint64 `url:"sepId" json:"sepId" validate:"required"` - - // Pool to use if SEP ID is set, can be also empty if needed to be chosen by system - // Required: true - Pool string `url:"pool" json:"pool" validate:"required"` - - // Slice of structs with data disk description. Each disk has parameters: required - diskName, size; optional - sepId, pool, desc and imageId. - // If not specified, compute will be created without disks. - // To create compute without disks, pass initialized empty slice . - // Required: false - DataDisks []DataDisk `url:"-" json:"dataDisks,omitempty" validate:"omitempty,dive"` - - // Slice of structs with net interface description. - // If not specified, compute will be created with default interface from RG. - // To create compute without interfaces, pass initialized empty slice . - // Required: false - Interfaces []Interface `url:"-" json:"interfaces,omitempty" validate:"omitempty,dive"` - - // Text description of this VM - // Required: false - Description string `url:"desc,omitempty" json:"desc,omitempty"` -} - -// GetRAM returns RAM field values -func (r CreateBlankRequest) GetRAM() map[string]uint64 { - - res := make(map[string]uint64, 1) - - res["RAM"] = r.RAM - - return res -} - -type wrapperCreateBlankRequest struct { - CreateBlankRequest - Interfaces []string `url:"interfaces,omitempty"` - DataDisks []string `url:"dataDisks,omitempty"` -} - -// CreateBlank creates KVM PowerPC VM from scratch -func (k KVMPPC) CreateBlank(ctx context.Context, req CreateBlankRequest) (uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - return 0, validators.ValidationErrors(validators.GetErrors(err)) - } - - var interfaces []string - - if req.Interfaces != nil && len(req.Interfaces) != 0 { - interfaces = make([]string, 0, len(req.Interfaces)) - - for i := range req.Interfaces { - b, err := json.Marshal(req.Interfaces[i]) - if err != nil { - return 0, err - } - - interfaces = append(interfaces, string(b)) - } - } else if req.Interfaces != nil && len(req.Interfaces) == 0 { - interfaces = []string{"[]"} - } - - var dataDisks []string - - if req.DataDisks != nil && len(req.DataDisks) != 0 { - dataDisks = make([]string, 0, len(req.DataDisks)) - - for i := range req.DataDisks { - b, err := json.Marshal(req.DataDisks[i]) - if err != nil { - return 0, err - } - - dataDisks = append(dataDisks, string(b)) - } - } - - reqWrapped := wrapperCreateBlankRequest{ - CreateBlankRequest: req, - Interfaces: interfaces, - DataDisks: dataDisks, - } - - url := "/cloudapi/kvmppc/createBlank" - - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) - 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/cloudapi/kvmppc/kvmppc.go b/pkg/cloudapi/kvmppc/kvmppc.go deleted file mode 100644 index ff959f2..0000000 --- a/pkg/cloudapi/kvmppc/kvmppc.go +++ /dev/null @@ -1,18 +0,0 @@ -// API to manage KVM PowerPC compute instances (PPC VMs) -package kvmppc - -import ( - "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" -) - -// Structure for creating request to KVMPPC -type KVMPPC struct { - client interfaces.Caller -} - -// Builder for KVMPPC endpoints -func New(client interfaces.Caller) *KVMPPC { - return &KVMPPC{ - client, - } -} diff --git a/pkg/cloudapi/kvmx86/create.go b/pkg/cloudapi/kvmx86/create.go index 57536cc..47fb460 100644 --- a/pkg/cloudapi/kvmx86/create.go +++ b/pkg/cloudapi/kvmx86/create.go @@ -15,6 +15,7 @@ type Interface struct { // - VINS // - EXTNET // - VFNIC + // - DPDK NetType string `url:"netType" json:"netType" validate:"required,kvmx86NetType"` // Network ID for connect to, @@ -150,6 +151,10 @@ type CreateRequest struct { // Default: false CPUPin bool `url:"cpupin" json:"cpupin"` + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` + // Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node // Required: false // Default: false diff --git a/pkg/cloudapi/kvmx86/create_blank.go b/pkg/cloudapi/kvmx86/create_blank.go index e771518..5b59aba 100644 --- a/pkg/cloudapi/kvmx86/create_blank.go +++ b/pkg/cloudapi/kvmx86/create_blank.go @@ -61,6 +61,10 @@ type CreateBlankRequest struct { // Required: false Driver string `url:"driver,omitempty" json:"driver,omitempty" validate:"omitempty,computeDriver"` + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` + // Text description of this VM // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` diff --git a/pkg/cloudapi/lb/create.go b/pkg/cloudapi/lb/create.go index bd34ac5..996efc4 100644 --- a/pkg/cloudapi/lb/create.go +++ b/pkg/cloudapi/lb/create.go @@ -22,12 +22,12 @@ type CreateRequest struct { Name string `url:"name" json:"name" validate:"required"` // External network to connect this load balancer to - // Required: false - ExtNetID uint64 `url:"extnetId" json:"extnetId"` + // Required: true + ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` // Internal network (VINS) to connect this load balancer to - // Required: false - VINSID uint64 `url:"vinsId" json:"vinsId"` + // Required: true + VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` // Custom sysctl values for Load Balancer instance. Applied on boot // Required: false diff --git a/pkg/cloudapi/lb/filter.go b/pkg/cloudapi/lb/filter.go index c745b34..2dd7ccf 100644 --- a/pkg/cloudapi/lb/filter.go +++ b/pkg/cloudapi/lb/filter.go @@ -26,7 +26,7 @@ func (ll ListLB) FilterByName(name string) ListLB { } // FilterByExtNetID returns ListLB with specified ExtNetID. -func (ll ListLB) FilterByExtNetID(extNetID uint64) ListLB { +func (ll ListLB) FilterByExtNetID(extNetID int64) ListLB { predicate := func(ill ItemLoadBalancer) bool { return ill.ExtNetID == extNetID } diff --git a/pkg/cloudapi/lb/models.go b/pkg/cloudapi/lb/models.go index 1b6fd9e..519348e 100644 --- a/pkg/cloudapi/lb/models.go +++ b/pkg/cloudapi/lb/models.go @@ -33,7 +33,7 @@ type RecordLB struct { DPAPIUser string `json:"dpApiUser"` // External network ID - ExtNetID uint64 `json:"extnetId"` + ExtNetID int64 `json:"extnetId"` // FrontendHAIP FrontendHAIP string `json:"frontendHAIP"` diff --git a/pkg/cloudapi/rg/access_grant.go b/pkg/cloudapi/rg/access_grant.go index 332ebf7..5e731c3 100644 --- a/pkg/cloudapi/rg/access_grant.go +++ b/pkg/cloudapi/rg/access_grant.go @@ -24,10 +24,6 @@ type AccessGrantRequest struct { // - "ARCXDU" // Required: true Right string `url:"right" json:"right" validate:"accessType"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // AccessGrant grants user or group access to the resource group as specified diff --git a/pkg/cloudapi/rg/access_revoke.go b/pkg/cloudapi/rg/access_revoke.go index 3d8e51a..792ef3f 100644 --- a/pkg/cloudapi/rg/access_revoke.go +++ b/pkg/cloudapi/rg/access_revoke.go @@ -17,10 +17,6 @@ type AccessRevokeRequest struct { // User or group name to revoke access // Required: true User string `url:"user" json:"user" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // AccessRevoke revokes specified user or group access from the resource group diff --git a/pkg/cloudapi/rg/create.go b/pkg/cloudapi/rg/create.go index 78a3194..26b6c02 100644 --- a/pkg/cloudapi/rg/create.go +++ b/pkg/cloudapi/rg/create.go @@ -64,10 +64,6 @@ type CreateRequest struct { // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` - // External network ID // Required: false ExtNetID uint64 `url:"extNetId,omitempty" json:"extNetId,omitempty"` diff --git a/pkg/cloudapi/rg/delete.go b/pkg/cloudapi/rg/delete.go index ceac5c6..bac5669 100644 --- a/pkg/cloudapi/rg/delete.go +++ b/pkg/cloudapi/rg/delete.go @@ -22,10 +22,6 @@ type DeleteRequest struct { // Otherwise, they will be placed into recycle bin and could be restored later within recycle bin's purge period // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Delete deletes resource group diff --git a/pkg/cloudapi/rg/disable.go b/pkg/cloudapi/rg/disable.go index f4d2c73..fdb0fda 100644 --- a/pkg/cloudapi/rg/disable.go +++ b/pkg/cloudapi/rg/disable.go @@ -13,10 +13,6 @@ type DisableRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Disable disables resource group diff --git a/pkg/cloudapi/rg/enable.go b/pkg/cloudapi/rg/enable.go index f1784f1..f3f47f4 100644 --- a/pkg/cloudapi/rg/enable.go +++ b/pkg/cloudapi/rg/enable.go @@ -13,10 +13,6 @@ type EnableRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Enable enables resource group diff --git a/pkg/cloudapi/rg/get.go b/pkg/cloudapi/rg/get.go index 523049d..51b3498 100644 --- a/pkg/cloudapi/rg/get.go +++ b/pkg/cloudapi/rg/get.go @@ -13,10 +13,6 @@ type GetRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Get gets current configuration of the resource group as a RecordResourceGroup struct diff --git a/pkg/cloudapi/rg/remove_def_net.go b/pkg/cloudapi/rg/remove_def_net.go new file mode 100644 index 0000000..ddf0384 --- /dev/null +++ b/pkg/cloudapi/rg/remove_def_net.go @@ -0,0 +1,38 @@ +package rg + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// RemoveDefNetRequest struct to remove default network +type RemoveDefNetRequest struct { + // Resource group ID + // Required: true + RGID uint64 `url:"rgId" json:"rgId" validate:"required"` +} + +// RemoveDefNet removes default network from resource group +func (r RG) RemoveDefNet(ctx context.Context, req RemoveDefNetRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudapi/rg/removeDefNet" + + res, err := r.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/rg/restore.go b/pkg/cloudapi/rg/restore.go index b657380..25b8a9b 100644 --- a/pkg/cloudapi/rg/restore.go +++ b/pkg/cloudapi/rg/restore.go @@ -13,10 +13,6 @@ type RestoreRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Restore restores resource group from recycle bin diff --git a/pkg/cloudapi/rg/set_def_net.go b/pkg/cloudapi/rg/set_def_net.go index cdab42c..6238fa4 100644 --- a/pkg/cloudapi/rg/set_def_net.go +++ b/pkg/cloudapi/rg/set_def_net.go @@ -24,10 +24,6 @@ type SetDefNetRequest struct { // Network ID // Required: false NetID uint64 `url:"netId,omitempty" json:"netId,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // SetDefNet sets default network for attach associated virtual machines diff --git a/pkg/cloudapi/rg/update.go b/pkg/cloudapi/rg/update.go index 3480f57..e80cab1 100644 --- a/pkg/cloudapi/rg/update.go +++ b/pkg/cloudapi/rg/update.go @@ -46,9 +46,14 @@ type UpdateRequest struct { // Required: false RegisterComputes bool `url:"registerComputes,omitempty" json:"registerComputes,omitempty"` - // Reason for action + // List of strings with pools i.e.: ["sep1_poolName1", "sep2_poolName2", etc] // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` + UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"` + + // if True the field will be cleared + // Default: false + // Required: false + ClearUniqPools bool `url:"clearUniqPools" json:"clearUniqPools"` } // Update updates resource group diff --git a/pkg/cloudapi/rg/usage.go b/pkg/cloudapi/rg/usage.go index d830414..57ebbf7 100644 --- a/pkg/cloudapi/rg/usage.go +++ b/pkg/cloudapi/rg/usage.go @@ -13,10 +13,6 @@ type UsageRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Usage gets report resource usage on the resource group diff --git a/pkg/cloudapi/sizes.go b/pkg/cloudapi/sizes.go deleted file mode 100644 index 945825c..0000000 --- a/pkg/cloudapi/sizes.go +++ /dev/null @@ -1,10 +0,0 @@ -package cloudapi - -import ( - "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/sizes" -) - -// Accessing the Sizes method group -func (ca *CloudAPI) Sizes() *sizes.Sizes { - return sizes.New(ca.client) -} diff --git a/pkg/cloudapi/sizes/filter.go b/pkg/cloudapi/sizes/filter.go deleted file mode 100644 index 877018c..0000000 --- a/pkg/cloudapi/sizes/filter.go +++ /dev/null @@ -1,44 +0,0 @@ -package sizes - -// FilterByID returns ListSizes with specified ID. -func (ls ListSizes) FilterByID(id uint64) ListSizes { - predicate := func(is ItemSize) bool { - return is.ID == id - } - - return ls.FilterFunc(predicate) -} - -// FilterByName returns ListSizes with specified Name. -func (ls ListSizes) FilterByName(name string) ListSizes { - predicate := func(is ItemSize) bool { - return is.Name == name - } - - return ls.FilterFunc(predicate) -} - -// FilterFunc allows filtering ListSizes based on a user-specified predicate. -func (ls ListSizes) FilterFunc(predicate func(ItemSize) bool) ListSizes { - var result ListSizes - - for _, item := range ls.Data { - if predicate(item) { - result.Data = append(result.Data, item) - } - } - - result.EntryCount = uint64(len(result.Data)) - - return result -} - -// FindOne returns first found ItemSize -// If none was found, returns an empty struct. -func (ls ListSizes) FindOne() ItemSize { - if len(ls.Data) == 0 { - return ItemSize{} - } - - return ls.Data[0] -} diff --git a/pkg/cloudapi/sizes/filter_test.go b/pkg/cloudapi/sizes/filter_test.go deleted file mode 100644 index c61304b..0000000 --- a/pkg/cloudapi/sizes/filter_test.go +++ /dev/null @@ -1,65 +0,0 @@ -package sizes - -import "testing" - -var sizeItems = ListSizes{ - Data: []ItemSize{ - { - Description: "", - Disks: []uint64{}, - ID: 1, - Memory: 512, - Name: "size_1", - VCPUs: 2, - }, - { - Description: "", - Disks: []uint64{}, - ID: 2, - Memory: 1024, - Name: "size_2", - VCPUs: 4, - }, - { - Description: "", - Disks: []uint64{}, - ID: 2, - Memory: 2048, - Name: "size_3", - VCPUs: 6, - }, - }, - EntryCount: 3, -} - -func TestFilterByID(t *testing.T) { - actual := sizeItems.FilterByID(1).FindOne() - - if actual.ID != 1 { - t.Fatal("expected ID 1, found: ", actual.ID) - } -} - -func TestFilterByName(t *testing.T) { - actual := sizeItems.FilterByName("size_2").FindOne() - - if actual.Name != "size_2" { - t.Fatal("expected Name 'size_2', found: ", actual.Name) - } -} - -func TestFilterFunc(t *testing.T) { - actual := sizeItems.FilterFunc(func(is ItemSize) bool { - return is.Memory > 512 - }) - - if len(actual.Data) != 2 { - t.Fatal("expected 2 found, actual: ", len(actual.Data)) - } - - for _, item := range actual.Data { - if item.Memory <= 512 { - t.Fatal("expected Memory greater than 512, found: ", item.Memory) - } - } -} diff --git a/pkg/cloudapi/sizes/ids.go b/pkg/cloudapi/sizes/ids.go deleted file mode 100644 index c0f4ed5..0000000 --- a/pkg/cloudapi/sizes/ids.go +++ /dev/null @@ -1,10 +0,0 @@ -package sizes - -// IDs gets array of configured available flavours IDs from ListSizes struct -func (ls ListSizes) IDs() []uint64 { - res := make([]uint64, 0, len(ls.Data)) - for _, s := range ls.Data { - res = append(res, s.ID) - } - return res -} diff --git a/pkg/cloudapi/sizes/list.go b/pkg/cloudapi/sizes/list.go deleted file mode 100644 index 41209d2..0000000 --- a/pkg/cloudapi/sizes/list.go +++ /dev/null @@ -1,63 +0,0 @@ -package sizes - -import ( - "context" - "encoding/json" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// ListRequest struct for list of the available flavors -type ListRequest struct { - // ID of the cloudspace - // Required: false - CloudspaceID uint64 `url:"cloudspaceId,omitempty" json:"cloudspaceId,omitempty"` - - // Location code for the sizes - // Required: false - Location string `url:"location,omitempty" json:"location,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 the available flavors as a ListSizes struct, filtering can be based on the user which is doing the request -func (s Sizes) List(ctx context.Context, req ListRequest) (*ListSizes, error) { - - res, err := s.ListRaw(ctx, req) - if err != nil { - return nil, err - } - - list := &ListSizes{} - - err = json.Unmarshal(res, &list) - if err != nil { - return nil, err - } - - return list, nil -} - -// ListRaw gets list of the available flavors as an array of bytes -func (s Sizes) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) { - - if err := validators.ValidateRequest(req); err != nil { - return nil, validators.ValidationErrors(validators.GetErrors(err)) - } - - url := "/cloudapi/sizes/list" - - res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, req) - return res, err -} diff --git a/pkg/cloudapi/sizes/models.go b/pkg/cloudapi/sizes/models.go deleted file mode 100644 index abbfcf7..0000000 --- a/pkg/cloudapi/sizes/models.go +++ /dev/null @@ -1,31 +0,0 @@ -package sizes - -// Main onformation about configured available flavors -type ItemSize struct { - // Description - Description string `json:"desc"` - - // List of disk IDs - Disks []uint64 `json:"disks"` - - // ID - ID uint64 `json:"id"` - - // Memory - Memory uint64 `json:"memory"` - - // Name - Name string `json:"name"` - - // VCPUs - VCPUs uint64 `json:"vcpus"` -} - -// List of configured available flavors -type ListSizes struct { - // Data - Data []ItemSize `json:"data"` - - // Entry count - EntryCount uint64 `json:"entryCount"` -} diff --git a/pkg/cloudapi/sizes/serialize.go b/pkg/cloudapi/sizes/serialize.go deleted file mode 100644 index 02de0e7..0000000 --- a/pkg/cloudapi/sizes/serialize.go +++ /dev/null @@ -1,43 +0,0 @@ -package sizes - -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 (ls ListSizes) Serialize(params ...string) (serialization.Serialized, error) { - if len(ls.Data) == 0 { - return []byte{}, nil - } - - if len(params) > 1 { - prefix := params[0] - indent := params[1] - - return json.MarshalIndent(ls, prefix, indent) - } - - return json.Marshal(ls) -} - -// 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 (is ItemSize) Serialize(params ...string) (serialization.Serialized, error) { - if len(params) > 1 { - prefix := params[0] - indent := params[1] - - return json.MarshalIndent(is, prefix, indent) - } - - return json.Marshal(is) -} diff --git a/pkg/cloudapi/sizes/sizes.go b/pkg/cloudapi/sizes/sizes.go deleted file mode 100644 index 27b9750..0000000 --- a/pkg/cloudapi/sizes/sizes.go +++ /dev/null @@ -1,19 +0,0 @@ -// Lists all the configured flavors available. -// A flavor is a combination of amount of compute capacity(CU) and disk capacity(GB). -package sizes - -import ( - "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" -) - -// Structure for creatig request to sizes -type Sizes struct { - client interfaces.Caller -} - -// Builder for sizes endpoints -func New(client interfaces.Caller) *Sizes { - return &Sizes{ - client, - } -} diff --git a/pkg/cloudapi/user/get_audit.go b/pkg/cloudapi/user/get_audit.go index 72f3de1..43287dc 100644 --- a/pkg/cloudapi/user/get_audit.go +++ b/pkg/cloudapi/user/get_audit.go @@ -12,10 +12,6 @@ type GetAuditRequest struct { // Required: false Call string `url:"call,omitempty" json:"call,omitempty"` - // Find by HTTP status code - // Required: false - StatusCode uint64 `url:"statuscode,omitempty" json:"statuscode,omitempty"` - // Find all audits after point in time (unixtime) // Required: false TimestampAt uint64 `url:"timestampAt,omitempty" json:"timestampAt,omitempty"` @@ -24,6 +20,14 @@ type GetAuditRequest struct { // Required: false TimestampTo uint64 `url:"timestampTo,omitempty" json:"timestampTo,omitempty"` + // find by HTTP max status code + // Required: false + MaxStatusCode uint64 `url:"maxStatusCode,omitempty" json:"maxStatusCode,omitempty"` + + // find by HTTP min status code + // Required: false + MinStatusCode uint64 `url:"minStatusCode,omitempty" json:"minStatusCode,omitempty"` + // Page number. // Required: false Page uint64 `url:"page,omitempty" json:"page,omitempty"` diff --git a/pkg/cloudapi/user/models.go b/pkg/cloudapi/user/models.go index b4d01da..03f746c 100644 --- a/pkg/cloudapi/user/models.go +++ b/pkg/cloudapi/user/models.go @@ -23,6 +23,9 @@ type ItemAudit struct { // StatusCode StatusCode StatusCode `json:"Status Code"` + // Guid + GUID string `json:"Guid"` + // Time Time float64 `json:"Time"` } diff --git a/pkg/cloudapi/vins/list.go b/pkg/cloudapi/vins/list.go index cda0f11..a8e799b 100644 --- a/pkg/cloudapi/vins/list.go +++ b/pkg/cloudapi/vins/list.go @@ -30,6 +30,10 @@ type ListRequest struct { // Required: false ExtIP string `url:"extIp,omitempty" json:"extIp,omitempty"` + // Find by VNF Device id + // Required: false + VNFDevId uint64 `url:"vnfdevId,omitempty" json:"vnfdevId,omitempty"` + // Include deleted // Required: false IncludeDeleted bool `url:"includeDeleted,omitempty" json:"includeDeleted,omitempty"` diff --git a/pkg/cloudapi/vins/models.go b/pkg/cloudapi/vins/models.go index 9216fc5..7c97216 100644 --- a/pkg/cloudapi/vins/models.go +++ b/pkg/cloudapi/vins/models.go @@ -251,6 +251,9 @@ type RecordResources struct { // Main information about VNF interface type ItemVNFInterface struct { + // Bus number + BusNumber uint64 `json:"bus_number"` + // Connection ID ConnID uint64 `json:"connId"` @@ -278,6 +281,12 @@ type ItemVNFInterface struct { // MAC MAC string `json:"mac"` + // Maximum transmission unit + MTU uint64 `json:"mtu"` + + // Libvirt Settings + LibvirtSettings LibvirtSettings `json:"libvirtSettings"` + // Name Name string `json:"name"` @@ -722,6 +731,30 @@ type RecordVINS struct { VXLANID uint64 `json:"vxlanId"` } +// Information about libvirt settings +type LibvirtSettings struct { + // TX mode + TXMode string `json:"txmode"` + + // IO event + IOEventFD string `json:"ioeventfd"` + + // Event ID + EventIDx string `json:"event_idx"` + + // Number of queues + Queues uint64 `json:"queues"` + + // RX queue size + RXQueueSize uint64 `json:"rx_queue_size"` + + // TX queue size + TXQueueSize uint64 `json:"tx_queue_size"` + + // GUID + GUID string `json:"guid"` +} + // Main information about NAT rule type ItemNATRule struct { // ID diff --git a/pkg/cloudbroker/account/delete.go b/pkg/cloudbroker/account/delete.go index 4d97e10..1b17782 100644 --- a/pkg/cloudbroker/account/delete.go +++ b/pkg/cloudbroker/account/delete.go @@ -13,10 +13,6 @@ type DeleteRequest struct { // Required: true AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` - // Reason to delete - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` - // Whether to completely delete the account // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` diff --git a/pkg/cloudbroker/account/delete_accounts.go b/pkg/cloudbroker/account/delete_accounts.go index ad459a5..d5ec250 100644 --- a/pkg/cloudbroker/account/delete_accounts.go +++ b/pkg/cloudbroker/account/delete_accounts.go @@ -13,10 +13,6 @@ type DeleteAccountsRequest struct { // Required: true AccountsIDs []uint64 `url:"accountIds" json:"accountIds" validate:"min=1"` - // Reason for deletion - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` - // Whether to completely destroy accounts or not // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` diff --git a/pkg/cloudbroker/account/delete_user.go b/pkg/cloudbroker/account/delete_user.go index 6658591..73180df 100644 --- a/pkg/cloudbroker/account/delete_user.go +++ b/pkg/cloudbroker/account/delete_user.go @@ -17,10 +17,6 @@ type DeleteUserRequest struct { // ID or emailaddress of the user to remove // Required: true UserName string `url:"username" json:"username" validate:"required"` - - // Recursively revoke access rights from owned cloudspaces and vmachines - // Required: false - RecursiveDelete bool `url:"recursivedelete" json:"recursivedelete"` } // DeleteUser revokes user access from the account diff --git a/pkg/cloudbroker/account/disable.go b/pkg/cloudbroker/account/disable.go index 65d496a..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 to disable - // Required: true - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Disable disables an account diff --git a/pkg/cloudbroker/account/enable.go b/pkg/cloudbroker/account/enable.go index c9c7e4d..50609b2 100644 --- a/pkg/cloudbroker/account/enable.go +++ b/pkg/cloudbroker/account/enable.go @@ -13,10 +13,6 @@ type EnableRequest struct { // ID of account // Required: true AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` - - // Reason to enable - // Required: true - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Enable enables an account diff --git a/pkg/cloudbroker/account/restore.go b/pkg/cloudbroker/account/restore.go index 4e7e35d..c12834e 100644 --- a/pkg/cloudbroker/account/restore.go +++ b/pkg/cloudbroker/account/restore.go @@ -12,10 +12,6 @@ type RestoreRequest struct { // ID an account // Required: true AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` - - // Reason to restore - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Restore restores a deleted account diff --git a/pkg/cloudbroker/account/set_cpu_allocation_ratio.go b/pkg/cloudbroker/account/set_cpu_allocation_ratio.go index 4dcb0e1..7bb42f6 100644 --- a/pkg/cloudbroker/account/set_cpu_allocation_ratio.go +++ b/pkg/cloudbroker/account/set_cpu_allocation_ratio.go @@ -3,8 +3,9 @@ package account import ( "context" "net/http" - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) // SetCPUAllocationRatioRequest struct for setting CPU allocation ratio @@ -14,9 +15,8 @@ type SetCPUAllocationRatioRequest struct { AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` // CPU allocation ratio, i.e. one pCPU = ratio*vCPU - // if don't set, default value = 0 - // Required: false - Ratio float64 `url:"ratio" json:"ratio"` + // Required: true + Ratio float64 `url:"ratio" json:"ratio" validate:"required"` } // SetCPUAllocationRatio sets CPU allocation ratio diff --git a/pkg/cloudbroker/account/update.go b/pkg/cloudbroker/account/update.go index d1c2060..d698745 100644 --- a/pkg/cloudbroker/account/update.go +++ b/pkg/cloudbroker/account/update.go @@ -50,6 +50,11 @@ type UpdateRequest struct { // i.e.: ["sep1_poolName1", "sep2_poolName2", etc] // Required: false UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"` + + // if True the field will be cleared + // Default: false + // Required: false + ClearUniqPools bool `url:"clearUniqPools" json:"clearUniqPools"` } // Update updates an account name and resource types and limits diff --git a/pkg/cloudbroker/apiaccess/models.go b/pkg/cloudbroker/apiaccess/models.go index 465c9e0..82b23da 100644 --- a/pkg/cloudbroker/apiaccess/models.go +++ b/pkg/cloudbroker/apiaccess/models.go @@ -83,7 +83,6 @@ type CloudAPIEndpoints struct { Image []string `json:"image,omitempty"` K8CI []string `json:"k8ci,omitempty"` K8S []string `json:"k8s,omitempty"` - KVMPPC []string `json:"kvmppc,omitempty"` KVMX86 []string `json:"kvmx86,omitempty"` LB []string `json:"lb,omitempty"` Loactions []string `json:"locations,omitempty"` @@ -127,7 +126,6 @@ type CloudBrokerEndpoints struct { Job interface{} `json:"job,omitempty"` K8CI []string `json:"k8ci,omitempty"` K8S []string `json:"k8s,omitempty"` - KVMPPC []string `json:"kvmppc,omitempty"` KVMX86 []string `json:"kvmx86,omitempty"` LB []string `json:"lb,omitempty"` Machine []string `json:"machine,omitempty"` diff --git a/pkg/cloudbroker/audit/export_audits_to_file.go b/pkg/cloudbroker/audit/export_audits_to_file.go new file mode 100644 index 0000000..e0dc5fb --- /dev/null +++ b/pkg/cloudbroker/audit/export_audits_to_file.go @@ -0,0 +1,18 @@ +package audit + +import ( + "context" + "net/http" +) + +// ExportAuditsToFile Get audits in csv file, return []byte which should be written to a file *tar.gz +func (a Audit) ExportAuditsToFile(ctx context.Context) ([]byte, error) { + url := "/cloudbroker/audit/exportAuditsToFile" + + res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, nil) + if err != nil { + return nil, err + } + + return res, nil +} diff --git a/pkg/cloudbroker/audit/models.go b/pkg/cloudbroker/audit/models.go index af78ecd..adf0885 100644 --- a/pkg/cloudbroker/audit/models.go +++ b/pkg/cloudbroker/audit/models.go @@ -33,9 +33,6 @@ type ListAudits struct { // Main info about audit type RecordAudit struct { - // Apitask - Apitask string `json:"apitask"` - // Arguments Arguments string `json:"args"` diff --git a/pkg/cloudbroker/backup/restore_disks_from_backup.go b/pkg/cloudbroker/backup/restore_disks_from_backup.go index b88add8..7c8991a 100644 --- a/pkg/cloudbroker/backup/restore_disks_from_backup.go +++ b/pkg/cloudbroker/backup/restore_disks_from_backup.go @@ -26,7 +26,7 @@ type RestoreDisksFromBackupRequest struct { ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` //Backup files - BackupFiles []BackupFile `url:"backupFiles" json:"backupFiles" validate:"required,dive"` + BackupFiles []BackupFile `url:"disks" json:"disks" validate:"required,dive"` } type wrapperRestoreDisksFromBackupRequest struct { diff --git a/pkg/cloudbroker/compute/cd_eject.go b/pkg/cloudbroker/compute/cd_eject.go index f04c473..a7af57b 100644 --- a/pkg/cloudbroker/compute/cd_eject.go +++ b/pkg/cloudbroker/compute/cd_eject.go @@ -13,10 +13,6 @@ type CDEjectRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason to eject - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // CDEject ejects CD image to compute's CD-ROM diff --git a/pkg/cloudbroker/compute/cd_insert.go b/pkg/cloudbroker/compute/cd_insert.go index 4515d33..d592654 100644 --- a/pkg/cloudbroker/compute/cd_insert.go +++ b/pkg/cloudbroker/compute/cd_insert.go @@ -16,10 +16,6 @@ type CDInsertRequest struct { // ID of CD-ROM image // Required: true CDROMID uint64 `url:"cdromId" json:"cdromId" validate:"required"` - - // Reason to insert - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // CDInsert inserts new CD image to compute's CD-ROM diff --git a/pkg/cloudbroker/compute/change_ip.go b/pkg/cloudbroker/compute/change_ip.go new file mode 100644 index 0000000..ef1017f --- /dev/null +++ b/pkg/cloudbroker/compute/change_ip.go @@ -0,0 +1,54 @@ +package compute + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// ChangeIPRequest struct to change IP for network +type ChangeIPRequest struct { + // ID of compute instance + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` + + // Network type + // 'EXTNET' for connect to external network directly + // 'VINS' for connect to ViNS + // Required: true + NetType string `url:"netType" json:"netType" validate:"computeNetType"` + + // Network ID for connect to + // For EXTNET - external network ID + // For VINS - VINS ID + // Required: true + NetID uint64 `url:"netId" json:"netId" validate:"required"` + + // IP address to which we will change the existing one, it must be from the same subnet + // Required: true + IPAddr string `url:"ipAddr" json:"ipAddr" validate:"required"` +} + +// ChangeIP change reserved IP for compute instance +func (c Compute) ChangeIP(ctx context.Context, req ChangeIPRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/compute/changeIp" + + 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/clone.go b/pkg/cloudbroker/compute/clone.go index 8b17a2a..cf2c24c 100644 --- a/pkg/cloudbroker/compute/clone.go +++ b/pkg/cloudbroker/compute/clone.go @@ -26,9 +26,10 @@ type CloneRequest struct { // Required: false SnapshotName string `url:"snapshotName" json:"snapshotName"` - // Reason to clone + // true ignore that the compute is running + // Default: false // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` + Force bool `url:"force" json:"force"` } // Clone clones compute instance diff --git a/pkg/cloudbroker/compute/create_template.go b/pkg/cloudbroker/compute/create_template.go index 17c448a..13562f9 100644 --- a/pkg/cloudbroker/compute/create_template.go +++ b/pkg/cloudbroker/compute/create_template.go @@ -18,10 +18,6 @@ type CreateTemplateRequest struct { // Name to assign to the template being created // Required: true Name string `url:"name" json:"name" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } type wrapperCreateTemplateRequest struct { diff --git a/pkg/cloudbroker/compute/delete.go b/pkg/cloudbroker/compute/delete.go index dd5349a..0f91703 100644 --- a/pkg/cloudbroker/compute/delete.go +++ b/pkg/cloudbroker/compute/delete.go @@ -21,10 +21,6 @@ type DeleteRequest struct { // Set True if you want to detach data disks (if any) from the compute before its deletion // Required: false DetachDisks bool `url:"detachDisks,omitempty" json:"detachDisks,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Delete deletes compute diff --git a/pkg/cloudbroker/compute/disable.go b/pkg/cloudbroker/compute/disable.go index 2fd6e98..eb7b4ee 100644 --- a/pkg/cloudbroker/compute/disable.go +++ b/pkg/cloudbroker/compute/disable.go @@ -13,10 +13,6 @@ type DisableRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Disable disables compute diff --git a/pkg/cloudbroker/compute/disk_attach.go b/pkg/cloudbroker/compute/disk_attach.go index b90dd3d..0f689d8 100644 --- a/pkg/cloudbroker/compute/disk_attach.go +++ b/pkg/cloudbroker/compute/disk_attach.go @@ -21,10 +21,6 @@ type DiskAttachRequest struct { // Type of the disk B;D // Required: false DiskType string `url:"diskType,omitempty" json:"diskType,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // DiskAttach attach disk to compute diff --git a/pkg/cloudbroker/compute/disk_del.go b/pkg/cloudbroker/compute/disk_del.go index 28cdef4..d50cd29 100644 --- a/pkg/cloudbroker/compute/disk_del.go +++ b/pkg/cloudbroker/compute/disk_del.go @@ -21,10 +21,6 @@ type DiskDelRequest struct { // False if disk is to be deleted to recycle bin // Required: true Permanently bool `url:"permanently" json:"permanently"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // DiskDel deletes disk and detaches it from compute diff --git a/pkg/cloudbroker/compute/disk_detach.go b/pkg/cloudbroker/compute/disk_detach.go index 908f7c7..ab35bf3 100644 --- a/pkg/cloudbroker/compute/disk_detach.go +++ b/pkg/cloudbroker/compute/disk_detach.go @@ -17,10 +17,6 @@ type DiskDetachRequest struct { // ID of the disk to detach // Required: true DiskID uint64 `url:"diskId" json:"diskId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // DiskDetach detaches disk from compute diff --git a/pkg/cloudbroker/compute/disk_migrate.go b/pkg/cloudbroker/compute/disk_migrate.go index 1559984..608c2b2 100644 --- a/pkg/cloudbroker/compute/disk_migrate.go +++ b/pkg/cloudbroker/compute/disk_migrate.go @@ -24,8 +24,8 @@ type DiskMigrateRequest struct { // Migration mode. 1 - Data migration and domain update were already completed by third-party software. // Use this if target disk already connected to compute and you only need to save changes for next reboot. - // Required: true - Mode int64 `url:"mode" json:"mode" validate:"required"` + // Required: false + Mode int64 `url:"mode,omitempty" json:"mode,omitempty"` } // DiskMigrate - migrate compute's disk to target disk. Source disk will be detached, target disk will be attached to the same PCI slot. diff --git a/pkg/cloudbroker/compute/disk_qos.go b/pkg/cloudbroker/compute/disk_qos.go index 7c5fbce..91589a3 100644 --- a/pkg/cloudbroker/compute/disk_qos.go +++ b/pkg/cloudbroker/compute/disk_qos.go @@ -21,10 +21,6 @@ type DiskQOSRequest struct { // Limit IO for a certain disk total and read/write options are not allowed to be combined // Required: true Limits string `url:"limits" json:"limits" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // DiskQOS changes QOS of the disk diff --git a/pkg/cloudbroker/compute/disk_resize.go b/pkg/cloudbroker/compute/disk_resize.go index 16543a4..9c8b1f2 100644 --- a/pkg/cloudbroker/compute/disk_resize.go +++ b/pkg/cloudbroker/compute/disk_resize.go @@ -21,10 +21,6 @@ type DiskResizeRequest struct { // New disk size // Required: true Size uint64 `url:"size" json:"size" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // DiskResize changes disk size diff --git a/pkg/cloudbroker/compute/enable.go b/pkg/cloudbroker/compute/enable.go index 5afbcb1..484442a 100644 --- a/pkg/cloudbroker/compute/enable.go +++ b/pkg/cloudbroker/compute/enable.go @@ -13,10 +13,6 @@ type EnableRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Enable enables compute diff --git a/pkg/cloudbroker/compute/get.go b/pkg/cloudbroker/compute/get.go index 6c8470a..60d8a23 100644 --- a/pkg/cloudbroker/compute/get.go +++ b/pkg/cloudbroker/compute/get.go @@ -13,10 +13,6 @@ type GetRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason to action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Get gets information about compute as a RecordCompute struct diff --git a/pkg/cloudbroker/compute/get_audits.go b/pkg/cloudbroker/compute/get_audits.go index 5626d4b..0f627a4 100644 --- a/pkg/cloudbroker/compute/get_audits.go +++ b/pkg/cloudbroker/compute/get_audits.go @@ -13,10 +13,6 @@ type GetAuditsRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason to action - // Required: true - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // GetAudits gets compute audits diff --git a/pkg/cloudbroker/compute/list.go b/pkg/cloudbroker/compute/list.go index 097789f..b243cf7 100644 --- a/pkg/cloudbroker/compute/list.go +++ b/pkg/cloudbroker/compute/list.go @@ -42,6 +42,14 @@ type ListRequest struct { // Required: false IPAddress string `url:"ipAddress,omitempty" json:"ipAddress,omitempty"` + // Find by stack ID + // Required: false + StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` + + // Find by image ID + // Required: false + ImageID uint64 `url:"imageId,omitempty" json:"imageId,omitempty"` + // Find by external network name // Required: false ExtNetName string `url:"extNetName,omitempty" json:"extNetName,omitempty"` diff --git a/pkg/cloudbroker/compute/mass_delete.go b/pkg/cloudbroker/compute/mass_delete.go index e4abefc..44c126b 100644 --- a/pkg/cloudbroker/compute/mass_delete.go +++ b/pkg/cloudbroker/compute/mass_delete.go @@ -17,10 +17,6 @@ type MassDeleteRequest struct { // Delete computes permanently // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassDelete starts jobs to delete several computes diff --git a/pkg/cloudbroker/compute/mass_reboot.go b/pkg/cloudbroker/compute/mass_reboot.go index 973e523..d3652ac 100644 --- a/pkg/cloudbroker/compute/mass_reboot.go +++ b/pkg/cloudbroker/compute/mass_reboot.go @@ -13,10 +13,6 @@ type MassRebootRequest struct { // IDs of compute instances to reboot // Required: true ComputeIDs []uint64 `url:"computeIds" json:"computeIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassReboot starts jobs to reboot several computes diff --git a/pkg/cloudbroker/compute/mass_repair_boot_fs.go b/pkg/cloudbroker/compute/mass_repair_boot_fs.go index 525d837..5438545 100644 --- a/pkg/cloudbroker/compute/mass_repair_boot_fs.go +++ b/pkg/cloudbroker/compute/mass_repair_boot_fs.go @@ -13,10 +13,6 @@ type MassRepairBootFSRequest struct { // IDs of compute instances which boot file systems will be repaired // Required: true ComputeIDs []uint64 `url:"computeIds" json:"computeIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassRepairBootFS repairs boot disk filesystem on several computes diff --git a/pkg/cloudbroker/compute/mass_start.go b/pkg/cloudbroker/compute/mass_start.go index e6684cb..00ff1a6 100644 --- a/pkg/cloudbroker/compute/mass_start.go +++ b/pkg/cloudbroker/compute/mass_start.go @@ -13,10 +13,6 @@ type MassStartRequest struct { // IDs of compute instances to start // Required: true ComputeIDs []uint64 `url:"computeIds" json:"computeIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassStart starts jobs to start several computes diff --git a/pkg/cloudbroker/compute/mass_stop.go b/pkg/cloudbroker/compute/mass_stop.go index cbbe2f5..775c585 100644 --- a/pkg/cloudbroker/compute/mass_stop.go +++ b/pkg/cloudbroker/compute/mass_stop.go @@ -17,10 +17,6 @@ type MassStopRequest struct { // Force stop compute // Required: false Force bool `url:"force,omitempty" json:"force,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassStop starts jobs to stop several computes diff --git a/pkg/cloudbroker/compute/migrate.go b/pkg/cloudbroker/compute/migrate.go index f1245ca..1ceca2b 100644 --- a/pkg/cloudbroker/compute/migrate.go +++ b/pkg/cloudbroker/compute/migrate.go @@ -22,10 +22,6 @@ type MigrateRequest struct { // on source node and recreate on the target // Required: false Force bool `url:"force,omitempty" json:"force,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Migrate migrates compute to another stack diff --git a/pkg/cloudbroker/compute/migrate_storage_abort.go b/pkg/cloudbroker/compute/migrate_storage_abort.go index 7b27ab9..6392e36 100644 --- a/pkg/cloudbroker/compute/migrate_storage_abort.go +++ b/pkg/cloudbroker/compute/migrate_storage_abort.go @@ -13,6 +13,11 @@ type MigrateStorageAbortRequest struct { // ID of the compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` + + // Status check + // Default: false + // Required: false + StatusCheck bool `url:"statusCheck" json:"statusCheck"` } // MigrateStorageAbort aborts complex compute migration job diff --git a/pkg/cloudbroker/compute/models.go b/pkg/cloudbroker/compute/models.go index 233cc18..0d6a2c7 100644 --- a/pkg/cloudbroker/compute/models.go +++ b/pkg/cloudbroker/compute/models.go @@ -364,6 +364,9 @@ type ItemDisk struct { // Boot partition BootPartition uint64 `json:"bootPartition"` + // Bus number + BusNumber uint64 `json:"bus_number"` + // Created time CreatedTime uint64 `json:"createdTime"` @@ -510,6 +513,9 @@ type ListDisks []ItemDisk // Main information about interface type ItemInterface struct { + // Bus number + BusNumber uint64 `json:"bus_number"` + // Connection ID ConnID uint64 `json:"connId"` @@ -534,6 +540,12 @@ type ItemInterface struct { // Listen SSH or not ListenSSH bool `json:"listenSsh"` + // Maximum transmission unit + MTU uint64 `json:"mtu"` + + // Libvirt Settings + LibvirtSettings LibvirtSettings `json:"libvirtSettings"` + // MAC MAC string `json:"mac"` @@ -621,9 +633,12 @@ type InfoCompute struct { // Boot disk size BootDiskSize uint64 `json:"bootdiskSize"` - // cd Image Id + // CD Image Id CdImageId uint64 `json:"cdImageId"` + // Chipset + Chipset string `json:"chipset"` + // Clone reference CloneReference uint64 `json:"cloneReference"` @@ -784,6 +799,30 @@ type InfoCompute struct { VirtualImageID uint64 `json:"virtualImageId"` } +// Information about libvirt settings +type LibvirtSettings struct { + // TX mode + TXMode string `json:"txmode"` + + // IO event + IOEventFD string `json:"ioeventfd"` + + // Event ID + EventIDx string `json:"event_idx"` + + // Number of queues + Queues uint64 `json:"queues"` + + // RX queue size + RXQueueSize uint64 `json:"rx_queue_size"` + + // TX queue size + TXQueueSize uint64 `json:"tx_queue_size"` + + // GUID + GUID string `json:"guid"` +} + // Detailed information about compute type RecordCompute struct { // Account ID @@ -816,9 +855,12 @@ type RecordCompute struct { // Boot disk size BootDiskSize uint64 `json:"bootdiskSize"` - // cd Image Id + // CD Image Id CdImageId uint64 `json:"cdImageId"` + // Chipset + Chipset string `json:"chipset"` + // Clone reference CloneReference uint64 `json:"cloneReference"` @@ -900,6 +942,9 @@ type RecordCompute struct { // Name Name string `json:"name"` + // Node ID + NodeID uint64 `json:"nodeId"` + // Natable VINS ID NatableVINSID uint64 `json:"natableVinsId"` @@ -1020,6 +1065,9 @@ type ItemCompute struct { // Information Disk type InfoDisk struct { + // Bus number + BusNumber uint64 `json:"bus_number"` + // ID ID uint64 `json:"id"` @@ -1036,7 +1084,6 @@ type ListComputes struct { EntryCount uint64 `json:"entryCount"` } -// Short information about audit // Short information about audit type ItemAudit struct { // Epoch diff --git a/pkg/cloudbroker/compute/net_attach.go b/pkg/cloudbroker/compute/net_attach.go index 939dcac..17d3482 100644 --- a/pkg/cloudbroker/compute/net_attach.go +++ b/pkg/cloudbroker/compute/net_attach.go @@ -18,6 +18,7 @@ type NetAttachRequest struct { // 'EXTNET' for connect to external network directly // 'VINS' for connect to ViNS // 'VFNIC' for connect to vfpool + // 'DPDK' for connect to DPDK // Required: true NetType string `url:"netType" json:"netType" validate:"computex86NetType"` @@ -31,9 +32,9 @@ type NetAttachRequest struct { // Required: true IPAddr string `url:"ipAddr,omitempty" json:"ipAddr,omitempty"` - // Reason for action + // Used only for DPDK type, must be 1-9216 // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` + MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"` } // NetAttach attaches network to compute and gets info about network diff --git a/pkg/cloudbroker/compute/net_detach.go b/pkg/cloudbroker/compute/net_detach.go index ada6365..ccddaa1 100644 --- a/pkg/cloudbroker/compute/net_detach.go +++ b/pkg/cloudbroker/compute/net_detach.go @@ -21,10 +21,6 @@ type NetDetachRequest struct { // MAC of the network interface // Required: false MAC string `url:"mac,omitempty" json:"mac,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // NetDetach detaches network from compute diff --git a/pkg/cloudbroker/compute/pause.go b/pkg/cloudbroker/compute/pause.go index 0ba05d4..e4957c7 100644 --- a/pkg/cloudbroker/compute/pause.go +++ b/pkg/cloudbroker/compute/pause.go @@ -13,10 +13,6 @@ type PauseRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Pause pause compute diff --git a/pkg/cloudbroker/compute/pfw_add.go b/pkg/cloudbroker/compute/pfw_add.go index 9afee7d..44e2659 100644 --- a/pkg/cloudbroker/compute/pfw_add.go +++ b/pkg/cloudbroker/compute/pfw_add.go @@ -33,10 +33,6 @@ type PFWAddRequest struct { // - udp // Required: true Proto string `url:"proto" json:"proto" validate:"proto"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // PFWAdd adds port forward rule diff --git a/pkg/cloudbroker/compute/pfw_del.go b/pkg/cloudbroker/compute/pfw_del.go index 8119c9d..e5afe4b 100644 --- a/pkg/cloudbroker/compute/pfw_del.go +++ b/pkg/cloudbroker/compute/pfw_del.go @@ -36,10 +36,6 @@ type PFWDelRequest struct { // - udp // Required: false Proto string `url:"proto,omitempty" json:"proto,omitempty" validate:"omitempty,proto"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // PFWDel deletes port forward rule diff --git a/pkg/cloudbroker/compute/pfw_list.go b/pkg/cloudbroker/compute/pfw_list.go index b6fcd6c..6d7d670 100644 --- a/pkg/cloudbroker/compute/pfw_list.go +++ b/pkg/cloudbroker/compute/pfw_list.go @@ -13,10 +13,6 @@ type PFWListRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // PFWList gets compute port forwards list diff --git a/pkg/cloudbroker/compute/pin_to_stack.go b/pkg/cloudbroker/compute/pin_to_stack.go index 7531c49..2b89ea3 100644 --- a/pkg/cloudbroker/compute/pin_to_stack.go +++ b/pkg/cloudbroker/compute/pin_to_stack.go @@ -15,8 +15,8 @@ type PinToStackRequest struct { ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` // Stack ID to pin to - // Required: true - TargetStackID uint64 `url:"targetStackId" json:"targetStackId" validate:"required"` + // Required: false + TargetStackID uint64 `url:"targetStackId" json:"targetStackId"` // Try to migrate or not if compute in running states // Required: false diff --git a/pkg/cloudbroker/compute/reboot.go b/pkg/cloudbroker/compute/reboot.go index b66d910..7b174a9 100644 --- a/pkg/cloudbroker/compute/reboot.go +++ b/pkg/cloudbroker/compute/reboot.go @@ -13,10 +13,6 @@ type RebootRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Reboot reboots compute diff --git a/pkg/cloudbroker/compute/redeploy.go b/pkg/cloudbroker/compute/redeploy.go index 4bf3512..5a74625 100644 --- a/pkg/cloudbroker/compute/redeploy.go +++ b/pkg/cloudbroker/compute/redeploy.go @@ -37,10 +37,6 @@ type RedeployRequest struct { // Set this flag to True to force stop running compute instance and redeploy next // Required: false ForceStop bool `url:"forceStop,omitempty" json:"forceStop,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Redeploy redeploys compute diff --git a/pkg/cloudbroker/compute/repair_boot_fs.go b/pkg/cloudbroker/compute/repair_boot_fs.go index 85da19e..ae23097 100644 --- a/pkg/cloudbroker/compute/repair_boot_fs.go +++ b/pkg/cloudbroker/compute/repair_boot_fs.go @@ -13,10 +13,6 @@ type RepairBootFSRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // RepairBootFS repairs compute boot disk filesystem diff --git a/pkg/cloudbroker/compute/reset.go b/pkg/cloudbroker/compute/reset.go index 81b083e..194f8dd 100644 --- a/pkg/cloudbroker/compute/reset.go +++ b/pkg/cloudbroker/compute/reset.go @@ -13,10 +13,6 @@ type ResetRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Reset resets compute diff --git a/pkg/cloudbroker/compute/resize.go b/pkg/cloudbroker/compute/resize.go index 9a113c4..2d2e50a 100644 --- a/pkg/cloudbroker/compute/resize.go +++ b/pkg/cloudbroker/compute/resize.go @@ -27,10 +27,6 @@ type ResizeRequest struct { // Force compute resize // Required: false Force bool `url:"force,omitempty" json:"force,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // GetRAM returns RAM field values diff --git a/pkg/cloudbroker/compute/restore.go b/pkg/cloudbroker/compute/restore.go index 36ee737..1310866 100644 --- a/pkg/cloudbroker/compute/restore.go +++ b/pkg/cloudbroker/compute/restore.go @@ -13,10 +13,6 @@ type RestoreRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Restore restores compute from recycle bin diff --git a/pkg/cloudbroker/compute/resume.go b/pkg/cloudbroker/compute/resume.go index 4726787..eff98c1 100644 --- a/pkg/cloudbroker/compute/resume.go +++ b/pkg/cloudbroker/compute/resume.go @@ -13,10 +13,6 @@ type ResumeRequest struct { // ID of compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Resume resumes Compute from paused state diff --git a/pkg/cloudbroker/compute/set_net_config.go b/pkg/cloudbroker/compute/set_net_config.go new file mode 100644 index 0000000..34a118b --- /dev/null +++ b/pkg/cloudbroker/compute/set_net_config.go @@ -0,0 +1,66 @@ +package compute + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// SetNetConfigRequest struct to Configure libvirt virtio interface parameters +type SetNetConfigRequest struct { + // ID of compute instance + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` + + // Interface MAC-address + // Required: true + MAC string `url:"mac" json:"mac" validate:"required"` + + // TXMode, must be 'iothread', 'timer' or 'selected by hypervisor' + // Required: false + TXMode string `url:"txmode,omitempty" json:"txmode,omitempty" validate:"omitempty,interfaceTXModel"` + + // IOEventFD, must be 'on', 'off' or 'selected by hypervisor' + // Required: false + IOEventFD string `url:"ioeventfd,omitempty" json:"ioeventfd,omitempty" validate:"omitempty,interfaceIOEventFD"` + + // EventIDx, must be 'on', 'off' or 'selected by hypervisor' + // Required: false + EventIDx string `url:"event_idx,omitempty" json:"event_idx,omitempty" validate:"omitempty,interfaceEventIDx"` + + // Number of queues + // Required: false + Queues uint64 `url:"queues,omitempty" json:"queues,omitempty"` + + // RX queue size + // Required: false + RXQueueSize uint64 `url:"rx_queue_size,omitempty" json:"rx_queue_size,omitempty"` + + // TX queue size + // Required: false + TXQueueSize uint64 `url:"tx_queue_size,omitempty" json:"tx_queue_size,omitempty"` +} + +// Configure libvirt virtio interface parameters +func (c Compute) SetNetConfig(ctx context.Context, req SetNetConfigRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/compute/setNetConfig" + + 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/snapshot_delete.go b/pkg/cloudbroker/compute/snapshot_delete.go index 7b2ff92..7541a9c 100644 --- a/pkg/cloudbroker/compute/snapshot_delete.go +++ b/pkg/cloudbroker/compute/snapshot_delete.go @@ -3,7 +3,6 @@ package compute import ( "context" "net/http" - "strconv" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) @@ -19,24 +18,52 @@ type SnapshotDeleteRequest struct { Label string `url:"label" json:"label" validate:"required"` } +type wrapperSnapshotDeleteRequest struct { + SnapshotDeleteRequest + + AsyncMode bool `url:"asyncMode"` +} + // SnapshotDelete deletes specified compute snapshot -func (c Compute) SnapshotDelete(ctx context.Context, req SnapshotDeleteRequest) (bool, error) { +func (c Compute) SnapshotDelete(ctx context.Context, req SnapshotDeleteRequest) (string, error) { err := validators.ValidateRequest(req) if err != nil { - return false, validators.ValidationErrors(validators.GetErrors(err)) + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSnapshotDeleteRequest{ + SnapshotDeleteRequest: req, + AsyncMode: false, } url := "/cloudbroker/compute/snapshotDelete" - res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) + res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) if err != nil { - return false, err + return "", err } - result, err := strconv.ParseBool(string(res)) + return string(res), nil +} + +// SnapshotDeleteAsync deletes specified compute snapshot with AsyncMode +func (c Compute) SnapshotDeleteAsync(ctx context.Context, req SnapshotDeleteRequest) (string, error) { + err := validators.ValidateRequest(req) + if err != nil { + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSnapshotDeleteRequest{ + SnapshotDeleteRequest: req, + AsyncMode: true, + } + + url := "/cloudbroker/compute/snapshotDelete" + + res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) if err != nil { - return false, err + return "", err } - return result, nil + return string(res), nil } diff --git a/pkg/cloudbroker/compute/start.go b/pkg/cloudbroker/compute/start.go index c6a20a6..cfad942 100644 --- a/pkg/cloudbroker/compute/start.go +++ b/pkg/cloudbroker/compute/start.go @@ -21,10 +21,6 @@ type StartRequest struct { // ID of stack to start compute // Required: false StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Start starts compute diff --git a/pkg/cloudbroker/compute/stop.go b/pkg/cloudbroker/compute/stop.go index 52062ef..cabc0c8 100644 --- a/pkg/cloudbroker/compute/stop.go +++ b/pkg/cloudbroker/compute/stop.go @@ -22,10 +22,6 @@ type StopRequest struct { // Default: true // Required: false Depresent bool `url:"depresent" json:"depresent"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Stop stops compute diff --git a/pkg/cloudbroker/compute/update.go b/pkg/cloudbroker/compute/update.go index f08265f..cda1215 100644 --- a/pkg/cloudbroker/compute/update.go +++ b/pkg/cloudbroker/compute/update.go @@ -35,14 +35,14 @@ type UpdateRequest struct { // Default: false CPUPin bool `url:"cpupin" json:"cpupin"` + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` + // Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node // Required: false // Default: false HPBacked bool `url:"hpBacked" json:"hpBacked"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Update updates some properties of the compute diff --git a/pkg/cloudbroker/disks/delete.go b/pkg/cloudbroker/disks/delete.go index 0408db5..fcde710 100644 --- a/pkg/cloudbroker/disks/delete.go +++ b/pkg/cloudbroker/disks/delete.go @@ -21,10 +21,6 @@ type DeleteRequest struct { // Whether to completely delete the disk, works only with non attached disks // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason to delete - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Delete deletes disk by ID diff --git a/pkg/cloudbroker/disks/delete_disks.go b/pkg/cloudbroker/disks/delete_disks.go index 7c6a228..536bb3d 100644 --- a/pkg/cloudbroker/disks/delete_disks.go +++ b/pkg/cloudbroker/disks/delete_disks.go @@ -14,10 +14,6 @@ type DeleteDisksRequest struct { // Required: true DisksIDs []uint64 `url:"diskIds" json:"diskIds" validate:"min=1"` - // Reason for deleting the disks - // Required: true - Reason string `url:"reason" json:"reason" validate:"required"` - // Whether to completely delete the disks, works only with non attached disks // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` diff --git a/pkg/cloudbroker/disks/from_platform_disk.go b/pkg/cloudbroker/disks/from_platform_disk.go index e121100..74b8876 100644 --- a/pkg/cloudbroker/disks/from_platform_disk.go +++ b/pkg/cloudbroker/disks/from_platform_disk.go @@ -30,7 +30,6 @@ type FromPlatformDiskRequest struct { // Binary architecture of this image // Should be: // - X86_64 - // - PPC64_LE // Required: true Architecture string `url:"architecture" json:"architecture" validate:"imageArchitecture"` @@ -56,8 +55,8 @@ type FromPlatformDiskRequest struct { // List of types of compute suitable for image // Example: [ "KVM_X86" ] - // Required: false - Drivers []string `url:"drivers,omitempty" json:"drivers,omitempty"` + // Required: true + Drivers []string `url:"drivers" json:"drivers" validate:"required"` // Does this machine supports hot resize // Required: false diff --git a/pkg/cloudbroker/disks/restore.go b/pkg/cloudbroker/disks/restore.go index fc663cb..d52d5b4 100644 --- a/pkg/cloudbroker/disks/restore.go +++ b/pkg/cloudbroker/disks/restore.go @@ -13,10 +13,6 @@ type RestoreRequest struct { // ID of the disk to restore // Required: true DiskID uint64 `url:"diskId" json:"diskId" validate:"required"` - - // Reason for restoring the disk - // Required: true - Reason string `url:"reason" json:"reason" validate:"required"` } // Restore restores a deleted unattached disk from recycle bin diff --git a/pkg/cloudbroker/dpdk.go b/pkg/cloudbroker/dpdk.go new file mode 100644 index 0000000..869552b --- /dev/null +++ b/pkg/cloudbroker/dpdk.go @@ -0,0 +1,8 @@ +package cloudbroker + +import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet" + +// Accessing the DPDK method group +func (ca *CloudBroker) DPDKNet() *dpdknet.DPDKNet { + return dpdknet.New(ca.client) +} diff --git a/pkg/cloudbroker/dpdknet/create.go b/pkg/cloudbroker/dpdknet/create.go new file mode 100644 index 0000000..f91c2dc --- /dev/null +++ b/pkg/cloudbroker/dpdknet/create.go @@ -0,0 +1,62 @@ +package dpdknet + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// CreateRequest struct to create DPDK network +type CreateRequest struct { + // Name of new DPDK network + // Required: true + Name string `url:"name" json:"name" validate:"required"` + + // Description of new DPDK network. Prefer to contain additional information about DPDK network. + // Required: false + Description string `url:"description,omitempty" json:"description,omitempty"` + + // ID of the grid (platform) + // Required: true + GID uint64 `url:"gid" json:"gid" validate:"required"` + + // ID of vlan + // Required: true + VlanID uint64 `url:"vlanId" json:"vlanId" validate:"required"` + + // Name of OVS Bridge to use for creating DPDK network on + // Required: true + OVSBridge string `url:"ovsBridge" json:"ovsBridge" validate:"required"` + + // List of account IDs to which DPDK network will be available. Empty field means all accounts in the system. + // Required: false + AccountAccess []uint64 `url:"accountAccess,omitempty" json:"accountAccess,omitempty"` + + // List of resource groups IDs to which DPDK network will be available. Empty field means all resource groups in the system. + // Required: false + RGAccess []uint64 `url:"rgAccess,omitempty" json:"rgAccess,omitempty"` +} + +// Create creates a DPDK networks +func (d DPDKNet) Create(ctx context.Context, req CreateRequest) (uint64, error) { + err := validators.ValidateRequest(req) + if err != nil { + return 0, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/dpdknet/create" + + res, err := d.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/grid/check_vms.go b/pkg/cloudbroker/dpdknet/delete.go similarity index 51% rename from pkg/cloudbroker/grid/check_vms.go rename to pkg/cloudbroker/dpdknet/delete.go index 5e3d89b..3620ab1 100644 --- a/pkg/cloudbroker/grid/check_vms.go +++ b/pkg/cloudbroker/dpdknet/delete.go @@ -1,4 +1,4 @@ -package grid +package dpdknet import ( "context" @@ -8,23 +8,23 @@ import ( "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) -// CheckVMsRequest struct to check virtual machine -type CheckVMsRequest struct { - // Grid (platform) ID +// DeleteRequest struct to delete DPDK network +type DeleteRequest struct { + // ID of DPDK network to delete // Required: true - GID uint64 `url:"gid" json:"gid" validate:"required"` + DPDKID uint64 `url:"dpdkId" json:"dpdkId" validate:"required"` } -// CheckVMs run checkvms jumpscript -func (g Grid) CheckVMs(ctx context.Context, req CheckVMsRequest) (bool, error) { +// Delete deletes DPDK network by ID +func (d DPDKNet) Delete(ctx context.Context, req DeleteRequest) (bool, error) { err := validators.ValidateRequest(req) if err != nil { return false, validators.ValidationErrors(validators.GetErrors(err)) } - url := "/cloudbroker/grid/checkVMs" + url := "/cloudbroker/dpdknet/delete" - res, err := g.client.DecortApiCall(ctx, http.MethodPost, url, req) + res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { return false, err } diff --git a/pkg/cloudbroker/dpdknet/disable.go b/pkg/cloudbroker/dpdknet/disable.go new file mode 100644 index 0000000..8596ffc --- /dev/null +++ b/pkg/cloudbroker/dpdknet/disable.go @@ -0,0 +1,39 @@ +package dpdknet + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// DisableRequest struct to disable DPDK network +// Computes will not be able to use it until it is enabled again. +type DisableRequest struct { + // ID of DPDK network to disable + // Required: true + DPDKID uint64 `url:"dpdkId" json:"dpdkId" validate:"required"` +} + +// Disable disables DPDK network by ID +func (d DPDKNet) Disable(ctx context.Context, req DisableRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/dpdknet/disable" + + res, err := d.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/dpdknet/dpdk.go b/pkg/cloudbroker/dpdknet/dpdk.go new file mode 100644 index 0000000..356b959 --- /dev/null +++ b/pkg/cloudbroker/dpdknet/dpdk.go @@ -0,0 +1,15 @@ +package dpdknet + +import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" + +// Structure for creating request to DPDK network +type DPDKNet struct { + client interfaces.Caller +} + +// Builder for dpdk endpoints +func New(client interfaces.Caller) *DPDKNet { + return &DPDKNet{ + client, + } +} diff --git a/pkg/cloudbroker/dpdknet/enable.go b/pkg/cloudbroker/dpdknet/enable.go new file mode 100644 index 0000000..c8dc513 --- /dev/null +++ b/pkg/cloudbroker/dpdknet/enable.go @@ -0,0 +1,38 @@ +package dpdknet + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// EnableRequest struct to enable DPDK network +type EnableRequest struct { + // ID of DPDK network to enable + // Required: true + DPDKID uint64 `url:"dpdkId" json:"dpdkId" validate:"required"` +} + +// Enable enables DPDK network by ID +func (d DPDKNet) Enable(ctx context.Context, req EnableRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/dpdknet/enable" + + res, err := d.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/dpdknet/get.go b/pkg/cloudbroker/dpdknet/get.go new file mode 100644 index 0000000..58323e9 --- /dev/null +++ b/pkg/cloudbroker/dpdknet/get.go @@ -0,0 +1,46 @@ +package dpdknet + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// GetRequest struct to get information about DPDK network +type GetRequest struct { + // ID of the DPDK network + // Required: true + DPDKID uint64 `url:"dpdkId" json:"dpdkId" validate:"required"` +} + +// Get DPDK network details as a RecordDPDKNet struct +func (d DPDKNet) Get(ctx context.Context, req GetRequest) (*RecordDPDKNet, error) { + res, err := d.GetRaw(ctx, req) + if err != nil { + return nil, err + } + + info := RecordDPDKNet{} + + err = json.Unmarshal(res, &info) + if err != nil { + return nil, err + } + + return &info, nil +} + +// GetRaw gets DPDK network details as an array of bytes +func (d DPDKNet) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/dpdknet/get" + + res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/dpdknet/list.go b/pkg/cloudbroker/dpdknet/list.go new file mode 100644 index 0000000..3fab4ab --- /dev/null +++ b/pkg/cloudbroker/dpdknet/list.go @@ -0,0 +1,91 @@ +package dpdknet + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// ListRequest struct to get list of DPDK networks +type ListRequest struct { + // Find by id + // Required: false + ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"` + + // Find by gid + // 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 account access + // Required: false + AccountAccess []uint64 `url:"accountAccess,omitempty" json:"accountAccess,omitempty"` + + // Find by resource group access + // Required: false + RGAccess []uint64 `url:"rgAccess,omitempty" json:"rgAccess,omitempty"` + + // Find by vlan ID + // Required: false + VlanID uint64 `url:"vlanId,omitempty" json:"vlanId,omitempty"` + + // Find by computeIDs + // Required: false + ComputeIDs []uint64 `url:"computeIds,omitempty" json:"computeIds,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 the created DPDK networks belonging to an account as a ListDPDKNet struct +func (d DPDKNet) List(ctx context.Context, req ListRequest) (*ListDPDKNet, error) { + + res, err := d.ListRaw(ctx, req) + if err != nil { + return nil, err + } + + list := ListDPDKNet{} + + err = json.Unmarshal(res, &list) + if err != nil { + return nil, err + } + + return &list, nil +} + +// ListRaw gets list of the created DPDK networks belonging to an account as an array of bytes +func (d DPDKNet) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) { + + if err := validators.ValidateRequest(req); err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/dpdknet/list" + + res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/dpdknet/models.go b/pkg/cloudbroker/dpdknet/models.go new file mode 100644 index 0000000..7bcf84d --- /dev/null +++ b/pkg/cloudbroker/dpdknet/models.go @@ -0,0 +1,92 @@ +package dpdknet + +// Detailed information about DPDK network +type RecordDPDKNet struct { + // List of accounts with access + AccountAccess []uint64 `json:"accountAccess"` + + // Created time + CreatedTime uint64 `json:"createdTime"` + + // Updated time + UpdatedTime uint64 `json:"updatedTime"` + + // Description + Description string `json:"description"` + + // Grid ID + GID uint64 `json:"gid"` + + // Guid ID + GUID uint64 `json:"guid"` + + // ID + ID uint64 `json:"id"` + + // Name + Name string `json:"name"` + + // List of resource groups with access + RGAccess []uint64 `json:"rgAccess"` + + // Status + Status string `json:"status"` + + // OVS bridge + OVSBridge string `json:"ovsBridge"` + + // Vlan ID + VlanID uint64 `json:"vlanId"` + + // Compute IDs + ComputeIDs []uint64 `json:"computeIds"` +} + +type ListDPDKNet struct { + // Data + Data []ItemDPDKNet `json:"data"` + + // Entry count + EntryCount uint64 `json:"entryCount"` +} + +type ItemDPDKNet struct { + // List of accounts with access + AccountAccess []uint64 `json:"accountAccess"` + + // Created time + CreatedTime uint64 `json:"createdTime"` + + // Updated time + UpdatedTime uint64 `json:"updatedTime"` + + // Description + Description string `json:"description"` + + // Grid ID + GID uint64 `json:"gid"` + + // Guid ID + GUID uint64 `json:"guid"` + + // ID + ID uint64 `json:"id"` + + // Name + Name string `json:"name"` + + // List of resource groups with access + RGAccess []uint64 `json:"rgAccess"` + + // Status + Status string `json:"status"` + + // OVS bridge + OVSBridge string `json:"ovsBridge"` + + // Vlan ID + VlanID uint64 `json:"vlanId"` + + // Compute IDs + ComputeIDs []uint64 `json:"computeIds"` +} diff --git a/pkg/cloudbroker/dpdknet/update.go b/pkg/cloudbroker/dpdknet/update.go new file mode 100644 index 0000000..06c3481 --- /dev/null +++ b/pkg/cloudbroker/dpdknet/update.go @@ -0,0 +1,62 @@ +package dpdknet + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// UpdateRequest struct to update DPDK network +type UpdateRequest struct { + // ID of DPDK network to update + // Required: true + DPDKID uint64 `url:"dpdkId" json:"dpdkId" validate:"required"` + + // New name of DPDK network + // Required: false + Name string `url:"name,omitempty" json:"name,omitempty"` + + // Description of DPDK network. Prefer to contain additional information about DPDK network + // Required: false + Description string `url:"description,omitempty" json:"description,omitempty"` + + // List of account IDs to which DPDK network will be available. Empty field means all accounts in the system. + // Required: false + AccountAccess []uint64 `url:"accountAccess,omitempty" json:"accountAccess,omitempty"` + + // List of resource groups IDs to which DPDK network will be available. Empty field means all resource groups in the system. + // Required: true + RGAccess []uint64 `url:"rgAccess,omitempty" json:"rgAccess,omitempty"` + + // ID of vlan + // Required: true + VlanID uint64 `url:"vlanId,omitempty" json:"vlanId,omitempty"` + + // Name of OVS Bridge to use for DPDK network + // Required: true + OVSBridge string `url:"ovsBridge,omitempty" json:"ovsBridge,omitempty"` +} + +// Update updates a DPDK networks +func (d DPDKNet) Update(ctx context.Context, req UpdateRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/dpdknet/update" + + res, err := d.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/device_migrate.go b/pkg/cloudbroker/extnet/device_migrate.go index c6c47df..d7fcbd2 100644 --- a/pkg/cloudbroker/extnet/device_migrate.go +++ b/pkg/cloudbroker/extnet/device_migrate.go @@ -15,7 +15,8 @@ type DeviceMigrateRequest struct { NetID uint64 `url:"net_id" json:"net_id" validate:"required"` // Target stack ID to migrate to - StackID uint64 `url:"stackId" json:"stackId" validate:"required"` + // Required: false + StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` } // DeviceMigrate migrates external network VNF device diff --git a/pkg/cloudbroker/grid/create_system_space.go b/pkg/cloudbroker/grid/create_system_space.go deleted file mode 100644 index 765ac24..0000000 --- a/pkg/cloudbroker/grid/create_system_space.go +++ /dev/null @@ -1,60 +0,0 @@ -package grid - -import ( - "context" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// CreateSystemSpaceRequest struct to create system space -type CreateSystemSpaceRequest struct { - // Grid (platform) ID - // Required: true - GID uint64 `url:"id" json:"id" validate:"required"` - - // Name of the account/cloudspace to be created for the system - // Required: true - Name string `url:"name" json:"name" validate:"required"` - - // ID of the specific image - // Required: true - ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` - - // Size of base volume - // Required: true - BootSize uint64 `url:"bootsize" json:"bootsize" validate:"required"` - - // Data disk size in gigabytes - // Required: true - DataDiskSize uint64 `url:"dataDiskSize" json:"dataDiskSize" validate:"required"` - - // ID of the specific size - // Required: false - SizeID uint64 `url:"sizeId,omitempty" json:"sizeId,omitempty"` - - // Number of vcpus to provide - // Required: false - VCPUS uint64 `url:"vcpus,omitempty" json:"vcpus,omitempty"` - - // Amount of memory to provide - // Required: false - Memory uint64 `url:"memory,omitempty" json:"memory,omitempty"` -} - -// CreateSystemSpace creates system space -func (g Grid) CreateSystemSpace(ctx context.Context, req CreateSystemSpaceRequest) (string, error) { - err := validators.ValidateRequest(req) - if err != nil { - return "", validators.ValidationErrors(validators.GetErrors(err)) - } - - url := "/cloudbroker/grid/createSystemSpace" - - res, err := g.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return "", err - } - - return string(res), nil -} diff --git a/pkg/cloudbroker/grid/execute_maintenance_script.go b/pkg/cloudbroker/grid/execute_maintenance_script.go index a41a5bf..8f64049 100644 --- a/pkg/cloudbroker/grid/execute_maintenance_script.go +++ b/pkg/cloudbroker/grid/execute_maintenance_script.go @@ -12,7 +12,7 @@ import ( type ExecuteMaintenanceScriptRequest struct { // Grid (platform) ID // Required: true - GID string `url:"gid" json:"gid" validate:"required"` + GID uint64 `url:"gid" json:"gid" validate:"required"` // Type of nodes you want to apply the action on // Required: true diff --git a/pkg/cloudbroker/grid/get_settings.go b/pkg/cloudbroker/grid/get_settings.go new file mode 100644 index 0000000..b1665da --- /dev/null +++ b/pkg/cloudbroker/grid/get_settings.go @@ -0,0 +1,46 @@ +package grid + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// GetSettingsRequest struct to get grid settings +type GetSettingsRequest struct { + // Grid (platform) ID + // Required: true + GID uint64 `url:"grid_id" json:"grid_id" validate:"required"` +} + +// GetSettings gets settings grid by ID as a RecordSettingsGrid struct +func (g Grid) GetSettings(ctx context.Context, req GetSettingsRequest) (*RecordSettingsGrid, error) { + res, err := g.GetSettingsRaw(ctx, req) + if err != nil { + return nil, err + } + + settings := RecordSettingsGrid{} + + err = json.Unmarshal(res, &settings) + if err != nil { + return nil, err + } + + return &settings, nil +} + +// GetSettingsRaw gets settings grid by ID as an array of bytes +func (g Grid) GetSettingsRaw(ctx context.Context, req GetSettingsRequest) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/grid/getSettings" + + res, err := g.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/grid/models.go b/pkg/cloudbroker/grid/models.go index 731b971..1e78e81 100644 --- a/pkg/cloudbroker/grid/models.go +++ b/pkg/cloudbroker/grid/models.go @@ -67,6 +67,12 @@ type DiskUsage struct { // Detailed information about grid type RecordGrid struct { + // CKey + CKey string `json:"_ckey"` + + // Meta + Meta []interface{} `json:"_meta"` + // AuthBroker AuthBroker []interface{} `json:"authBroker"` @@ -133,3 +139,101 @@ type ListEmails struct { // Entry count EntryCount uint64 `json:"entryCount"` } + +// Detailed information about grid settings +type RecordSettingsGrid struct { + //Allowed ports + Allowedports []int `json:"allowedports"` + + //Cleanup retention period + CleanupRetentionPeriod uint64 `json:"cleanupRetentionPeriod"` + + //Docker registry + DockerRegistry DockerRegistry `json:"docker_registry"` + + //Enable uptime monitor + EnableUptimeMonitor bool `json:"enableUptimeMonitor"` + + //Extnet max prereservation num + ExtnetMaxPreReservationsNum int `json:"extnetMaxPreReservationsNum"` + + //Healthcheck notifications + HealthcheckNotifications HealthcheckNotifications `json:"healthcheck_notifications"` + + //k8s cleanup enabled + K8sCleanupEnabled bool `json:"k8s_cleanup_enabled"` + + //Limits + Limits interface{} `json:"limits"` + + //Location url + LocationURL string `json:"location_url"` + + //Net QOS + NetQOS NetQOS `json:"net_qos"` + + //Networks + Networks string `json:"networks"` + + //Prometheus + Prometheus Prometheus `json:"prometheus"` + + //Vins max prereservation num + VinsMaxPreReservationsNum int `json:"vinsMaxPreReservationsNum"` + + //Vnfdev mgmt net range + VnfdevMgmtNetRange string `json:"vnfdev_mgmt_net_range"` +} + +// DockerRegistry in grid settings +type DockerRegistry struct { + //Password + Password string `json:"password"` + + //Server + Server string `json:"server"` + + //Username + Username string `json:"username"` +} + +// NetQOS in grid settings +type NetQOS struct { + // ExtNet Net QOS settings + ExtNet SettingsNetQOS `json:"ext_net"` + + // VINS Net QOS settings + VINS SettingsNetQOS `json:"vins"` +} + +// SettingsNetQOS in grid settings +type SettingsNetQOS struct { + //ERate + ERate uint64 `json:"eRate"` + + //InBurst + InBurst uint64 `json:"inBurst"` + + //InRate + InRate uint64 `json:"inRate"` +} + +// HealthcheckNotifications settings in grid +type HealthcheckNotifications struct { + //Emails + Emails []Emails `json:"emails"` +} + +type Emails struct { + //Address + Address string `json:"address"` + + //Enabled + Enabled bool `json:"enabled"` +} + +// Prometheus setting in grid +type Prometheus struct { + //ScrapeInterval + ScrapeInterval int `json:"scrapeInterval"` +} diff --git a/pkg/cloudbroker/grid/set_password_policy.go b/pkg/cloudbroker/grid/set_password_policy.go index edf3b26..f1a09ea 100644 --- a/pkg/cloudbroker/grid/set_password_policy.go +++ b/pkg/cloudbroker/grid/set_password_policy.go @@ -17,7 +17,7 @@ type SetPasswordPolicyRequest struct { // Available numbers in the password // Default value : true // Required: true - Digits bool `url:"digits" json:"digits"` + Digits interface{} `url:"digits" json:"digits" validate:"isBool"` // Available special characters in the password // Default value : false @@ -27,12 +27,12 @@ type SetPasswordPolicyRequest struct { // Number of characters in the password // Default value : 9 // Required: true - PasswordLength uint64 `url:"passwordLength" json:"passwordLength" validate:"required"` + PasswordLength uint64 `url:"passwordLength" json:"passwordLength"` // Capital letters in the password are available // Default value : true // Required: true - Uppercase bool `url:"uppercase" json:"uppercase"` + Uppercase interface{} `url:"uppercase" json:"uppercase" validate:"isBool"` } // RemoveCustomBackupPath set set password policy for a grid @@ -42,6 +42,18 @@ func (g Grid) SetPasswordPolicy(ctx context.Context, req SetPasswordPolicyReques return false, validators.ValidationErrors(validators.GetErrors(err)) } + if req.PasswordLength == 0 { + req.PasswordLength = 9 + } + + if req.Digits == nil { + req.Digits = true + } + + if req.Uppercase == nil { + req.Uppercase = true + } + url := "/cloudbroker/grid/setPasswordPolicy" res, err := g.client.DecortApiCall(ctx, http.MethodPost, url, req) diff --git a/pkg/cloudbroker/group/list.go b/pkg/cloudbroker/group/list.go index 9196bf7..bc2852b 100644 --- a/pkg/cloudbroker/group/list.go +++ b/pkg/cloudbroker/group/list.go @@ -12,7 +12,7 @@ import ( type ListRequest struct { // Find by id. // Requires: false - ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"` + ByID string `url:"by_id,omitempty" json:"by_id,omitempty"` // Find by list users. // Required: false diff --git a/pkg/cloudbroker/image/create_cdrom_image.go b/pkg/cloudbroker/image/create_cdrom_image.go index ed1b606..ee5156a 100644 --- a/pkg/cloudbroker/image/create_cdrom_image.go +++ b/pkg/cloudbroker/image/create_cdrom_image.go @@ -45,14 +45,13 @@ type CreateCDROMImageRequest struct { // Binary architecture of this image // Should be one of: // - X86_64 - // - PPC64_LE // 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"` + // Required: false + Drivers []string `url:"drivers,omitempty" json:"drivers,omitempty" validate:"max=2,imageDrivers"` } // CreateCDROMImage creates CD-ROM image from an ISO identified by URL diff --git a/pkg/cloudbroker/image/create_image.go b/pkg/cloudbroker/image/create_image.go index 3d02f41..ece1b48 100644 --- a/pkg/cloudbroker/image/create_image.go +++ b/pkg/cloudbroker/image/create_image.go @@ -79,7 +79,6 @@ type CreateRequest struct { // Binary architecture of this image // Should be one of: // - X86_64 - // - PPC64_LE // Required: false Architecture string `url:"architecture,omitempty" json:"architecture,omitempty"` diff --git a/pkg/cloudbroker/image/delete.go b/pkg/cloudbroker/image/delete.go index 0c48e19..abf5e60 100644 --- a/pkg/cloudbroker/image/delete.go +++ b/pkg/cloudbroker/image/delete.go @@ -13,14 +13,6 @@ type DeleteRequest struct { // ID of the image to delete // Required: true ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` - - // Reason for action - // Required: true - Reason string `url:"reason,omitempty" json:"reason,omitempty"` - - // Whether to completely delete the image - // Required: false - Permanently bool `url:"permanently" json:"permanently"` } // Delete deletes image by ID diff --git a/pkg/cloudbroker/image/delete_cdrom_image.go b/pkg/cloudbroker/image/delete_cdrom_image.go index 904ec82..574e44c 100644 --- a/pkg/cloudbroker/image/delete_cdrom_image.go +++ b/pkg/cloudbroker/image/delete_cdrom_image.go @@ -13,10 +13,6 @@ type DeleteCDROMImageRequest struct { // ID of the CD-ROM image to delete // Required: true ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` - - // Whether to completely delete the CD-ROM image, needs to be unused - // Required: false - Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` } // DeleteCDROMImage deletes a CD-ROM image diff --git a/pkg/cloudbroker/image/delete_images.go b/pkg/cloudbroker/image/delete_images.go index 2ce3dcb..482442c 100644 --- a/pkg/cloudbroker/image/delete_images.go +++ b/pkg/cloudbroker/image/delete_images.go @@ -13,14 +13,6 @@ type DeleteImagesRequest struct { // List of images to be deleted // Required: true ImageIDs []uint64 `url:"imageIds" json:"imageIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` - - // Whether to completely delete the images - // Required: false - Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` } // DeleteImages deletes images diff --git a/pkg/cloudbroker/image/list.go b/pkg/cloudbroker/image/list.go index d31b95f..b3291b7 100644 --- a/pkg/cloudbroker/image/list.go +++ b/pkg/cloudbroker/image/list.go @@ -69,6 +69,10 @@ type ListRequest struct { // Page size // Required: false Size uint64 `url:"size,omitempty" json:"size,omitempty"` + + // Find by enabled True or False + // Required: false + Enabled interface{} `url:"enabled,omitempty" json:"enabled,omitempty" validate:"omitempty,isBool"` } // List gets list of information about images as a ListImages struct diff --git a/pkg/cloudbroker/image/sync_create_image.go b/pkg/cloudbroker/image/sync_create_image.go index e8db3fe..6eb91ef 100644 --- a/pkg/cloudbroker/image/sync_create_image.go +++ b/pkg/cloudbroker/image/sync_create_image.go @@ -18,10 +18,6 @@ type SyncCreateRequest struct { // Required: true URL string `url:"url" json:"url" validate:"required"` - // Grid (platform) ID where this template should be create in - // Required: true - GID uint64 `url:"gid" json:"gid" validate:"required"` - // Boot type of image // Should be one of: // - bios @@ -79,7 +75,6 @@ type SyncCreateRequest struct { // Binary architecture of this image // Should be one of: // - X86_64 - // - PPC64_LE // Required: false Architecture string `url:"architecture,omitempty" json:"architecture,omitempty"` diff --git a/pkg/cloudbroker/k8ci/create.go b/pkg/cloudbroker/k8ci/create.go index 59a1beb..3e19f96 100644 --- a/pkg/cloudbroker/k8ci/create.go +++ b/pkg/cloudbroker/k8ci/create.go @@ -29,7 +29,6 @@ type CreateRequest struct { // Compute driver // Should be one of: // - KVM_X86 - // - KVM_PPC // - etc // Required: true MasterDriver string `url:"masterDriver" json:"masterDriver" validate:"driver"` @@ -41,7 +40,6 @@ type CreateRequest struct { // Compute driver // Should be one of // - KVM_X86 - // - KVM_PPC // - etc // Required: true WorkerDriver string `url:"workerDriver" json:"workerDriver" validate:"driver"` diff --git a/pkg/cloudbroker/k8s/create.go b/pkg/cloudbroker/k8s/create.go index 8100a18..30f718b 100644 --- a/pkg/cloudbroker/k8s/create.go +++ b/pkg/cloudbroker/k8s/create.go @@ -164,6 +164,10 @@ type CreateRequest struct { // Insert ssl certificate in x509 pem format // Required: false OidcCertificate string `url:"oidcCertificate,omitempty" json:"oidcCertificate,omitempty"` + + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` } // GetRAM returns RAM values diff --git a/pkg/cloudbroker/k8s/delete_master_from_group.go b/pkg/cloudbroker/k8s/delete_master_from_group.go index b5a7970..b053de1 100644 --- a/pkg/cloudbroker/k8s/delete_master_from_group.go +++ b/pkg/cloudbroker/k8s/delete_master_from_group.go @@ -20,7 +20,7 @@ type DeleteMasterFromGroupRequest struct { // List of Compute IDs of master nodes to delete // Required: true - MasterIDs []string `url:"masterIds" json:"masterIds" validate:"min=1"` + MasterIDs []uint64 `url:"masterIds" json:"masterIds" validate:"min=1"` } // DeleteMasterFromGroup deletes compute from masters group in selected kubernetes cluster diff --git a/pkg/cloudbroker/k8s/models.go b/pkg/cloudbroker/k8s/models.go index fd686b5..ed063bb 100644 --- a/pkg/cloudbroker/k8s/models.go +++ b/pkg/cloudbroker/k8s/models.go @@ -89,6 +89,15 @@ type RecordK8S struct { // Deleted time DeletedTime uint64 `json:"deletedTime"` + // Only external network + ExtnetOnly bool `json:"extnetOnly"` + + // Highly available LB + HighlyAvailableLB bool `json:"highlyAvailableLB"` + + // Address Virtual Internet Protocol + AddressVIP K8SAddressVIP `json:"addressVip"` + // ID ID uint64 `json:"id"` @@ -124,6 +133,18 @@ type RecordK8S struct { // Updated time UpdatedTime uint64 `json:"updatedTime"` + + // With LB + WithLB bool `json:"withLB"` +} + +// Detailed info about address of the Virtual Internet Protocol +type K8SAddressVIP struct { + // Backend IP + BackendIP string `json:"backendIp"` + + // Frontend IP + FrontendIP string `json:"frontendIp"` } // Detailed info about K8S groups diff --git a/pkg/cloudbroker/k8s/worker_add.go b/pkg/cloudbroker/k8s/worker_add.go index d92863f..925fcda 100644 --- a/pkg/cloudbroker/k8s/worker_add.go +++ b/pkg/cloudbroker/k8s/worker_add.go @@ -21,6 +21,10 @@ type WorkerAddRequest struct { // How many worker nodes to add // Required: false Num uint64 `url:"num,omitempty" json:"num,omitempty"` + + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` } // WorkerAdd adds worker nodes to a kubernetes cluster diff --git a/pkg/cloudbroker/k8s/workers_group_add.go b/pkg/cloudbroker/k8s/workers_group_add.go index 6fa5e74..39a468e 100644 --- a/pkg/cloudbroker/k8s/workers_group_add.go +++ b/pkg/cloudbroker/k8s/workers_group_add.go @@ -62,6 +62,10 @@ type WorkersGroupAddRequest struct { // Meta data for working group computes, format YAML "user_data": 1111 // Required: false UserData string `url:"userData,omitempty" json:"userData,omitempty"` + + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` } // GetRAM returns RAM field values diff --git a/pkg/cloudbroker/kvmppc.go b/pkg/cloudbroker/kvmppc.go deleted file mode 100644 index 34d2fcc..0000000 --- a/pkg/cloudbroker/kvmppc.go +++ /dev/null @@ -1,8 +0,0 @@ -package cloudbroker - -import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/kvmppc" - -// Accessing the KVMPPC method group -func (cb *CloudBroker) KVMPPC() *kvmppc.KVMPPC { - return kvmppc.New(cb.client) -} diff --git a/pkg/cloudbroker/kvmppc/create.go b/pkg/cloudbroker/kvmppc/create.go deleted file mode 100644 index 4c5e564..0000000 --- a/pkg/cloudbroker/kvmppc/create.go +++ /dev/null @@ -1,210 +0,0 @@ -package kvmppc - -import ( - "context" - "encoding/json" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -type Interface struct { - // Network type - // Should be one of: - // - VINS - // - EXTNET - NetType string `url:"netType" json:"netType" validate:"required,kvmNetType"` - - // Network ID for connect to, - // for EXTNET - external network ID, - // for VINS - VINS ID, - NetID uint64 `url:"netId" json:"netId" validate:"required"` - - // IP address to assign to this VM when connecting to the specified network - // Required: false - IPAddr string `url:"ipAddr,omitempty" json:"ipAddr,omitempty"` -} - -// DataDisk detailed struct for DataDisks field in CreateRequest, CreateBlankRequest and MassCreateRequest -type DataDisk struct { - // Name for disk - // Required: true - DiskName string `url:"diskName" json:"diskName" validate:"required"` - - // Disk size in GB - // Required: true - Size uint64 `url:"size" json:"size" validate:"required"` - - // Storage endpoint provider ID - // By default the same with boot disk - // Required: false - SepID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` - - // Pool name - // By default will be chosen automatically - // Required: false - Pool string `url:"pool,omitempty" json:"pool,omitempty"` - - // Optional description - // Required: false - Description string `url:"desc,omitempty" json:"desc,omitempty"` - - // Specify image id for create disk from template - // Required: false - ImageID uint64 `url:"imageId,omitempty" json:"imageId,omitempty"` -} - -// CreateRequest struct to create KVM PowerPC VM -type CreateRequest struct { - // ID of the resource group, which will own this VM - // Required: true - RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Name of this VM. - // Must be unique among all VMs (including those in DELETED state) in target resource group - // Required: true - Name string `url:"name" json:"name" validate:"required"` - - // Number CPUs to allocate to this VM - // Required: true - CPU uint64 `url:"cpu" json:"cpu" validate:"required"` - - // Volume of RAM in MB to allocate to this VM - // Required: true - RAM uint64 `url:"ram" json:"ram" validate:"required"` - - // ID of the OS image to base this VM on; - // Could be boot disk image or CD-ROM image - // Required: true - ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` - - // Size of the boot disk in GB - // Required: false - BootDisk uint64 `url:"bootDisk,omitempty" json:"bootDisk,omitempty"` - - // ID of SEP to create boot disk on. - // Uses images SEP ID if not set - // Required: false - SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` - - // Pool to use if SEP ID is set, can be also empty if needed to be chosen by system - // Required: false - Pool string `url:"pool,omitempty" json:"pool,omitempty"` - - // Slice of structs with data disk description. Each disk has parameters: required - diskName, size; optional - sepId, pool, desc and imageId. - // If not specified, compute will be created without disks. - // To create compute without disks, pass initialized empty slice . - // Required: false - DataDisks []DataDisk `url:"-" json:"dataDisks,omitempty" validate:"omitempty,dive"` - - // Slice of structs with net interface description. - // If not specified, compute will be created with default interface from RG. - // To create compute without interfaces, pass initialized empty slice . - // Required: false - Interfaces []Interface `url:"-" json:"interfaces,omitempty" validate:"omitempty,dive"` - - // Input data for cloud-init facility - // Required: false - Userdata string `url:"userdata,omitempty" json:"userdata,omitempty"` - - // Text description of this VM - // Required: false - Description string `url:"desc,omitempty" json:"desc,omitempty"` - - // Start VM upon success - // Required: false - Start bool `url:"start" json:"start"` - - // Stack ID - // Required: false - StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` - - // System name - // Required: false - IS string `url:"IS,omitempty" json:"IS,omitempty"` - - // Compute purpose - // Required: false - IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` -} - -// GetRAM returns RAM field values -func (r CreateRequest) GetRAM() map[string]uint64 { - - res := make(map[string]uint64, 1) - - res["RAM"] = r.RAM - - return res -} - -type wrapperCreateRequest struct { - CreateRequest - Interfaces []string `url:"interfaces,omitempty"` - DataDisks []string `url:"dataDisks,omitempty"` -} - -// Create creates KVM PowerPC VM based on specified OS image -func (k KVMPPC) Create(ctx context.Context, req CreateRequest) (uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - return 0, validators.ValidationErrors(validators.GetErrors(err)) - } - - var interfaces []string - - if req.Interfaces != nil && len(req.Interfaces) != 0 { - interfaces = make([]string, 0, len(req.Interfaces)) - - for i := range req.Interfaces { - b, err := json.Marshal(req.Interfaces[i]) - if err != nil { - return 0, err - } - - interfaces = append(interfaces, string(b)) - } - } else if req.Interfaces != nil && len(req.Interfaces) == 0 { - interfaces = []string{"[]"} - } - - var dataDisks []string - - if req.DataDisks != nil && len(req.DataDisks) != 0 { - dataDisks = make([]string, 0, len(req.DataDisks)) - - for i := range req.DataDisks { - b, err := json.Marshal(req.DataDisks[i]) - if err != nil { - return 0, err - } - - dataDisks = append(dataDisks, string(b)) - } - } - - reqWrapped := wrapperCreateRequest{ - CreateRequest: req, - Interfaces: interfaces, - DataDisks: dataDisks, - } - - url := "/cloudbroker/kvmppc/create" - - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) - 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/kvmppc/create_blank.go b/pkg/cloudbroker/kvmppc/create_blank.go deleted file mode 100644 index e93e50e..0000000 --- a/pkg/cloudbroker/kvmppc/create_blank.go +++ /dev/null @@ -1,135 +0,0 @@ -package kvmppc - -import ( - "context" - "encoding/json" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// CreateBlankRequest struct to create KVM PowerPC VM from scratch -type CreateBlankRequest struct { - // ID of the resource group, which will own this VM - // Required: true - RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Name of this VM. - // Must be unique among all VMs (including those in DELETED state) in target resource group - // Required: true - Name string `url:"name" json:"name" validate:"required"` - - // Number CPUs to allocate to this VM - // Required: true - CPU uint64 `url:"cpu" json:"cpu" validate:"required"` - - // Volume of RAM in MB to allocate to this VM - // Required: true - RAM uint64 `url:"ram" json:"ram" validate:"required"` - - // Size of the boot disk in GB - // Required: true - BootDisk uint64 `url:"bootDisk" json:"bootDisk" validate:"required"` - - // ID of SEP to create boot disk on. - // Uses images SEP ID if not set - // Required: true - SEPID uint64 `url:"sepId" json:"sepId" validate:"required"` - - // Pool to use if SEP ID is set, can be also empty if needed to be chosen by system - // Required: true - Pool string `url:"pool" json:"pool" validate:"required"` - - // Slice of structs with data disk description. Each disk has parameters: required - diskName, size; optional - sepId, pool, desc and imageId. - // If not specified, compute will be created without disks. - // To create compute without disks, pass initialized empty slice . - // Required: false - DataDisks []DataDisk `url:"-" json:"dataDisks,omitempty" validate:"omitempty,dive"` - - // Slice of structs with net interface description. - // If not specified, compute will be created with default interface from RG. - // To create compute without interfaces, pass initialized empty slice . - // Required: false - Interfaces []Interface `url:"-" json:"interfaces,omitempty" validate:"omitempty,dive"` - - // Text description of this VM - // Required: false - Description string `url:"desc,omitempty" json:"desc,omitempty"` -} - -// GetRAM returns RAM field values -func (r CreateBlankRequest) GetRAM() map[string]uint64 { - - res := make(map[string]uint64, 1) - - res["RAM"] = r.RAM - - return res -} - -type wrapperCreateBlankRequest struct { - CreateBlankRequest - Interfaces []string `url:"interfaces,omitempty"` - DataDisks []string `url:"dataDisks,omitempty"` -} - -// CreateBlank creates KVM PowerPC VM from scratch -func (k KVMPPC) CreateBlank(ctx context.Context, req CreateBlankRequest) (uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - return 0, validators.ValidationErrors(validators.GetErrors(err)) - } - - var interfaces []string - - if req.Interfaces != nil && len(req.Interfaces) != 0 { - interfaces = make([]string, 0, len(req.Interfaces)) - - for i := range req.Interfaces { - b, err := json.Marshal(req.Interfaces[i]) - if err != nil { - return 0, err - } - - interfaces = append(interfaces, string(b)) - } - } else if req.Interfaces != nil && len(req.Interfaces) == 0 { - interfaces = []string{"[]"} - } - - var dataDisks []string - - if req.DataDisks != nil && len(req.DataDisks) != 0 { - dataDisks = make([]string, 0, len(req.DataDisks)) - - for i := range req.DataDisks { - b, err := json.Marshal(req.DataDisks[i]) - if err != nil { - return 0, err - } - - dataDisks = append(dataDisks, string(b)) - } - } - - reqWrapped := wrapperCreateBlankRequest{ - CreateBlankRequest: req, - Interfaces: interfaces, - DataDisks: dataDisks, - } - - url := "/cloudbroker/kvmppc/createBlank" - - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) - 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/kvmppc/kvmppc.go b/pkg/cloudbroker/kvmppc/kvmppc.go deleted file mode 100644 index ecd838f..0000000 --- a/pkg/cloudbroker/kvmppc/kvmppc.go +++ /dev/null @@ -1,16 +0,0 @@ -// API to manage KVM PowerPC compute instances (PPC VMs) -package kvmppc - -import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" - -// Structure for creating request to KVMPPC -type KVMPPC struct { - client interfaces.Caller -} - -// Builder for KVMPPC endpoints -func New(client interfaces.Caller) *KVMPPC { - return &KVMPPC{ - client: client, - } -} diff --git a/pkg/cloudbroker/kvmppc/mass_create.go b/pkg/cloudbroker/kvmppc/mass_create.go deleted file mode 100644 index 2375a8a..0000000 --- a/pkg/cloudbroker/kvmppc/mass_create.go +++ /dev/null @@ -1,156 +0,0 @@ -package kvmppc - -import ( - "context" - "encoding/json" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// MassCreateRequest struct for mass create KVM PowerPC -type MassCreateRequest struct { - // ID of the resource group, which will own this VM - // Required: true - RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Name of this VM. - // Must be unique among all VMs (including those in DELETED state) in target resource group - // Required: true - Name string `url:"name" json:"name" validate:"required"` - - // Number of VMs - // Required: true - Count uint64 `url:"count" json:"count" validate:"required"` - - // Number CPUs to allocate to this VM - // Required: true - CPU uint64 `url:"cpu" json:"cpu" validate:"required"` - - // Volume of RAM in MB to allocate to this VM - // Required: true - RAM uint64 `url:"ram" json:"ram" validate:"required"` - - // Image ID - // Required: true - ImageID uint64 `url:"imageId" json:"imageId" validate:"required"` - - // Size of the boot disk in GB - // Required: false - BootDisk uint64 `url:"bootDisk,omitempty" json:"bootDisk,omitempty"` - - // ID of SEP to create boot disk on. - // Uses images SEP ID if not set - // Required: false - SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` - - // Pool to use if SEP ID is set, can be also empty if needed to be chosen by system - // Required: false - Pool string `url:"pool,omitempty" json:"pool,omitempty"` - - // Slice of structs with data disk description. Each disk has parameters: required - diskName, size; optional - sepId, pool, desc and imageId. - // If not specified, compute will be created without disks. - // To create compute without disks, pass initialized empty slice . - // Required: false - DataDisks []DataDisk `url:"-" json:"dataDisks,omitempty" validate:"omitempty,dive"` - - // Slice of structs with net interface description. - // If not specified, compute will be created with default interface from RG. - // To create compute without interfaces, pass initialized empty slice. - // Required: false - Interfaces []Interface `url:"-" json:"interfaces,omitempty" validate:"omitempty,dive"` - - // Input data for cloud-init facility - // Required: false - UserData string `url:"userdata,omitempty" json:"userdata,omitempty"` - - // Text description of this VM - // Required: false - Description string `url:"desc,omitempty" json:"desc,omitempty"` - - // Start after create of not - // Required: false - Start bool `url:"start" json:"start"` - - // Reason to action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` -} - -// GetRAM returns RAM field values -func (r MassCreateRequest) GetRAM() map[string]uint64 { - - res := make(map[string]uint64, 1) - - res["RAM"] = r.RAM - - return res -} - -type wrapperMassCreateRequest struct { - MassCreateRequest - Interfaces []string `url:"interfaces,omitempty"` - DataDisks []string `url:"dataDisks,omitempty"` -} - -// MassCreate creates KVM PPC computes based on specified OS image -func (k KVMPPC) MassCreate(ctx context.Context, req MassCreateRequest) ([]uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - return nil, validators.ValidationErrors(validators.GetErrors(err)) - } - - var interfaces []string - - if req.Interfaces != nil && len(req.Interfaces) != 0 { - interfaces = make([]string, 0, len(req.Interfaces)) - - for i := range req.Interfaces { - b, err := json.Marshal(req.Interfaces[i]) - if err != nil { - return nil, err - } - - interfaces = append(interfaces, string(b)) - } - } else if req.Interfaces != nil && len(req.Interfaces) == 0 { - interfaces = []string{"[]"} - } - - var dataDisks []string - - if req.DataDisks != nil && len(req.DataDisks) != 0 { - dataDisks = make([]string, 0, len(req.DataDisks)) - - for i := range req.DataDisks { - b, err := json.Marshal(req.DataDisks[i]) - if err != nil { - return nil, err - } - - dataDisks = append(dataDisks, string(b)) - } - } - - reqWrapped := wrapperMassCreateRequest{ - MassCreateRequest: req, - Interfaces: interfaces, - DataDisks: dataDisks, - } - - url := "/cloudbroker/kvmppc/massCreate" - - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) - if err != nil { - return nil, err - } - - computes := make([]uint64, 0) - - err = json.Unmarshal(res, &computes) - if err != nil { - return nil, err - } - - return computes, nil -} diff --git a/pkg/cloudbroker/kvmx86/create.go b/pkg/cloudbroker/kvmx86/create.go index e5729a5..899b320 100644 --- a/pkg/cloudbroker/kvmx86/create.go +++ b/pkg/cloudbroker/kvmx86/create.go @@ -15,6 +15,7 @@ type Interface struct { // - VINS // - EXTNET // - VFNIC + // - DPDK NetType string `url:"netType" json:"netType" validate:"required,kvmx86NetType"` // Network ID for connect to, @@ -154,14 +155,14 @@ type CreateRequest struct { // Default: false CPUPin bool `url:"cpupin" json:"cpupin"` + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` + // Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node // Required: false // Default: false HPBacked bool `url:"hpBacked" json:"hpBacked"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // GetRAM returns RAM field values diff --git a/pkg/cloudbroker/kvmx86/create_blank.go b/pkg/cloudbroker/kvmx86/create_blank.go index 8660560..cc4039f 100644 --- a/pkg/cloudbroker/kvmx86/create_blank.go +++ b/pkg/cloudbroker/kvmx86/create_blank.go @@ -64,6 +64,10 @@ type CreateBlankRequest struct { //Type of compute Stateful (KVM_X86) or Stateless (SVA_KVM_X86) // Required: false Driver string `url:"driver,omitempty" json:"driver,omitempty"` + + // Type of the emulated system, Q35 or i440fx + // Required: false + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` } // GetRAM returns RAM field values diff --git a/pkg/cloudbroker/kvmx86/mass_create.go b/pkg/cloudbroker/kvmx86/mass_create.go index 3b43cf7..f496cbf 100644 --- a/pkg/cloudbroker/kvmx86/mass_create.go +++ b/pkg/cloudbroker/kvmx86/mass_create.go @@ -76,9 +76,14 @@ type MassCreateRequest struct { // Required: false Start bool `url:"start" json:"start"` - // Reason to action + // Type of the emulated system, Q35 or i440fx // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` + Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"` +} + +type asyncWrapperMassCreateRequest struct { + wrapperMassCreateRequest + AsyncMode bool `url:"asyncMode"` } // GetRAM returns RAM field values @@ -142,9 +147,11 @@ func (k KVMX86) MassCreate(ctx context.Context, req MassCreateRequest) ([]uint64 DataDisks: dataDisks, } + finalReq := asyncWrapperMassCreateRequest{wrapperMassCreateRequest: reqWrapped, AsyncMode: false} + url := "/cloudbroker/kvmx86/massCreate" - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, finalReq) if err != nil { return nil, err } @@ -158,3 +165,67 @@ func (k KVMX86) MassCreate(ctx context.Context, req MassCreateRequest) ([]uint64 return computes, nil } + +// MassCreate creates KVM x86 computes based on specified OS image in async mode +func (k KVMX86) MassCreateAsync(ctx context.Context, req MassCreateRequest) (string, error) { + err := validators.ValidateRequest(req) + if err != nil { + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + var interfaces []string + + if req.Interfaces != nil && len(req.Interfaces) != 0 { + interfaces = make([]string, 0, len(req.Interfaces)) + + for i := range req.Interfaces { + b, err := json.Marshal(req.Interfaces[i]) + if err != nil { + return "", err + } + + interfaces = append(interfaces, string(b)) + } + } else if req.Interfaces != nil && len(req.Interfaces) == 0 { + interfaces = []string{"[]"} + } + + var dataDisks []string + + if req.DataDisks != nil && len(req.DataDisks) != 0 { + dataDisks = make([]string, 0, len(req.DataDisks)) + + for i := range req.DataDisks { + b, err := json.Marshal(req.DataDisks[i]) + if err != nil { + return "", err + } + + dataDisks = append(dataDisks, string(b)) + } + } + + reqWrapped := wrapperMassCreateRequest{ + MassCreateRequest: req, + Interfaces: interfaces, + DataDisks: dataDisks, + } + + finalReq := asyncWrapperMassCreateRequest{wrapperMassCreateRequest: reqWrapped, AsyncMode: true} + + url := "/cloudbroker/kvmx86/massCreate" + + res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, finalReq) + if err != nil { + return "", err + } + + var computes string + + err = json.Unmarshal(res, &computes) + if err != nil { + return "", err + } + + return computes, nil +} diff --git a/pkg/cloudbroker/lb/create.go b/pkg/cloudbroker/lb/create.go index cb91c9c..57596f2 100644 --- a/pkg/cloudbroker/lb/create.go +++ b/pkg/cloudbroker/lb/create.go @@ -22,12 +22,16 @@ type CreateRequest struct { Name string `url:"name" json:"name" validate:"required"` // External network to connect this load balancer to - // Required: false - ExtNetID uint64 `url:"extnetId" json:"extnetId"` + // Required: true + ExtNetID int64 `url:"extnetId" json:"extnetId" validate:"required"` // Internal network (VINS) to connect this load balancer to - // Required: false - VINSID uint64 `url:"vinsId" json:"vinsId"` + // Required: true + VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` + + // Start now Load balancer + // Required: true + Start bool `url:"start" json:"start" validate:"required"` // Custom sysctl values for Load Balancer instance. Applied on boot // Required: false @@ -37,10 +41,6 @@ type CreateRequest struct { // Required: false HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"` - // Start now Load balancer - // Required: false - Start bool `url:"start" json:"start"` - // Text description of this load balancer // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` diff --git a/pkg/cloudbroker/lb/filter.go b/pkg/cloudbroker/lb/filter.go index 25022e0..79eb75b 100644 --- a/pkg/cloudbroker/lb/filter.go +++ b/pkg/cloudbroker/lb/filter.go @@ -26,7 +26,7 @@ func (ll ListLB) FilterByName(name string) ListLB { } // FilterByExtNetID returns ListLB with specified ExtNetID. -func (ll ListLB) FilterByExtNetID(extNetID uint64) ListLB { +func (ll ListLB) FilterByExtNetID(extNetID int64) ListLB { predicate := func(rlb ItemLBList) bool { return rlb.ExtNetID == extNetID } diff --git a/pkg/cloudbroker/lb/models.go b/pkg/cloudbroker/lb/models.go index d91c54b..11382cd 100644 --- a/pkg/cloudbroker/lb/models.go +++ b/pkg/cloudbroker/lb/models.go @@ -172,7 +172,7 @@ type RecordLB struct { DPAPIUser string `json:"dpApiUser"` // External network ID - ExtNetID uint64 `json:"extnetId"` + ExtNetID int64 `json:"extnetId"` // FrontendHAIP FrontendHAIP string `json:"frontendHAIP"` @@ -268,7 +268,7 @@ type ItemLBList struct { DPAPIUser string `json:"dpApiUser"` // External network ID - ExtNetID uint64 `json:"extnetId"` + ExtNetID int64 `json:"extnetId"` // FrontendHAIP FrontendHAIP string `json:"frontendHAIP"` diff --git a/pkg/cloudbroker/node/enable.go b/pkg/cloudbroker/node/enable.go index 315d7e9..9bae924 100644 --- a/pkg/cloudbroker/node/enable.go +++ b/pkg/cloudbroker/node/enable.go @@ -17,11 +17,22 @@ type EnableRequest struct { // Required: false Message string `url:"message,omitempty" json:"message,omitempty"` + // Do not check locks, iscsi-sessions or disk-present + // Default: true + // Required: false + Force interface{} `url:"force" json:"force" validate:"isBool" ` + // Reason // Required: false Reason string `url:"reason,omitempty" json:"reason,omitempty"` } +type wrapperEnableRequest struct { + EnableRequest + + AsyncMode bool `url:"asyncMode"` +} + // Enable enables node from maintenance status to enabled func (n Node) Enable(ctx context.Context, req EnableRequest) (string, error) { err := validators.ValidateRequest(req) @@ -29,9 +40,44 @@ func (n Node) Enable(ctx context.Context, req EnableRequest) (string, error) { return "", validators.ValidationErrors(validators.GetErrors(err)) } + if req.Force == nil { + req.Force = true + } + + reqWrapped := wrapperEnableRequest{ + EnableRequest: req, + AsyncMode: false, + } + + url := "/cloudbroker/node/enable" + + res, err := n.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + if err != nil { + return "", err + } + + return string(res), nil +} + +// EnableAsync enables node from maintenance status to enabled with AsyncMode +func (n Node) EnableAsync(ctx context.Context, req EnableRequest) (string, error) { + err := validators.ValidateRequest(req) + if err != nil { + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + if req.Force == nil { + req.Force = true + } + + reqWrapped := wrapperEnableRequest{ + EnableRequest: req, + AsyncMode: true, + } + url := "/cloudbroker/node/enable" - res, err := n.client.DecortApiCall(ctx, http.MethodPost, url, req) + res, err := n.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) if err != nil { return "", err } diff --git a/pkg/cloudbroker/node/enable_nodes.go b/pkg/cloudbroker/node/enable_nodes.go index d3fe2cf..a8dffd4 100644 --- a/pkg/cloudbroker/node/enable_nodes.go +++ b/pkg/cloudbroker/node/enable_nodes.go @@ -16,10 +16,6 @@ type EnableNodesRequest struct { // Message // Required: false Message string `url:"message,omitempty" json:"message,omitempty"` - - // Reason - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // EnableNodes enables nodes from maintenance status to enabled diff --git a/pkg/cloudbroker/rg/access_grant.go b/pkg/cloudbroker/rg/access_grant.go index bba0605..747e94e 100644 --- a/pkg/cloudbroker/rg/access_grant.go +++ b/pkg/cloudbroker/rg/access_grant.go @@ -25,10 +25,6 @@ type AccessGrantRequest struct { // - "ARCXDU" // Required: true Right string `url:"right" json:"right" validate:"accessType"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // AccessGrant grants user or group access to the resource group as specified diff --git a/pkg/cloudbroker/rg/access_revoke.go b/pkg/cloudbroker/rg/access_revoke.go index 7e63e18..01b5d8f 100644 --- a/pkg/cloudbroker/rg/access_revoke.go +++ b/pkg/cloudbroker/rg/access_revoke.go @@ -17,10 +17,6 @@ type AccessRevokeRequest struct { // User or group name to revoke access // Required: true User string `url:"user" json:"user" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // AccessRevoke revokes specified user or group access from the resource group diff --git a/pkg/cloudbroker/rg/create.go b/pkg/cloudbroker/rg/create.go index 949e7b7..9d3a8dd 100644 --- a/pkg/cloudbroker/rg/create.go +++ b/pkg/cloudbroker/rg/create.go @@ -56,18 +56,10 @@ type CreateRequest struct { // Required: false DefNet string `url:"def_net,omitempty" json:"def_net,omitempty" validate:"omitempty,rgDefNet"` - // Private network IP CIDR if default network PRIVATE - // Required: false - IPCIDR string `url:"ipcidr,omitempty" json:"ipcidr,omitempty"` - // Text description of this resource group // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` - // External network ID // Required: false ExtNetID uint64 `url:"extNetId,omitempty" json:"extNetId,omitempty"` diff --git a/pkg/cloudbroker/rg/delete.go b/pkg/cloudbroker/rg/delete.go index 725846f..6ab57a0 100644 --- a/pkg/cloudbroker/rg/delete.go +++ b/pkg/cloudbroker/rg/delete.go @@ -22,10 +22,6 @@ type DeleteRequest struct { // Otherwise, they will be placed into recycle bin and could be restored later within recycle bin's purge period // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Delete deletes resource group diff --git a/pkg/cloudbroker/rg/disable.go b/pkg/cloudbroker/rg/disable.go index 5b39c3e..515e8a5 100644 --- a/pkg/cloudbroker/rg/disable.go +++ b/pkg/cloudbroker/rg/disable.go @@ -13,10 +13,6 @@ type DisableRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Disable disables resource group by ID diff --git a/pkg/cloudbroker/rg/enable.go b/pkg/cloudbroker/rg/enable.go index 0dde32c..17a169a 100644 --- a/pkg/cloudbroker/rg/enable.go +++ b/pkg/cloudbroker/rg/enable.go @@ -13,10 +13,6 @@ type EnableRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Enable enables resource group by ID diff --git a/pkg/cloudbroker/rg/get.go b/pkg/cloudbroker/rg/get.go index 01de709..18db8b3 100644 --- a/pkg/cloudbroker/rg/get.go +++ b/pkg/cloudbroker/rg/get.go @@ -13,10 +13,6 @@ type GetRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Get gets current configuration of the resource group as a RecordRG struct diff --git a/pkg/cloudbroker/rg/mass_delete.go b/pkg/cloudbroker/rg/mass_delete.go index a6f42fd..b0b6b8b 100644 --- a/pkg/cloudbroker/rg/mass_delete.go +++ b/pkg/cloudbroker/rg/mass_delete.go @@ -23,10 +23,6 @@ type MassDeleteRequest struct { // restored later within recycle bins purge period // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassDelete starts jobs to delete several resource groups diff --git a/pkg/cloudbroker/rg/mass_disable.go b/pkg/cloudbroker/rg/mass_disable.go index c51d4a4..000dc66 100644 --- a/pkg/cloudbroker/rg/mass_disable.go +++ b/pkg/cloudbroker/rg/mass_disable.go @@ -12,10 +12,6 @@ type MassDisableRequest struct { // IDs of the resource groups // Required: true RGIDs []uint64 `url:"rgIds" json:"rgIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassDisable start jobs to disable several resource groups diff --git a/pkg/cloudbroker/rg/mass_enable.go b/pkg/cloudbroker/rg/mass_enable.go index bd8080d..e178e6a 100644 --- a/pkg/cloudbroker/rg/mass_enable.go +++ b/pkg/cloudbroker/rg/mass_enable.go @@ -12,10 +12,6 @@ type MassEnableRequest struct { // IDs of the resource groups // Required: true RGIDs []uint64 `url:"rgIds" json:"rgIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassEnable start jobs to enable several resource groups diff --git a/pkg/cloudbroker/rg/remove_def_net.go b/pkg/cloudbroker/rg/remove_def_net.go new file mode 100644 index 0000000..6763243 --- /dev/null +++ b/pkg/cloudbroker/rg/remove_def_net.go @@ -0,0 +1,38 @@ +package rg + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// RemoveDefNetRequest struct to remove default network +type RemoveDefNetRequest struct { + // Resource group ID + // Required: true + RGID uint64 `url:"rgId" json:"rgId" validate:"required"` +} + +// RemoveDefNet removes default network from resource group +func (r RG) RemoveDefNet(ctx context.Context, req RemoveDefNetRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/rg/removeDefNet" + + res, err := r.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/rg/restore.go b/pkg/cloudbroker/rg/restore.go index 81dc927..e6fd3bc 100644 --- a/pkg/cloudbroker/rg/restore.go +++ b/pkg/cloudbroker/rg/restore.go @@ -13,10 +13,6 @@ type RestoreRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Restore restores resource group from recycle bin diff --git a/pkg/cloudbroker/rg/set_def_net.go b/pkg/cloudbroker/rg/set_def_net.go index 0a1f720..24d2f83 100644 --- a/pkg/cloudbroker/rg/set_def_net.go +++ b/pkg/cloudbroker/rg/set_def_net.go @@ -24,10 +24,6 @@ type SetDefNetRequest struct { // Network ID // Required: false NetID uint64 `url:"netId,omitempty" json:"netId,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // SetDefNet sets default network for attach associated virtual machines diff --git a/pkg/cloudbroker/rg/update.go b/pkg/cloudbroker/rg/update.go index 488a1e5..77c71b5 100644 --- a/pkg/cloudbroker/rg/update.go +++ b/pkg/cloudbroker/rg/update.go @@ -46,13 +46,14 @@ type UpdateRequest struct { // Required: false RegisterComputes bool `url:"registerComputes,omitempty" json:"registerComputes,omitempty"` - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` - // List of strings with pools i.e.: ["sep1_poolName1", "sep2_poolName2", etc] // Required: false UniqPools []string `url:"uniqPools,omitempty" json:"uniqPools,omitempty"` + + // if True the field will be cleared + // Default: false + // Required: false + ClearUniqPools bool `url:"clearUniqPools" json:"clearUniqPools"` } // Update updates resource group diff --git a/pkg/cloudbroker/rg/usage.go b/pkg/cloudbroker/rg/usage.go index 31d2d08..014f617 100644 --- a/pkg/cloudbroker/rg/usage.go +++ b/pkg/cloudbroker/rg/usage.go @@ -13,10 +13,6 @@ type UsageRequest struct { // Resource group ID // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Usage gets report resource usage on the resource group diff --git a/pkg/cloudbroker/sep/shared_lock_start.go b/pkg/cloudbroker/sep/shared_lock_start.go new file mode 100644 index 0000000..096e253 --- /dev/null +++ b/pkg/cloudbroker/sep/shared_lock_start.go @@ -0,0 +1,87 @@ +package sep + +import ( + "context" + "net/http" + "strconv" + "strings" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// SharedLockStartRequest struct to start shared locks +type SharedLockStartRequest struct { + // Storage endpoint provider ID + // Required: true + SEPID uint64 `url:"sep_id" json:"sep_id" validate:"required"` + + // List of node IDs for start locks + // Required: false + Nodes []uint64 `url:"nodes,omitempty" json:"nodes,omitempty"` + + // List of pool names for start locks + // Required: false + VGNames []string `url:"vg_names,omitempty" json:"vg_names,omitempty"` + + // If there are LOCKs, ignore them + // Default: false + // Required: false + IgnoreStartedLock bool `url:"ignore_started_lock" json:"ignore_started_lock"` +} + +type wrapperSharedLockStartRequest struct { + SharedLockStartRequest + + AsyncMode bool `url:"sync"` +} + +// SharedLockStart start shared locks without AsyncMode +func (s SEP) SharedLockStart(ctx context.Context, req SharedLockStartRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSharedLockStartRequest{ + SharedLockStartRequest: req, + AsyncMode: false, + } + + url := "/cloudbroker/sep/sharedLockStart" + + res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + if err != nil { + return false, err + } + + result, err := strconv.ParseBool(string(res)) + if err != nil { + return false, err + } + + return result, nil +} + +// SharedLockStartAsync start shared locks with AsyncMode +func (s SEP) SharedLockStartAsync(ctx context.Context, req SharedLockStartRequest) (string, error) { + err := validators.ValidateRequest(req) + if err != nil { + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSharedLockStartRequest{ + SharedLockStartRequest: req, + AsyncMode: true, + } + + url := "/cloudbroker/sep/sharedLockStart" + + res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + if err != nil { + return "", err + } + + result := strings.ReplaceAll(string(res), "\"", "") + + return result, nil +} diff --git a/pkg/cloudbroker/sep/shared_lock_stop.go b/pkg/cloudbroker/sep/shared_lock_stop.go new file mode 100644 index 0000000..4f7c37b --- /dev/null +++ b/pkg/cloudbroker/sep/shared_lock_stop.go @@ -0,0 +1,82 @@ +package sep + +import ( + "context" + "net/http" + "strconv" + "strings" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// SharedLockStopRequest struct to stop shared locks +type SharedLockStopRequest struct { + // Storage endpoint provider ID + // Required: true + SEPID uint64 `url:"sep_id" json:"sep_id" validate:"required"` + + // List of node IDs for stop locks + // Required: false + Nodes []uint64 `url:"nodes,omitempty" json:"nodes,omitempty"` + + // List of pool names for stop locks + // Required: false + VGNames []string `url:"vg_names,omitempty" json:"vg_names,omitempty"` +} + +type wrapperSharedLockStopRequest struct { + SharedLockStopRequest + + AsyncMode bool `url:"sync"` +} + +// SharedLockStop stop shared locks without AsyncMode +func (s SEP) SharedLockStop(ctx context.Context, req SharedLockStopRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSharedLockStopRequest{ + SharedLockStopRequest: req, + AsyncMode: false, + } + + url := "/cloudbroker/sep/sharedLockStop" + + res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + if err != nil { + return false, err + } + + result, err := strconv.ParseBool(string(res)) + if err != nil { + return false, err + } + + return result, nil +} + +// SharedLockStopAsync stop shared locks with AsyncMode +func (s SEP) SharedLockStopAsync(ctx context.Context, req SharedLockStopRequest) (string, error) { + err := validators.ValidateRequest(req) + if err != nil { + return "", validators.ValidationErrors(validators.GetErrors(err)) + } + + reqWrapped := wrapperSharedLockStopRequest{ + SharedLockStopRequest: req, + AsyncMode: true, + } + + url := "/cloudbroker/sep/sharedLockStop" + + res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + if err != nil { + return "", err + } + + result := strings.ReplaceAll(string(res), "\"", "") + + return result, nil +} diff --git a/pkg/cloudbroker/stack/set_cpu_allocation_ratio.go b/pkg/cloudbroker/stack/set_cpu_allocation_ratio.go index e23e494..e9d06f9 100644 --- a/pkg/cloudbroker/stack/set_cpu_allocation_ratio.go +++ b/pkg/cloudbroker/stack/set_cpu_allocation_ratio.go @@ -16,7 +16,7 @@ type SetCpuAllocationRatioRequest struct { // Allocation ratio (zero or positive value) // Required: true - Ratio float64 `url:"ratio" json:"ratio"` + Ratio float64 `url:"ratio" json:"ratio" validate:"required"` } // SetCpuAllocationRatio set CPU allocation ratio diff --git a/pkg/cloudbroker/stack/set_mem_allocation_ratio.go b/pkg/cloudbroker/stack/set_mem_allocation_ratio.go index 5e6eabf..d81c231 100644 --- a/pkg/cloudbroker/stack/set_mem_allocation_ratio.go +++ b/pkg/cloudbroker/stack/set_mem_allocation_ratio.go @@ -16,7 +16,7 @@ type SetMemAllocationRatioRequest struct { // Allocation ratio (zero or positive value) // Required: true - Ratio float64 `url:"ratio" json:"ratio"` + Ratio float64 `url:"ratio" json:"ratio" validate:"required"` } // SetMemAllocationRatio set memory allocation ratio diff --git a/pkg/cloudbroker/user/models.go b/pkg/cloudbroker/user/models.go index 940463a..a928088 100644 --- a/pkg/cloudbroker/user/models.go +++ b/pkg/cloudbroker/user/models.go @@ -106,6 +106,9 @@ type ItemAudit struct { // StatusCode StatusCode StatusCode `json:"Status Code"` + // Guid + GUID string `json:"Guid"` + // Time Time float64 `json:"Time"` } @@ -183,7 +186,6 @@ type CloudAPIEndpoints struct { Image []string `json:"image,omitempty"` K8CI []string `json:"k8ci,omitempty"` K8S []string `json:"k8s,omitempty"` - KVMPPC []string `json:"kvmppc,omitempty"` KVMX86 []string `json:"kvmx86,omitempty"` LB []string `json:"lb,omitempty"` Loactions []string `json:"locations,omitempty"` @@ -227,7 +229,6 @@ type CloudBrokerEndpoints struct { Job []string `json:"job,omitempty"` K8CI []string `json:"k8ci,omitempty"` K8S []string `json:"k8s,omitempty"` - KVMPPC []string `json:"kvmppc,omitempty"` KVMX86 []string `json:"kvmx86,omitempty"` LB []string `json:"lb,omitempty"` Machine []string `json:"machine,omitempty"` diff --git a/pkg/cloudbroker/vins/create_in_account.go b/pkg/cloudbroker/vins/create_in_account.go index 212c1e2..eb7387a 100644 --- a/pkg/cloudbroker/vins/create_in_account.go +++ b/pkg/cloudbroker/vins/create_in_account.go @@ -53,10 +53,6 @@ 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"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } type wrapperCreateRequestInAcc struct { diff --git a/pkg/cloudbroker/vins/create_in_rg.go b/pkg/cloudbroker/vins/create_in_rg.go index 29f3e7f..7a01e85 100644 --- a/pkg/cloudbroker/vins/create_in_rg.go +++ b/pkg/cloudbroker/vins/create_in_rg.go @@ -47,10 +47,6 @@ 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"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } type wrapperCreateRequestInRG struct { diff --git a/pkg/cloudbroker/vins/delete.go b/pkg/cloudbroker/vins/delete.go index 6c60455..73925ff 100644 --- a/pkg/cloudbroker/vins/delete.go +++ b/pkg/cloudbroker/vins/delete.go @@ -25,10 +25,6 @@ type DeleteRequest struct { // Otherwise, they will be placed into recycle bin and could be restored later within the recycle bin's purge period // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Delete deletes VINS diff --git a/pkg/cloudbroker/vins/disable.go b/pkg/cloudbroker/vins/disable.go index 7da0144..e596789 100644 --- a/pkg/cloudbroker/vins/disable.go +++ b/pkg/cloudbroker/vins/disable.go @@ -13,10 +13,6 @@ type DisableRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Disable disables VINS by ID diff --git a/pkg/cloudbroker/vins/enable.go b/pkg/cloudbroker/vins/enable.go index bbf83a7..8595ef4 100644 --- a/pkg/cloudbroker/vins/enable.go +++ b/pkg/cloudbroker/vins/enable.go @@ -13,10 +13,6 @@ type EnableRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Enable enables VINS by ID diff --git a/pkg/cloudbroker/vins/extnet_connect.go b/pkg/cloudbroker/vins/extnet_connect.go index 38ce70e..3d4b6d1 100644 --- a/pkg/cloudbroker/vins/extnet_connect.go +++ b/pkg/cloudbroker/vins/extnet_connect.go @@ -21,10 +21,6 @@ type ExtNetConnectRequest struct { // Directly set IP address // Required: false IP string `url:"ip,omitempty" json:"ip,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // ExtNetConnect connects VINS to external network diff --git a/pkg/cloudbroker/vins/extnet_disconnect.go b/pkg/cloudbroker/vins/extnet_disconnect.go index 0fc9928..ea967a6 100644 --- a/pkg/cloudbroker/vins/extnet_disconnect.go +++ b/pkg/cloudbroker/vins/extnet_disconnect.go @@ -13,10 +13,6 @@ type ExtNetDisconnectRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // ExtNetDisconnect disconnects VINS from external network diff --git a/pkg/cloudbroker/vins/get.go b/pkg/cloudbroker/vins/get.go index 77f2b15..58f61a6 100644 --- a/pkg/cloudbroker/vins/get.go +++ b/pkg/cloudbroker/vins/get.go @@ -13,10 +13,6 @@ type GetRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Get gets information about VINS by ID as a RecordVINS struct diff --git a/pkg/cloudbroker/vins/ip_reserve.go b/pkg/cloudbroker/vins/ip_reserve.go index b828984..4d327e0 100644 --- a/pkg/cloudbroker/vins/ip_reserve.go +++ b/pkg/cloudbroker/vins/ip_reserve.go @@ -37,10 +37,6 @@ type IPReserveRequest struct { // Ignored for other types // Required: false ComputeID uint64 `url:"computeId,omitempty" json:"computeId,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // IPReserve creates reservation on ViNS DHCP diff --git a/pkg/cloudbroker/vins/list_deleted.go b/pkg/cloudbroker/vins/list_deleted.go index 0bd28a5..b414e26 100644 --- a/pkg/cloudbroker/vins/list_deleted.go +++ b/pkg/cloudbroker/vins/list_deleted.go @@ -30,6 +30,10 @@ type ListDeletedRequest struct { // Required: false ExtIP string `url:"extIp,omitempty" json:"extIp,omitempty"` + // Find by VNF Device id + // Required: false + VNFDevId uint64 `url:"vnfdevId,omitempty" json:"vnfdevId,omitempty"` + // Sort by one of supported fields, format +|-(field) // Required: false SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"` diff --git a/pkg/cloudbroker/vins/mass_delete.go b/pkg/cloudbroker/vins/mass_delete.go index d84efb5..f783270 100644 --- a/pkg/cloudbroker/vins/mass_delete.go +++ b/pkg/cloudbroker/vins/mass_delete.go @@ -25,10 +25,6 @@ type MassDeleteRequest struct { // within the recycle bins purge period // Required: false Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassDelete start jobs to delete several VINSes diff --git a/pkg/cloudbroker/vins/mass_disable.go b/pkg/cloudbroker/vins/mass_disable.go index 7d9d5f8..faf370f 100644 --- a/pkg/cloudbroker/vins/mass_disable.go +++ b/pkg/cloudbroker/vins/mass_disable.go @@ -12,10 +12,6 @@ type MassDisableRequest struct { // VINS IDs // Required: true VINSIDs []uint64 `url:"vinsIds" json:"vinsIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassDisable start jobs to disable several VINSes diff --git a/pkg/cloudbroker/vins/mass_enable.go b/pkg/cloudbroker/vins/mass_enable.go index df8b7a8..4224c40 100644 --- a/pkg/cloudbroker/vins/mass_enable.go +++ b/pkg/cloudbroker/vins/mass_enable.go @@ -12,10 +12,6 @@ type MassEnableRequest struct { // VINS IDs // Required: true VINSIDs []uint64 `url:"vinsIds" json:"vinsIds" validate:"min=1"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // MassEnable start jobs to enable several VINSes diff --git a/pkg/cloudbroker/vins/models.go b/pkg/cloudbroker/vins/models.go index f5cdfcd..3654170 100644 --- a/pkg/cloudbroker/vins/models.go +++ b/pkg/cloudbroker/vins/models.go @@ -107,6 +107,9 @@ type QOS struct { // Main information about interface type ItemInterface struct { + // Bus number + BusNumber uint64 `json:"bus_number"` + // Connection ID ConnID uint64 `json:"connId"` @@ -134,6 +137,12 @@ type ItemInterface struct { // MAC MAC string `json:"mac"` + // Maximum transmission unit + MTU uint64 `json:"mtu"` + + // Libvirt Settings + LibvirtSettings LibvirtSettings `json:"libvirtSettings"` + // Name Name string `json:"name"` @@ -462,6 +471,11 @@ type RecordVNFs struct { NAT RecordNAT `json:"NAT"` } +type Computes struct { + ID uint64 `json:"id"` + Name string `json:"name"` +} + // Detailed information about VINS type RecordVINS struct { // VNF device @@ -473,6 +487,9 @@ type RecordVINS struct { // Account name AccountName string `json:"accountName"` + // Computes + Computes []Computes `json:"computes"` + // Created by CreatedBy string `json:"createdBy"` @@ -558,6 +575,30 @@ type RecordVINS struct { VXLANID uint64 `json:"vxlanId"` } +// Information about libvirt settings +type LibvirtSettings struct { + // TX mode + TXMode string `json:"txmode"` + + // IO event + IOEventFD string `json:"ioeventfd"` + + // Event ID + EventIDx string `json:"event_idx"` + + // Number of queues + Queues uint64 `json:"queues"` + + // RX queue size + RXQueueSize uint64 `json:"rx_queue_size"` + + // TX queue size + TXQueueSize uint64 `json:"tx_queue_size"` + + // GUID + GUID string `json:"guid"` +} + // Main information about IP type ItemIP struct { // IP diff --git a/pkg/cloudbroker/vins/nat_rule_add.go b/pkg/cloudbroker/vins/nat_rule_add.go index 8badc62..710be09 100644 --- a/pkg/cloudbroker/vins/nat_rule_add.go +++ b/pkg/cloudbroker/vins/nat_rule_add.go @@ -36,10 +36,6 @@ type NATRuleAddRequest struct { // - "udp" // Required: false Proto string `url:"proto,omitempty" json:"proto,omitempty" validate:"omitempty,proto"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // NATRuleAdd creates NAT (port forwarding) rule on VINS diff --git a/pkg/cloudbroker/vins/nat_rule_del.go b/pkg/cloudbroker/vins/nat_rule_del.go index 409dadb..532b0d5 100644 --- a/pkg/cloudbroker/vins/nat_rule_del.go +++ b/pkg/cloudbroker/vins/nat_rule_del.go @@ -18,10 +18,6 @@ type NATRuleDelRequest struct { // Pass -1 to clear all rules at once // Required: true RuleID int64 `url:"ruleId" json:"ruleId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // NATRuleDel deletes NAT (port forwarding) rule on VINS diff --git a/pkg/cloudbroker/vins/nat_rule_list.go b/pkg/cloudbroker/vins/nat_rule_list.go index 4333452..567d4d4 100644 --- a/pkg/cloudbroker/vins/nat_rule_list.go +++ b/pkg/cloudbroker/vins/nat_rule_list.go @@ -13,10 +13,6 @@ type NATRuleListRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // NATRuleList gets list of NAT (port forwarding) rules diff --git a/pkg/cloudbroker/vins/restore.go b/pkg/cloudbroker/vins/restore.go index 5c188ff..a55301c 100644 --- a/pkg/cloudbroker/vins/restore.go +++ b/pkg/cloudbroker/vins/restore.go @@ -13,10 +13,6 @@ type RestoreRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Restore restores VINS from recycle bin diff --git a/pkg/cloudbroker/vins/search.go b/pkg/cloudbroker/vins/search.go index a8884a0..0bd43bb 100644 --- a/pkg/cloudbroker/vins/search.go +++ b/pkg/cloudbroker/vins/search.go @@ -23,10 +23,6 @@ type SearchRequest struct { // If False, then VINSes having one of the statuses are not listed for // Required: false ShowAll bool `url:"show_all,omitempty" json:"show_all,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Search searches VINSes diff --git a/pkg/cloudbroker/vins/vnfdev_redeploy.go b/pkg/cloudbroker/vins/vnfdev_redeploy.go index 94bb0b0..c3841ff 100644 --- a/pkg/cloudbroker/vins/vnfdev_redeploy.go +++ b/pkg/cloudbroker/vins/vnfdev_redeploy.go @@ -13,10 +13,6 @@ type VNFDevRedeployRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // VNFDevRedeploy redeploys VINS VNFDevs diff --git a/pkg/cloudbroker/vins/vnfdev_reset.go b/pkg/cloudbroker/vins/vnfdev_reset.go index 057fe4d..906fc67 100644 --- a/pkg/cloudbroker/vins/vnfdev_reset.go +++ b/pkg/cloudbroker/vins/vnfdev_reset.go @@ -13,10 +13,6 @@ type VNFDevResetRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // VNFDevReset resets VINSes primary VNF device diff --git a/pkg/cloudbroker/vins/vnfdev_restart.go b/pkg/cloudbroker/vins/vnfdev_restart.go index e97ac74..8159a33 100644 --- a/pkg/cloudbroker/vins/vnfdev_restart.go +++ b/pkg/cloudbroker/vins/vnfdev_restart.go @@ -13,10 +13,6 @@ type VNFDevRestartRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // VNFDevRestart reboots VINSes primary VNF device diff --git a/pkg/cloudbroker/vins/vnfdev_start.go b/pkg/cloudbroker/vins/vnfdev_start.go index 3872a9b..db570b4 100644 --- a/pkg/cloudbroker/vins/vnfdev_start.go +++ b/pkg/cloudbroker/vins/vnfdev_start.go @@ -13,10 +13,6 @@ type VNFDevStartRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // VNFDevStart starts VINSes primary VNF device diff --git a/pkg/cloudbroker/vins/vnfdev_stop.go b/pkg/cloudbroker/vins/vnfdev_stop.go index ad5a621..5d7c321 100644 --- a/pkg/cloudbroker/vins/vnfdev_stop.go +++ b/pkg/cloudbroker/vins/vnfdev_stop.go @@ -13,10 +13,6 @@ type VNFDevStopRequest struct { // VINS ID // Required: true VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // VNFDevStop stops VINSes primary VNF device diff --git a/tests/platform_upgrade/cloud_test.go b/tests/platform_upgrade/cloud_test.go index 1fa6608..59eb344 100644 --- a/tests/platform_upgrade/cloud_test.go +++ b/tests/platform_upgrade/cloud_test.go @@ -17,7 +17,6 @@ import ( "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/lb" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/locations" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg" - "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/sizes" "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/vins" @@ -281,14 +280,6 @@ func TestGetListCloudAPI(t *testing.T) { t.Errorf("Can not test RG get because RG list is empty") } - // Sizes - // List - bytes, err = client.CloudAPI().Sizes().ListRaw(context.Background(), sizes.ListRequest{}) - if err != nil { - t.Error(err) - } - testLogs = append(testLogs, getResult("Sizes list", bytes, sizes.ListSizes{}, t)) - // Stack // List bytes, err = client.CloudAPI().Stack().ListRaw(context.Background(), stack.ListRequest{}) diff --git a/tests/platform_upgrade/request_map.go b/tests/platform_upgrade/request_map.go index ef38117..d84732b 100644 --- a/tests/platform_upgrade/request_map.go +++ b/tests/platform_upgrade/request_map.go @@ -10,13 +10,11 @@ import ( "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/image" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8ci" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s" - "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/kvmppc" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/kvmx86" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/lb" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/locations" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/pcidevice" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/rg" - "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/sizes" "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/user" @@ -36,7 +34,6 @@ import ( image_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/image" k8ci_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/k8ci" k8s_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/k8s" - kvmppc_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/kvmppc" kvmx86_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/kvmx86" lb_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/lb" node_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/node" @@ -57,337 +54,333 @@ type EmptyStruct struct{} func getRequestsMapCloudAPI() map[string]interface{} { return map[string]interface{}{ // account - "/cloudapi/account/addUser": account.AddUserRequest{}, - "/cloudapi/account/audits": account.AuditsRequest{}, - "/cloudapi/account/delete": account.DeleteRequest{}, - "/cloudapi/account/deleteUser": account.DeleteUserRequest{}, - "/cloudapi/account/disable": account.DisableEnableRequest{}, - "/cloudapi/account/enable": account.DisableEnableRequest{}, - "/cloudapi/account/get": account.GetRequest{}, - "/cloudapi/account/getConsumedAccountUnits": account.GetConsumedAccountUnitsRequest{}, - "/cloudapi/account/getConsumedCloudUnitsByType": account.GetConsumedCloudUnitsByTypeRequest{}, - "/cloudapi/account/getConsumption": account.GetConsumptionRequest{}, - "/cloudapi/account/getReservedAccountUnits": account.GetReservedAccountUnitsRequest{}, - "/cloudapi/account/getResourceConsumption": account.GetResourceConsumptionRequest{}, - "/cloudapi/account/list": account.ListRequest{}, - "/cloudapi/account/listComputes": account.ListComputesRequest{}, - "/cloudapi/account/listDeleted": account.ListDeletedRequest{}, - "/cloudapi/account/listDisks": account.ListDisksRequest{}, - "/cloudapi/account/listFlipGroups": account.ListFLIPGroupsRequest{}, - "/cloudapi/account/listRG": account.ListRGRequest{}, - "/cloudapi/account/listResourceConsumption": EmptyStruct{}, - "/cloudapi/account/listTemplates": account.ListTemplatesRequest{}, - "/cloudapi/account/listVins": account.ListVINSRequest{}, - "/cloudapi/account/restore": account.RestoreRequest{}, - "/cloudapi/account/update": account.UpdateRequest{}, - "/cloudapi/account/updateUser": account.UpdateUserRequest{}, + "/restmachine/cloudapi/account/addUser": account.AddUserRequest{}, + "/restmachine/cloudapi/account/audits": account.AuditsRequest{}, + "/restmachine/cloudapi/account/delete": account.DeleteRequest{}, + "/restmachine/cloudapi/account/deleteUser": account.DeleteUserRequest{}, + "/restmachine/cloudapi/account/disable": account.DisableEnableRequest{}, + "/restmachine/cloudapi/account/enable": account.DisableEnableRequest{}, + "/restmachine/cloudapi/account/get": account.GetRequest{}, + "/restmachine/cloudapi/account/getConsumedAccountUnits": account.GetConsumedAccountUnitsRequest{}, + "/restmachine/cloudapi/account/getConsumedCloudUnitsByType": account.GetConsumedCloudUnitsByTypeRequest{}, + "/restmachine/cloudapi/account/getReservedAccountUnits": account.GetReservedAccountUnitsRequest{}, + "/restmachine/cloudapi/account/getResourceConsumption": account.GetResourceConsumptionRequest{}, + "/restmachine/cloudapi/account/list": account.ListRequest{}, + "/restmachine/cloudapi/account/listComputes": account.ListComputesRequest{}, + "/restmachine/cloudapi/account/listDeleted": account.ListDeletedRequest{}, + "/restmachine/cloudapi/account/listDisks": account.ListDisksRequest{}, + "/restmachine/cloudapi/account/listFlipGroups": account.ListFLIPGroupsRequest{}, + "/restmachine/cloudapi/account/listRG": account.ListRGRequest{}, + "/restmachine/cloudapi/account/listResourceConsumption": EmptyStruct{}, + "/restmachine/cloudapi/account/listTemplates": account.ListTemplatesRequest{}, + "/restmachine/cloudapi/account/listVins": account.ListVINSRequest{}, + "/restmachine/cloudapi/account/restore": account.RestoreRequest{}, + "/restmachine/cloudapi/account/update": account.UpdateRequest{}, + "/restmachine/cloudapi/account/updateUser": account.UpdateUserRequest{}, //bservice - "/cloudapi/bservice/create": bservice.CreateRequest{}, - "/cloudapi/bservice/delete": bservice.DeleteRequest{}, - "/cloudapi/bservice/disable": bservice.DisableRequest{}, - "/cloudapi/bservice/enable": bservice.EnableRequest{}, - "/cloudapi/bservice/get": bservice.GetRequest{}, - "/cloudapi/bservice/groupAdd": bservice.GroupAddRequest{}, - "/cloudapi/bservice/groupComputeRemove": bservice.GroupComputeRemoveRequest{}, - "/cloudapi/bservice/groupGet": bservice.GroupGetRequest{}, - "/cloudapi/bservice/groupParentAdd": bservice.GroupParentAddRequest{}, - "/cloudapi/bservice/groupParentRemove": bservice.GroupParentRemoveRequest{}, - "/cloudapi/bservice/groupRemove": bservice.GroupRemoveRequest{}, - "/cloudapi/bservice/groupResize": bservice.GroupResizeRequest{}, - "/cloudapi/bservice/groupStart": bservice.GroupStartRequest{}, - "/cloudapi/bservice/groupStop": bservice.GroupStopRequest{}, - "/cloudapi/bservice/groupUpdate": bservice.GroupUpdateRequest{}, - "/cloudapi/bservice/groupUpdateExtnet": bservice.GroupUpdateExtNetRequest{}, - "/cloudapi/bservice/groupUpdateVins": bservice.GroupUpdateVINSRequest{}, - "/cloudapi/bservice/list": bservice.ListRequest{}, - "/cloudapi/bservice/listDeleted": bservice.ListDeletedRequest{}, - "/cloudapi/bservice/restore": bservice.RestoreRequest{}, - "/cloudapi/bservice/snapshotCreate": bservice.SnapshotCreateRequest{}, - "/cloudapi/bservice/snapshotDelete": bservice.SnapshotDeleteRequest{}, - "/cloudapi/bservice/snapshotList": bservice.SnapshotListRequest{}, - "/cloudapi/bservice/snapshotRollback": bservice.SnapshotRollbackRequest{}, - "/cloudapi/bservice/start": bservice.StartRequest{}, - "/cloudapi/bservice/stop": bservice.StopRequest{}, + "/restmachine/cloudapi/bservice/create": bservice.CreateRequest{}, + "/restmachine/cloudapi/bservice/delete": bservice.DeleteRequest{}, + "/restmachine/cloudapi/bservice/disable": bservice.DisableRequest{}, + "/restmachine/cloudapi/bservice/enable": bservice.EnableRequest{}, + "/restmachine/cloudapi/bservice/get": bservice.GetRequest{}, + "/restmachine/cloudapi/bservice/groupAdd": bservice.GroupAddRequest{}, + "/restmachine/cloudapi/bservice/groupComputeRemove": bservice.GroupComputeRemoveRequest{}, + "/restmachine/cloudapi/bservice/groupGet": bservice.GroupGetRequest{}, + "/restmachine/cloudapi/bservice/groupParentAdd": bservice.GroupParentAddRequest{}, + "/restmachine/cloudapi/bservice/groupParentRemove": bservice.GroupParentRemoveRequest{}, + "/restmachine/cloudapi/bservice/groupRemove": bservice.GroupRemoveRequest{}, + "/restmachine/cloudapi/bservice/groupResize": bservice.GroupResizeRequest{}, + "/restmachine/cloudapi/bservice/groupStart": bservice.GroupStartRequest{}, + "/restmachine/cloudapi/bservice/groupStop": bservice.GroupStopRequest{}, + "/restmachine/cloudapi/bservice/groupUpdate": bservice.GroupUpdateRequest{}, + "/restmachine/cloudapi/bservice/groupUpdateExtnet": bservice.GroupUpdateExtNetRequest{}, + "/restmachine/cloudapi/bservice/groupUpdateVins": bservice.GroupUpdateVINSRequest{}, + "/restmachine/cloudapi/bservice/list": bservice.ListRequest{}, + "/restmachine/cloudapi/bservice/listDeleted": bservice.ListDeletedRequest{}, + "/restmachine/cloudapi/bservice/restore": bservice.RestoreRequest{}, + "/restmachine/cloudapi/bservice/snapshotCreate": bservice.SnapshotCreateRequest{}, + "/restmachine/cloudapi/bservice/snapshotDelete": bservice.SnapshotDeleteRequest{}, + "/restmachine/cloudapi/bservice/snapshotList": bservice.SnapshotListRequest{}, + "/restmachine/cloudapi/bservice/snapshotRollback": bservice.SnapshotRollbackRequest{}, + "/restmachine/cloudapi/bservice/start": bservice.StartRequest{}, + "/restmachine/cloudapi/bservice/stop": bservice.StopRequest{}, // compute - "/cloudapi/compute/affinityGroupCheckStart": compute.AffinityGroupCheckStartRequest{}, - "/cloudapi/compute/affinityLabelRemove": compute.AffinityLabelRemoveRequest{}, - "/cloudapi/compute/affinityLabelSet": compute.AffinityLabelSetRequest{}, - "/cloudapi/compute/affinityRelations": compute.AffinityRelationsRequest{}, - "/cloudapi/compute/affinityRuleAdd": compute.AffinityRuleAddRequest{}, - "/cloudapi/compute/affinityRuleRemove": compute.AffinityRuleRemoveRequest{}, - "/cloudapi/compute/affinityRulesClear": compute.AffinityRulesClearRequest{}, - "/cloudapi/compute/antiAffinityRuleAdd": compute.AntiAffinityRuleAddRequest{}, - "/cloudapi/compute/antiAffinityRuleRemove": compute.AntiAffinityRuleRemoveRequest{}, - "/cloudapi/compute/antiAffinityRulesClear": compute.AffinityRulesClearRequest{}, - "/cloudapi/compute/attachGpu": compute.AttachGPURequest{}, - "/cloudapi/compute/attachPciDevice": compute.AttachPCIDeviceRequest{}, - "/cloudapi/compute/audits": compute.AuditsRequest{}, - "/cloudapi/compute/bootDiskSet": compute.BootDiskSetRequest{}, - "/cloudapi/compute/bootOrderGet": compute.BootOrderGetRequest{}, - "/cloudapi/compute/bootOrderSet": compute.BootOrderSetRequest{}, - "/cloudapi/compute/cdEject": compute.CDEjectRequest{}, - "/cloudapi/compute/cdInsert": compute.CDInsertRequest{}, - "/cloudapi/compute/changeLinkState": compute.ChangeLinkStateRequest{}, - "/cloudapi/compute/clone": compute.CloneRequest{}, - "/cloudapi/compute/createTemplate": compute.CreateTemplateRequest{}, - "/cloudapi/compute/createTemplateFromBlank": compute.CreateTemplateFromBlankRequest{}, - "/cloudapi/compute/delete": compute.DeleteRequest{}, - "/cloudapi/compute/deleteCustomFields": compute.DeleteCustomFieldsRequest{}, - "/cloudapi/compute/detachGpu": compute.DetachGPURequest{}, - "/cloudapi/compute/detachPciDevice": compute.DetachPCIDeviceRequest{}, - "/cloudapi/compute/disable": compute.DisableRequest{}, - "/cloudapi/compute/diskAdd": compute.DiskAddRequest{}, - "/cloudapi/compute/diskAttach": compute.DiskAttachRequest{}, - "/cloudapi/compute/diskDel": compute.DiskDelRequest{}, - "/cloudapi/compute/diskDetach": compute.DiskDetachRequest{}, - "/cloudapi/compute/diskMigrate": compute.DiskMigrateRequest{}, - "/cloudapi/compute/diskQos": compute.DiskQOSRequest{}, - "/cloudapi/compute/diskSwitchToReplication": compute.DiskSwitchToReplicationRequest{}, - "/cloudapi/compute/diskResize": compute.DiskResizeRequest{}, - "/cloudapi/compute/enable": compute.EnableRequest{}, - "/cloudapi/compute/get": compute.GetRequest{}, - "/cloudapi/compute/getAudits": compute.GetAuditsRequest{}, - "/cloudapi/compute/getConsoleUrl": compute.GetConsoleURLRequest{}, - "/cloudapi/compute/getCustomFields": compute.GetCustomFieldsRequest{}, - "/cloudapi/compute/getLog": compute.GetLogRequest{}, - "/cloudapi/compute/list": compute.ListRequest{}, - "/cloudapi/compute/listDeleted": compute.ListDeletedRequest{}, - "/cloudapi/compute/listPciDevice": compute.ListPCIDeviceRequest{}, - "/cloudapi/compute/listVGpu": compute.ListVGPURequest{}, - "/cloudapi/compute/moveToRg": compute.MoveToRGRequest{}, - "/cloudapi/compute/netAttach": compute.NetAttachRequest{}, - "/cloudapi/compute/netDetach": compute.NetDetachRequest{}, - "/cloudapi/compute/pfwAdd": compute.PFWAddRequest{}, - "/cloudapi/compute/pfwDel": compute.PFWDelRequest{}, - "/cloudapi/compute/pfwList": compute.PFWListRequest{}, - "/cloudapi/compute/pause": compute.PauseRequest{}, - "/cloudapi/compute/pinToStack": compute.PinToStackRequest{}, - "/cloudapi/compute/powerCycle": compute.PowerCycleRequest{}, - "/cloudapi/compute/reboot": compute.RebootRequest{}, - "/cloudapi/compute/redeploy": compute.RedeployRequest{}, - "/cloudapi/compute/reset": compute.ResetRequest{}, - "/cloudapi/compute/resize": compute.ResizeRequest{}, - "/cloudapi/compute/restore": compute.RestoreRequest{}, - "/cloudapi/compute/resume": compute.ResumeRequest{}, - "/cloudapi/compute/setCustomFields": compute.SetCustomFieldsRequest{}, - "/cloudapi/compute/snapshotCreate": compute.SnapshotCreateRequest{}, - "/cloudapi/compute/snapshotDelete": compute.SnapshotDeleteRequest{}, - "/cloudapi/compute/snapshotList": compute.SnapshotListRequest{}, - "/cloudapi/compute/snapshotRollback": compute.SnapshotRollbackRequest{}, - "/cloudapi/compute/snapshotUsage": compute.SnapshotUsageRequest{}, - "/cloudapi/compute/start": compute.StartRequest{}, - "/cloudapi/compute/stop": compute.StopRequest{}, - "/cloudapi/compute/tagAdd": compute.TagAddRequest{}, - "/cloudapi/compute/tagRemove": compute.TagRemoveRequest{}, - "/cloudapi/compute/unpinFromStack": compute.UnpinFromStackRequest{}, - "/cloudapi/compute/update": compute.UpdateRequest{}, - "/cloudapi/compute/userGrant": compute.UserGrantRequest{}, - "/cloudapi/compute/userList": compute.UserListRequest{}, - "/cloudapi/compute/userRevoke": compute.UserRevokeRequest{}, - "/cloudapi/compute/userUpdate": compute.UserUpdateRequest{}, + "/restmachine/cloudapi/compute/affinityGroupCheckStart": compute.AffinityGroupCheckStartRequest{}, + "/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{}, // disks - "/cloudapi/disks/create": disks.CreateRequest{}, - "/cloudapi/disks/delete": disks.DeleteRequest{}, - "/cloudapi/disks/deleteDisks": disks.DisksDeleteRequest{}, - "/cloudapi/disks/fromPlatformDisk": disks.FromPlatformDiskRequest{}, - "/cloudapi/disks/get": disks.GetRequest{}, - "/cloudapi/disks/limitIO": disks.LimitIORequest{}, - "/cloudapi/disks/list": disks.ListRequest{}, - "/cloudapi/disks/listDeleted": disks.ListDeletedRequest{}, - "/cloudapi/disks/listTypes": disks.ListTypesRequest{}, - "/cloudapi/disks/listUnattached": disks.ListUnattachedRequest{}, - "/cloudapi/disks/rename": disks.RenameRequest{}, - "/cloudapi/disks/replicate": disks.ReplicateRequest{}, - "/cloudapi/disks/replicationResume": disks.ReplicationResumeRequest{}, - "/cloudapi/disks/replicationReverse": disks.ReplicationReverseRequest{}, - "/cloudapi/disks/replicationStart": disks.ReplicationStartRequest{}, - "/cloudapi/disks/replicationStatus": disks.ReplicationStatusRequest{}, - "/cloudapi/disks/replicationStop": disks.ReplicationStopRequest{}, - "/cloudapi/disks/replicationSuspend": disks.ReplicationSuspendRequest{}, - "/cloudapi/disks/resize": disks.ResizeRequest{}, - "/cloudapi/disks/resize2": disks.ResizeRequest{}, - "/cloudapi/disks/restore": disks.RestoreRequest{}, - "/cloudapi/disks/search": disks.SearchRequest{}, - "/cloudapi/disks/share": disks.ShareRequest{}, - "/cloudapi/disks/snapshotDelete": disks.SnapshotDeleteRequest{}, - "/cloudapi/disks/snapshotRollback": disks.SnapshotRollbackRequest{}, - "/cloudapi/disks/unshare": disks.UnshareRequest{}, + "/restmachine/cloudapi/disks/create": disks.CreateRequest{}, + "/restmachine/cloudapi/disks/delete": disks.DeleteRequest{}, + "/restmachine/cloudapi/disks/deleteDisks": disks.DisksDeleteRequest{}, + "/restmachine/cloudapi/disks/fromPlatformDisk": disks.FromPlatformDiskRequest{}, + "/restmachine/cloudapi/disks/get": disks.GetRequest{}, + "/restmachine/cloudapi/disks/limitIO": disks.LimitIORequest{}, + "/restmachine/cloudapi/disks/list": disks.ListRequest{}, + "/restmachine/cloudapi/disks/listDeleted": disks.ListDeletedRequest{}, + "/restmachine/cloudapi/disks/listTypes": disks.ListTypesRequest{}, + "/restmachine/cloudapi/disks/listUnattached": disks.ListUnattachedRequest{}, + "/restmachine/cloudapi/disks/rename": disks.RenameRequest{}, + "/restmachine/cloudapi/disks/replicate": disks.ReplicateRequest{}, + "/restmachine/cloudapi/disks/replicationResume": disks.ReplicationResumeRequest{}, + "/restmachine/cloudapi/disks/replicationReverse": disks.ReplicationReverseRequest{}, + "/restmachine/cloudapi/disks/replicationStart": disks.ReplicationStartRequest{}, + "/restmachine/cloudapi/disks/replicationStatus": disks.ReplicationStatusRequest{}, + "/restmachine/cloudapi/disks/replicationStop": disks.ReplicationStopRequest{}, + "/restmachine/cloudapi/disks/replicationSuspend": disks.ReplicationSuspendRequest{}, + "/restmachine/cloudapi/disks/resize": disks.ResizeRequest{}, + "/restmachine/cloudapi/disks/resize2": disks.ResizeRequest{}, + "/restmachine/cloudapi/disks/restore": disks.RestoreRequest{}, + "/restmachine/cloudapi/disks/search": disks.SearchRequest{}, + "/restmachine/cloudapi/disks/share": disks.ShareRequest{}, + "/restmachine/cloudapi/disks/snapshotDelete": disks.SnapshotDeleteRequest{}, + "/restmachine/cloudapi/disks/snapshotRollback": disks.SnapshotRollbackRequest{}, + "/restmachine/cloudapi/disks/unshare": disks.UnshareRequest{}, // extnet - "/cloudapi/extnet/get": extnet.GetRequest{}, - "/cloudapi/extnet/getDefault": EmptyStruct{}, - "/cloudapi/extnet/list": extnet.ListRequest{}, - "/cloudapi/extnet/listComputes": extnet.ListComputesRequest{}, + "/restmachine/cloudapi/extnet/get": extnet.GetRequest{}, + "/restmachine/cloudapi/extnet/getDefault": EmptyStruct{}, + "/restmachine/cloudapi/extnet/list": extnet.ListRequest{}, + "/restmachine/cloudapi/extnet/listComputes": extnet.ListComputesRequest{}, // flipgroup - "/cloudapi/flipgroup/computeAdd": flipgroup.ComputeAddRequest{}, - "/cloudapi/flipgroup/computeRemove": flipgroup.ComputeRemoveRequest{}, - "/cloudapi/flipgroup/create": flipgroup.CreateRequest{}, - "/cloudapi/flipgroup/delete": flipgroup.DeleteRequest{}, - "/cloudapi/flipgroup/edit": flipgroup.EditRequest{}, - "/cloudapi/flipgroup/get": flipgroup.GetRequest{}, - "/cloudapi/flipgroup/list": flipgroup.ListRequest{}, + "/restmachine/cloudapi/flipgroup/computeAdd": flipgroup.ComputeAddRequest{}, + "/restmachine/cloudapi/flipgroup/computeRemove": flipgroup.ComputeRemoveRequest{}, + "/restmachine/cloudapi/flipgroup/create": flipgroup.CreateRequest{}, + "/restmachine/cloudapi/flipgroup/delete": flipgroup.DeleteRequest{}, + "/restmachine/cloudapi/flipgroup/edit": flipgroup.EditRequest{}, + "/restmachine/cloudapi/flipgroup/get": flipgroup.GetRequest{}, + "/restmachine/cloudapi/flipgroup/list": flipgroup.ListRequest{}, // image - "/cloudapi/image/create": image.CreateRequest{}, - "/cloudapi/image/createVirtual": image.CreateVirtualRequest{}, - "/cloudapi/image/delete": image.DeleteRequest{}, - "/cloudapi/image/get": image.GetRequest{}, - "/cloudapi/image/link": image.LinkRequest{}, - "/cloudapi/image/list": image.ListRequest{}, - "/cloudapi/image/rename": image.RenameRequest{}, + "/restmachine/cloudapi/image/create": image.CreateRequest{}, + "/restmachine/cloudapi/image/createVirtual": image.CreateVirtualRequest{}, + "/restmachine/cloudapi/image/delete": image.DeleteRequest{}, + "/restmachine/cloudapi/image/get": image.GetRequest{}, + "/restmachine/cloudapi/image/link": image.LinkRequest{}, + "/restmachine/cloudapi/image/list": image.ListRequest{}, + "/restmachine/cloudapi/image/rename": image.RenameRequest{}, // k8ci, k8s - "/cloudapi/k8ci/get": k8ci.GetRequest{}, - "/cloudapi/k8ci/list": k8ci.ListRequest{}, - "/cloudapi/k8ci/listDeleted": k8ci.ListDeletedRequest{}, - "/cloudapi/k8s/create": k8s.CreateRequest{}, - "/cloudapi/k8s/delete": k8s.DeleteRequest{}, - "/cloudapi/k8s/deleteMasterFromGroup": k8s.DeleteMasterFromGroupRequest{}, - "/cloudapi/k8s/deleteWorkerFromGroup": k8s.DeleteWorkerFromGroupRequest{}, - "/cloudapi/k8s/disable": k8s.DisableEnableRequest{}, - "/cloudapi/k8s/enable": k8s.DisableEnableRequest{}, - "/cloudapi/k8s/findGroupByLabel": k8s.FindGroupByLabelRequest{}, - "/cloudapi/k8s/get": k8s.GetRequest{}, - "/cloudapi/k8s/getConfig": k8s.GetConfigRequest{}, - "/cloudapi/k8s/getNodeAnnotations": k8s.GetNodeAnnotationsRequest{}, - "/cloudapi/k8s/getNodeLabels": k8s.GetNodeLabelsRequest{}, - "/cloudapi/k8s/getNodeTaints": k8s.GetNodeTaintsRequest{}, - "/cloudapi/k8s/getWorkerNodesMetaData": k8s.GetWorkerNodesMetaDataRequest{}, - "/cloudapi/k8s/list": k8s.ListRequest{}, - "/cloudapi/k8s/listDeleted": k8s.ListDeletedRequest{}, - "/cloudapi/k8s/restore": k8s.RestoreRequest{}, - "/cloudapi/k8s/start": k8s.StartRequest{}, - "/cloudapi/k8s/stop": k8s.StopRequest{}, - "/cloudapi/k8s/update": k8s.UpdateRequest{}, - "/cloudapi/k8s/updateWorkerNodesMetaData": k8s.UpdateWorkerNodesMetaDataRequest{}, - "/cloudapi/k8s/workerAdd": k8s.WorkerAddRequest{}, - "/cloudapi/k8s/workersGroupAdd": k8s.WorkersGroupAddRequest{}, - "/cloudapi/k8s/workersGroupDelete": k8s.WorkersGroupDeleteRequest{}, - "/cloudapi/k8s/workersGroupGetByName": k8s.WorkersGroupGetByNameRequest{}, - "/cloudapi/k8s/workerReset": k8s.WorkerResetRequest{}, - "/cloudapi/k8s/workerRestart": k8s.WorkerRestartRequest{}, - - // kvmppc - "/cloudapi/kvmppc/create": kvmppc.CreateRequest{}, - "/cloudapi/kvmppc/createBlank": kvmppc.CreateBlankRequest{}, - "/cloudapi/kvmx86/create": kvmx86.CreateRequest{}, - "/cloudapi/kvmx86/createBlank": kvmx86.CreateBlankRequest{}, + "/restmachine/cloudapi/k8ci/get": k8ci.GetRequest{}, + "/restmachine/cloudapi/k8ci/list": k8ci.ListRequest{}, + "/restmachine/cloudapi/k8ci/listDeleted": k8ci.ListDeletedRequest{}, + "/restmachine/cloudapi/k8s/create": k8s.CreateRequest{}, + "/restmachine/cloudapi/k8s/delete": k8s.DeleteRequest{}, + "/restmachine/cloudapi/k8s/deleteMasterFromGroup": k8s.DeleteMasterFromGroupRequest{}, + "/restmachine/cloudapi/k8s/deleteWorkerFromGroup": k8s.DeleteWorkerFromGroupRequest{}, + "/restmachine/cloudapi/k8s/disable": k8s.DisableEnableRequest{}, + "/restmachine/cloudapi/k8s/enable": k8s.DisableEnableRequest{}, + "/restmachine/cloudapi/k8s/findGroupByLabel": k8s.FindGroupByLabelRequest{}, + "/restmachine/cloudapi/k8s/get": k8s.GetRequest{}, + "/restmachine/cloudapi/k8s/getConfig": k8s.GetConfigRequest{}, + "/restmachine/cloudapi/k8s/getNodeAnnotations": k8s.GetNodeAnnotationsRequest{}, + "/restmachine/cloudapi/k8s/getNodeLabels": k8s.GetNodeLabelsRequest{}, + "/restmachine/cloudapi/k8s/getNodeTaints": k8s.GetNodeTaintsRequest{}, + "/restmachine/cloudapi/k8s/getWorkerNodesMetaData": k8s.GetWorkerNodesMetaDataRequest{}, + "/restmachine/cloudapi/k8s/list": k8s.ListRequest{}, + "/restmachine/cloudapi/k8s/listDeleted": k8s.ListDeletedRequest{}, + "/restmachine/cloudapi/k8s/restore": k8s.RestoreRequest{}, + "/restmachine/cloudapi/k8s/start": k8s.StartRequest{}, + "/restmachine/cloudapi/k8s/stop": k8s.StopRequest{}, + "/restmachine/cloudapi/k8s/update": k8s.UpdateRequest{}, + "/restmachine/cloudapi/k8s/updateWorkerNodesMetaData": k8s.UpdateWorkerNodesMetaDataRequest{}, + "/restmachine/cloudapi/k8s/workerAdd": k8s.WorkerAddRequest{}, + "/restmachine/cloudapi/k8s/workersGroupAdd": k8s.WorkersGroupAddRequest{}, + "/restmachine/cloudapi/k8s/workersGroupDelete": k8s.WorkersGroupDeleteRequest{}, + "/restmachine/cloudapi/k8s/workersGroupGetByName": k8s.WorkersGroupGetByNameRequest{}, + "/restmachine/cloudapi/k8s/workerReset": k8s.WorkerResetRequest{}, + "/restmachine/cloudapi/k8s/workerRestart": k8s.WorkerRestartRequest{}, + + // kvmx86 + "/restmachine/cloudapi/kvmx86/create": kvmx86.CreateRequest{}, + "/restmachine/cloudapi/kvmx86/createBlank": kvmx86.CreateBlankRequest{}, // lb - "/cloudapi/lb/backendCreate": lb.BackendCreateRequest{}, - "/cloudapi/lb/backendDelete": lb.BackendDeleteRequest{}, - "/cloudapi/lb/backendServerAdd": lb.BackendServerAddRequest{}, - "/cloudapi/lb/backendServerDelete": lb.BackendServerDeleteRequest{}, - "/cloudapi/lb/backendServerUpdate": lb.BackendServerUpdateRequest{}, - "/cloudapi/lb/backendUpdate": lb.BackendUpdateRequest{}, - "/cloudapi/lb/configReset": lb.ConfigResetRequest{}, - "/cloudapi/lb/create": lb.CreateRequest{}, - "/cloudapi/lb/delete": lb.DeleteRequest{}, - "/cloudapi/lb/disable": lb.DisableEnableRequest{}, - "/cloudapi/lb/enable": lb.DisableEnableRequest{}, - "/cloudapi/lb/frontendBind": lb.FrontendBindRequest{}, - "/cloudapi/lb/frontendBindDelete": lb.FrontendBindDeleteRequest{}, - "/cloudapi/lb/frontendBindingUpdate": lb.FrontendBindUpdateRequest{}, - "/cloudapi/lb/frontendCreate": lb.FrontendCreateRequest{}, - "/cloudapi/lb/frontendDelete": lb.FrontendDeleteRequest{}, - "/cloudapi/lb/get": lb.GetRequest{}, - "/cloudapi/lb/makeHighlyAvailable": lb.HighlyAvailableRequest{}, - "/cloudapi/lb/list": lb.ListRequest{}, - "/cloudapi/lb/listDeleted": lb.ListDeletedRequest{}, - "/cloudapi/lb/restart": lb.RestartRequest{}, - "/cloudapi/lb/restore": lb.RestoreRequest{}, - "/cloudapi/lb/start": lb.StartRequest{}, - "/cloudapi/lb/stop": lb.StopRequest{}, - "/cloudapi/lb/update": lb.UpdateRequest{}, - "/cloudapi/lb/updateSysctlParams": lb.UpdateSysctParamsRequest{}, + "/restmachine/cloudapi/lb/backendCreate": lb.BackendCreateRequest{}, + "/restmachine/cloudapi/lb/backendDelete": lb.BackendDeleteRequest{}, + "/restmachine/cloudapi/lb/backendServerAdd": lb.BackendServerAddRequest{}, + "/restmachine/cloudapi/lb/backendServerDelete": lb.BackendServerDeleteRequest{}, + "/restmachine/cloudapi/lb/backendServerUpdate": lb.BackendServerUpdateRequest{}, + "/restmachine/cloudapi/lb/backendUpdate": lb.BackendUpdateRequest{}, + "/restmachine/cloudapi/lb/configReset": lb.ConfigResetRequest{}, + "/restmachine/cloudapi/lb/create": lb.CreateRequest{}, + "/restmachine/cloudapi/lb/delete": lb.DeleteRequest{}, + "/restmachine/cloudapi/lb/disable": lb.DisableEnableRequest{}, + "/restmachine/cloudapi/lb/enable": lb.DisableEnableRequest{}, + "/restmachine/cloudapi/lb/frontendBind": lb.FrontendBindRequest{}, + "/restmachine/cloudapi/lb/frontendBindDelete": lb.FrontendBindDeleteRequest{}, + "/restmachine/cloudapi/lb/frontendBindingUpdate": lb.FrontendBindUpdateRequest{}, + "/restmachine/cloudapi/lb/frontendCreate": lb.FrontendCreateRequest{}, + "/restmachine/cloudapi/lb/frontendDelete": lb.FrontendDeleteRequest{}, + "/restmachine/cloudapi/lb/get": lb.GetRequest{}, + "/restmachine/cloudapi/lb/makeHighlyAvailable": lb.HighlyAvailableRequest{}, + "/restmachine/cloudapi/lb/list": lb.ListRequest{}, + "/restmachine/cloudapi/lb/listDeleted": lb.ListDeletedRequest{}, + "/restmachine/cloudapi/lb/restart": lb.RestartRequest{}, + "/restmachine/cloudapi/lb/restore": lb.RestoreRequest{}, + "/restmachine/cloudapi/lb/start": lb.StartRequest{}, + "/restmachine/cloudapi/lb/stop": lb.StopRequest{}, + "/restmachine/cloudapi/lb/update": lb.UpdateRequest{}, + "/restmachine/cloudapi/lb/updateSysctlParams": lb.UpdateSysctParamsRequest{}, // locations - "/cloudapi/locations/getUrl": EmptyStruct{}, - "/cloudapi/locations/list": locations.ListRequest{}, + "/restmachine/cloudapi/locations/getUrl": EmptyStruct{}, + "/restmachine/cloudapi/locations/list": locations.ListRequest{}, // pcidevice - "/cloudapi/pcidevice/list": pcidevice.ListRequest{}, + "/restmachine/cloudapi/pcidevice/list": pcidevice.ListRequest{}, // rg - "/cloudapi/rg/accessGrant": rg.AccessGrantRequest{}, - "/cloudapi/rg/accessRevoke": rg.AccessRevokeRequest{}, - "/cloudapi/rg/affinityGroupComputes": rg.AffinityGroupComputesRequest{}, - "/cloudapi/rg/affinityGroupsGet": rg.AffinityGroupsGetRequest{}, - "/cloudapi/rg/affinityGroupsList": rg.AffinityGroupsListRequest{}, - "/cloudapi/rg/audits": rg.AuditsRequest{}, - "/cloudapi/rg/create": rg.CreateRequest{}, - "/cloudapi/rg/delete": rg.DeleteRequest{}, - "/cloudapi/rg/disable": rg.DisableRequest{}, - "/cloudapi/rg/enable": rg.EnableRequest{}, - "/cloudapi/rg/get": rg.GetRequest{}, - "/cloudapi/rg/getResourceConsumption": rg.GetResourceConsumptionRequest{}, - "/cloudapi/rg/list": rg.ListRequest{}, - "/cloudapi/rg/listComputes": rg.ListComputesRequest{}, - "/cloudapi/rg/listDeleted": rg.ListDeletedRequest{}, - "/cloudapi/rg/listLb": rg.ListLBRequest{}, - "/cloudapi/rg/listPFW": rg.ListPFWRequest{}, - "/cloudapi/rg/listResourceConsumption": EmptyStruct{}, - "/cloudapi/rg/listVins": rg.ListVINSRequest{}, - "/cloudapi/rg/restore": rg.RestoreRequest{}, - "/cloudapi/rg/setDefNet": rg.SetDefNetRequest{}, - "/cloudapi/rg/update": rg.UpdateRequest{}, - "/cloudapi/rg/usage": rg.UsageRequest{}, - - // stack, tasks, sizes - "/cloudapi/sizes/list": sizes.ListRequest{}, - "/cloudapi/stack/get": stack.GetRequest{}, - "/cloudapi/stack/list": stack.ListRequest{}, - "/cloudapi/tasks/get": tasks.GetRequest{}, - "/cloudapi/tasks/list": tasks.ListRequest{}, + "/restmachine/cloudapi/rg/accessGrant": rg.AccessGrantRequest{}, + "/restmachine/cloudapi/rg/accessRevoke": rg.AccessRevokeRequest{}, + "/restmachine/cloudapi/rg/affinityGroupComputes": rg.AffinityGroupComputesRequest{}, + "/restmachine/cloudapi/rg/affinityGroupsGet": rg.AffinityGroupsGetRequest{}, + "/restmachine/cloudapi/rg/affinityGroupsList": rg.AffinityGroupsListRequest{}, + "/restmachine/cloudapi/rg/audits": rg.AuditsRequest{}, + "/restmachine/cloudapi/rg/create": rg.CreateRequest{}, + "/restmachine/cloudapi/rg/delete": rg.DeleteRequest{}, + "/restmachine/cloudapi/rg/disable": rg.DisableRequest{}, + "/restmachine/cloudapi/rg/enable": rg.EnableRequest{}, + "/restmachine/cloudapi/rg/get": rg.GetRequest{}, + "/restmachine/cloudapi/rg/getResourceConsumption": rg.GetResourceConsumptionRequest{}, + "/restmachine/cloudapi/rg/list": rg.ListRequest{}, + "/restmachine/cloudapi/rg/listComputes": rg.ListComputesRequest{}, + "/restmachine/cloudapi/rg/listDeleted": rg.ListDeletedRequest{}, + "/restmachine/cloudapi/rg/listLb": rg.ListLBRequest{}, + "/restmachine/cloudapi/rg/listPFW": rg.ListPFWRequest{}, + "/restmachine/cloudapi/rg/listResourceConsumption": EmptyStruct{}, + "/restmachine/cloudapi/rg/listVins": rg.ListVINSRequest{}, + "/restmachine/cloudapi/rg/restore": rg.RestoreRequest{}, + "/restmachine/cloudapi/rg/setDefNet": rg.SetDefNetRequest{}, + "/restmachine/cloudapi/rg/update": rg.UpdateRequest{}, + "/restmachine/cloudapi/rg/usage": rg.UsageRequest{}, + + // stack, tasks + "/restmachine/cloudapi/stack/get": stack.GetRequest{}, + "/restmachine/cloudapi/stack/list": stack.ListRequest{}, + "/restmachine/cloudapi/tasks/get": tasks.GetRequest{}, + "/restmachine/cloudapi/tasks/list": tasks.ListRequest{}, // user - "/cloudapi/user/apiList": user.APIListRequest{}, - "/cloudapi/user/authenticate": user.AuthenticateRequest{}, - "/cloudapi/user/brief": EmptyStruct{}, - "/cloudapi/user/get": user.GetRequest{}, - "/cloudapi/user/getAudit": user.GetAuditRequest{}, - "/cloudapi/user/getResourceConsumption": EmptyStruct{}, - "/cloudapi/user/isValidInviteUserToken": user.IsValidInviteUserTokenRequest{}, - "/cloudapi/user/search": user.SearchRequest{}, - "/cloudapi/user/setData": user.SetDataRequest{}, + "/restmachine/cloudapi/user/apiList": user.APIListRequest{}, + "/restmachine/cloudapi/user/authenticate": user.AuthenticateRequest{}, + "/restmachine/cloudapi/user/brief": EmptyStruct{}, + "/restmachine/cloudapi/user/get": user.GetRequest{}, + "/restmachine/cloudapi/user/getAudit": user.GetAuditRequest{}, + "/restmachine/cloudapi/user/getResourceConsumption": EmptyStruct{}, + "/restmachine/cloudapi/user/isValidInviteUserToken": user.IsValidInviteUserTokenRequest{}, + "/restmachine/cloudapi/user/search": user.SearchRequest{}, + "/restmachine/cloudapi/user/setData": user.SetDataRequest{}, // vfpool - "/cloudapi/vfpool/get": vfpool.GetRequest{}, - "/cloudapi/vfpool/list": vfpool.ListRequest{}, + "/restmachine/cloudapi/vfpool/get": vfpool.GetRequest{}, + "/restmachine/cloudapi/vfpool/list": vfpool.ListRequest{}, // vins - "/cloudapi/vins/audits": vins.AuditsRequest{}, - "/cloudapi/vins/createInAccount": vins.CreateInAccountRequest{}, - "/cloudapi/vins/createInRG": vins.CreateInRGRequest{}, - "/cloudapi/vins/delete": vins.DeleteRequest{}, - "/cloudapi/vins/disable": vins.DisableEnableRequest{}, - "/cloudapi/vins/dnsApply": vins.DNSApplyRequest{}, - "/cloudapi/vins/enable": vins.DisableEnableRequest{}, - "/cloudapi/vins/extNetConnect": vins.ExtNetConnectRequest{}, - "/cloudapi/vins/extNetDisconnect": vins.ExtNetDisconnectRequest{}, - "/cloudapi/vins/extNetList": vins.ExtNetListRequest{}, - "/cloudapi/vins/get": vins.GetRequest{}, - "/cloudapi/vins/ipList": vins.IPListRequest{}, - "/cloudapi/vins/ipRelease": vins.IPReleaseRequest{}, - "/cloudapi/vins/ipReserve": vins.IPReserveRequest{}, - "/cloudapi/vins/list": vins.ListRequest{}, - "/cloudapi/vins/listDeleted": vins.ListDeletedRequest{}, - "/cloudapi/vins/natRuleAdd": vins.NATRuleAddRequest{}, - "/cloudapi/vins/natRuleDel": vins.NATRuleDelRequest{}, - "/cloudapi/vins/natRuleList": vins.NATRuleListRequest{}, - "/cloudapi/vins/restore": vins.RestoreRequest{}, - "/cloudapi/vins/search": vins.SearchRequest{}, - "/cloudapi/vins/staticRouteAccessGrant": vins.StaticRouteAccessGrantRequest{}, - "/cloudapi/vins/staticRouteAccessRevoke": vins.StaticRouteAccessRevokeRequest{}, - "/cloudapi/vins/staticRouteAdd": vins.StaticRouteAddRequest{}, - "/cloudapi/vins/staticRouteDel": vins.StaticRouteDelRequest{}, - "/cloudapi/vins/staticRouteList": vins.StaticRouteListRequest{}, - "/cloudapi/vins/vnfdevRedeploy": vins.VNFDevRedeployRequest{}, - "/cloudapi/vins/vnfdevRestart": vins.VNFDevRestartRequest{}, + "/restmachine/cloudapi/vins/audits": vins.AuditsRequest{}, + "/restmachine/cloudapi/vins/createInAccount": vins.CreateInAccountRequest{}, + "/restmachine/cloudapi/vins/createInRG": vins.CreateInRGRequest{}, + "/restmachine/cloudapi/vins/delete": vins.DeleteRequest{}, + "/restmachine/cloudapi/vins/disable": vins.DisableEnableRequest{}, + "/restmachine/cloudapi/vins/dnsApply": vins.DNSApplyRequest{}, + "/restmachine/cloudapi/vins/enable": vins.DisableEnableRequest{}, + "/restmachine/cloudapi/vins/extNetConnect": vins.ExtNetConnectRequest{}, + "/restmachine/cloudapi/vins/extNetDisconnect": vins.ExtNetDisconnectRequest{}, + "/restmachine/cloudapi/vins/extNetList": vins.ExtNetListRequest{}, + "/restmachine/cloudapi/vins/get": vins.GetRequest{}, + "/restmachine/cloudapi/vins/ipList": vins.IPListRequest{}, + "/restmachine/cloudapi/vins/ipRelease": vins.IPReleaseRequest{}, + "/restmachine/cloudapi/vins/ipReserve": vins.IPReserveRequest{}, + "/restmachine/cloudapi/vins/list": vins.ListRequest{}, + "/restmachine/cloudapi/vins/listDeleted": vins.ListDeletedRequest{}, + "/restmachine/cloudapi/vins/natRuleAdd": vins.NATRuleAddRequest{}, + "/restmachine/cloudapi/vins/natRuleDel": vins.NATRuleDelRequest{}, + "/restmachine/cloudapi/vins/natRuleList": vins.NATRuleListRequest{}, + "/restmachine/cloudapi/vins/restore": vins.RestoreRequest{}, + "/restmachine/cloudapi/vins/search": vins.SearchRequest{}, + "/restmachine/cloudapi/vins/staticRouteAccessGrant": vins.StaticRouteAccessGrantRequest{}, + "/restmachine/cloudapi/vins/staticRouteAccessRevoke": vins.StaticRouteAccessRevokeRequest{}, + "/restmachine/cloudapi/vins/staticRouteAdd": vins.StaticRouteAddRequest{}, + "/restmachine/cloudapi/vins/staticRouteDel": vins.StaticRouteDelRequest{}, + "/restmachine/cloudapi/vins/staticRouteList": vins.StaticRouteListRequest{}, + "/restmachine/cloudapi/vins/vnfdevRedeploy": vins.VNFDevRedeployRequest{}, + "/restmachine/cloudapi/vins/vnfdevRestart": vins.VNFDevRestartRequest{}, } } @@ -395,520 +388,515 @@ func getRequestsMapCloudAPI() map[string]interface{} { func getRequestsMapCloudbroker() map[string]interface{} { return map[string]interface{}{ // account_cb - "/cloudbroker/account/addUser": account_cb.AddUserRequest{}, - "/cloudbroker/account/audits": account_cb.AuditsRequest{}, - "/cloudbroker/account/create": account_cb.CreateRequest{}, - "/cloudbroker/account/delete": account_cb.DeleteRequest{}, - "/cloudbroker/account/deleteAccounts": account_cb.DeleteAccountsRequest{}, - "/cloudbroker/account/deleteUser": account_cb.DeleteUserRequest{}, - "/cloudbroker/account/disable": account_cb.DisableRequest{}, - "/cloudbroker/account/disableAccounts": account_cb.DisableAccountsRequest{}, - "/cloudbroker/account/enable": account_cb.EnableRequest{}, - "/cloudbroker/account/enableAccounts": account_cb.EnableAccountsRequest{}, - "/cloudbroker/account/get": account_cb.GetRequest{}, - "/cloudbroker/account/getResourceConsumption": account_cb.GetResourceConsumptionRequest{}, - "/cloudbroker/account/grantAccessTemplates": account_cb.GrantAccessTemplatesRequest{}, - "/cloudbroker/account/list": account_cb.ListRequest{}, - "/cloudbroker/account/listAvailableTemplates": account_cb.ListAvailableTemplatesRequest{}, - "/cloudbroker/account/listComputes": account_cb.ListComputesRequest{}, - "/cloudbroker/account/listDeleted": account_cb.ListDeletedRequest{}, - "/cloudbroker/account/listDisks": account_cb.ListDisksRequest{}, - "/cloudbroker/account/listFlipGroups": account_cb.ListFLIPGroupsRequest{}, - "/cloudbroker/account/listRG": account_cb.ListRGRequest{}, - "/cloudbroker/account/listResourceConsumption": EmptyStruct{}, - "/cloudbroker/account/listVins": account_cb.ListVINSRequest{}, - "/cloudbroker/account/restore": account_cb.RestoreRequest{}, - "/cloudbroker/account/revokeAccessTemplates": account_cb.RevokeAccessTemplatesRequest{}, - "/cloudbroker/account/setCpuAllocationParameter": account_cb.SetCPUAllocationParameterRequest{}, - "/cloudbroker/account/setCpuAllocationRatio": account_cb.SetCPUAllocationRatioRequest{}, - "/cloudbroker/account/update": account_cb.UpdateRequest{}, - "/cloudbroker/account/updateComputeFeatures": account_cb.UpdateComputeFeaturesRequest{}, - "/cloudbroker/account/updateResourceTypes": account_cb.UpdateResourceTypesRequest{}, - "/cloudbroker/account/updateUser": account_cb.UpdateUserRequest{}, + "/restmachine/cloudbroker/account/addUser": account_cb.AddUserRequest{}, + "/restmachine/cloudbroker/account/audits": account_cb.AuditsRequest{}, + "/restmachine/cloudbroker/account/create": account_cb.CreateRequest{}, + "/restmachine/cloudbroker/account/delete": account_cb.DeleteRequest{}, + "/restmachine/cloudbroker/account/deleteAccounts": account_cb.DeleteAccountsRequest{}, + "/restmachine/cloudbroker/account/deleteUser": account_cb.DeleteUserRequest{}, + "/restmachine/cloudbroker/account/disable": account_cb.DisableRequest{}, + "/restmachine/cloudbroker/account/disableAccounts": account_cb.DisableAccountsRequest{}, + "/restmachine/cloudbroker/account/enable": account_cb.EnableRequest{}, + "/restmachine/cloudbroker/account/enableAccounts": account_cb.EnableAccountsRequest{}, + "/restmachine/cloudbroker/account/get": account_cb.GetRequest{}, + "/restmachine/cloudbroker/account/getResourceConsumption": account_cb.GetResourceConsumptionRequest{}, + "/restmachine/cloudbroker/account/grantAccessTemplates": account_cb.GrantAccessTemplatesRequest{}, + "/restmachine/cloudbroker/account/list": account_cb.ListRequest{}, + "/restmachine/cloudbroker/account/listAvailableTemplates": account_cb.ListAvailableTemplatesRequest{}, + "/restmachine/cloudbroker/account/listComputes": account_cb.ListComputesRequest{}, + "/restmachine/cloudbroker/account/listDeleted": account_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/account/listDisks": account_cb.ListDisksRequest{}, + "/restmachine/cloudbroker/account/listFlipGroups": account_cb.ListFLIPGroupsRequest{}, + "/restmachine/cloudbroker/account/listRG": account_cb.ListRGRequest{}, + "/restmachine/cloudbroker/account/listResourceConsumption": EmptyStruct{}, + "/restmachine/cloudbroker/account/listVins": account_cb.ListVINSRequest{}, + "/restmachine/cloudbroker/account/restore": account_cb.RestoreRequest{}, + "/restmachine/cloudbroker/account/revokeAccessTemplates": account_cb.RevokeAccessTemplatesRequest{}, + "/restmachine/cloudbroker/account/setCpuAllocationParameter": account_cb.SetCPUAllocationParameterRequest{}, + "/restmachine/cloudbroker/account/setCpuAllocationRatio": account_cb.SetCPUAllocationRatioRequest{}, + "/restmachine/cloudbroker/account/update": account_cb.UpdateRequest{}, + "/restmachine/cloudbroker/account/updateComputeFeatures": account_cb.UpdateComputeFeaturesRequest{}, + "/restmachine/cloudbroker/account/updateResourceTypes": account_cb.UpdateResourceTypesRequest{}, + "/restmachine/cloudbroker/account/updateUser": account_cb.UpdateUserRequest{}, // apiaccess_cb - "/cloudbroker/apiaccess/apisExclude": apiaccess_cb.APIsExcludeRequest{}, - "/cloudbroker/apiaccess/apiFind": apiaccess_cb.APIFindRequest{}, - "/cloudbroker/apiaccess/apisInclude": apiaccess_cb.APIsIncludeRequest{}, - "/cloudbroker/apiaccess/copy": apiaccess_cb.CopyRequest{}, - "/cloudbroker/apiaccess/create": apiaccess_cb.CreateRequest{}, - "/cloudbroker/apiaccess/delete": apiaccess_cb.DeleteRequest{}, - "/cloudbroker/apiaccess/descUpdate": apiaccess_cb.DescUpdateRequest{}, - "/cloudbroker/apiaccess/get": apiaccess_cb.GetRequest{}, - "/cloudbroker/apiaccess/getFull": EmptyStruct{}, - "/cloudbroker/apiaccess/getPreGroups": EmptyStruct{}, - "/cloudbroker/apiaccess/list": apiaccess_cb.ListRequest{}, - "/cloudbroker/apiaccess/listDeleted": apiaccess_cb.ListDeletedRequest{}, - "/cloudbroker/apiaccess/setDefault": apiaccess_cb.SetDefaultRequest{}, - "/cloudbroker/apiaccess/subtract": apiaccess_cb.SubtractRequest{}, - "/cloudbroker/apiaccess/union": apiaccess_cb.UnionRequest{}, - "/cloudbroker/apiaccess/update": apiaccess_cb.UpdateRequest{}, - "/cloudbroker/apiaccess/userList": apiaccess_cb.UserListRequest{}, + "/restmachine/cloudbroker/apiaccess/apisExclude": apiaccess_cb.APIsExcludeRequest{}, + "/restmachine/cloudbroker/apiaccess/apiFind": apiaccess_cb.APIFindRequest{}, + "/restmachine/cloudbroker/apiaccess/apisInclude": apiaccess_cb.APIsIncludeRequest{}, + "/restmachine/cloudbroker/apiaccess/copy": apiaccess_cb.CopyRequest{}, + "/restmachine/cloudbroker/apiaccess/create": apiaccess_cb.CreateRequest{}, + "/restmachine/cloudbroker/apiaccess/delete": apiaccess_cb.DeleteRequest{}, + "/restmachine/cloudbroker/apiaccess/descUpdate": apiaccess_cb.DescUpdateRequest{}, + "/restmachine/cloudbroker/apiaccess/get": apiaccess_cb.GetRequest{}, + "/restmachine/cloudbroker/apiaccess/getFull": EmptyStruct{}, + "/restmachine/cloudbroker/apiaccess/getPreGroups": EmptyStruct{}, + "/restmachine/cloudbroker/apiaccess/list": apiaccess_cb.ListRequest{}, + "/restmachine/cloudbroker/apiaccess/listDeleted": apiaccess_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/apiaccess/setDefault": apiaccess_cb.SetDefaultRequest{}, + "/restmachine/cloudbroker/apiaccess/subtract": apiaccess_cb.SubtractRequest{}, + "/restmachine/cloudbroker/apiaccess/union": apiaccess_cb.UnionRequest{}, + "/restmachine/cloudbroker/apiaccess/update": apiaccess_cb.UpdateRequest{}, + "/restmachine/cloudbroker/apiaccess/userList": apiaccess_cb.UserListRequest{}, // audit_cb - "/cloudbroker/audit/get": audit_cb.GetRequest{}, - "/cloudbroker/audit/linkedJobs": audit_cb.LinkedJobsRequest{}, - "/cloudbroker/audit/list": audit_cb.ListRequest{}, + "/restmachine/cloudbroker/audit/get": audit_cb.GetRequest{}, + "/restmachine/cloudbroker/audit/linkedJobs": audit_cb.LinkedJobsRequest{}, + "/restmachine/cloudbroker/audit/list": audit_cb.ListRequest{}, // backup_cb - "/cloudbroker/backup/createDiskBackup": backup_cb.CreateDiskBackupRequest{}, - "/cloudbroker/backup/createDisksBackup": backup_cb.CreateDisksBackupRequest{}, - "/cloudbroker/backup/deleteDiskBackup": backup_cb.DeleteDiskBackupRequest{}, - "/cloudbroker/backup/listBackupPaths": backup_cb.ListBackupPathsRequest{}, - "/cloudbroker/backup/restoreDiskFromBackup": backup_cb.RestoreDiskFromBackupRequest{}, - "/cloudbroker/backup/restoreDisksFromBackup": backup_cb.RestoreDisksFromBackupRequest{}, + "/restmachine/cloudbroker/backup/createDiskBackup": backup_cb.CreateDiskBackupRequest{}, + "/restmachine/cloudbroker/backup/createDisksBackup": backup_cb.CreateDisksBackupRequest{}, + "/restmachine/cloudbroker/backup/deleteDiskBackup": backup_cb.DeleteDiskBackupRequest{}, + "/restmachine/cloudbroker/backup/listBackupPaths": backup_cb.ListBackupPathsRequest{}, + "/restmachine/cloudbroker/backup/restoreDiskFromBackup": backup_cb.RestoreDiskFromBackupRequest{}, + "/restmachine/cloudbroker/backup/restoreDisksFromBackup": backup_cb.RestoreDisksFromBackupRequest{}, // compute_cb - "/cloudbroker/compute/affinityGroupCheckStart": compute_cb.AffinityGroupCheckStartRequest{}, - "/cloudbroker/compute/affinityLabelRemove": compute_cb.AffinityLabelRemoveRequest{}, - "/cloudbroker/compute/affinityLabelSet": compute_cb.AffinityLabelSetRequest{}, - "/cloudbroker/compute/affinityRelations": compute_cb.AffinityRelationsRequest{}, - "/cloudbroker/compute/affinityRuleAdd": compute_cb.AffinityRuleAddRequest{}, - "/cloudbroker/compute/affinityRuleRemove": compute_cb.AffinityRuleRemoveRequest{}, - "/cloudbroker/compute/affinityRulesClear": compute_cb.AffinityRulesClearRequest{}, - "/cloudbroker/compute/antiAffinityRuleAdd": compute_cb.AntiAffinityRuleAddRequest{}, - "/cloudbroker/compute/antiAffinityRuleRemove": compute_cb.AntiAffinityRuleRemoveRequest{}, - "/cloudbroker/compute/antiAffinityRulesClear": compute_cb.AffinityRulesClearRequest{}, - "/cloudbroker/compute/attachGpu": compute_cb.AttachGPURequest{}, - "/cloudbroker/compute/attachPciDevice": compute_cb.AttachPCIDeviceRequest{}, - "/cloudbroker/compute/audits": compute_cb.AuditsRequest{}, - "/cloudbroker/compute/bootDiskSet": compute_cb.BootDiskSetRequest{}, - "/cloudbroker/compute/bootOrderGet": compute_cb.BootOrderGetRequest{}, - "/cloudbroker/compute/bootOrderSet": compute_cb.BootOrderSetRequest{}, - "/cloudbroker/compute/cdEject": compute_cb.CDEjectRequest{}, - "/cloudbroker/compute/cdInsert": compute_cb.CDInsertRequest{}, - "/cloudbroker/compute/changeLinkState": compute_cb.ChangeLinkStateRequest{}, - "/cloudbroker/compute/clone": compute_cb.CloneRequest{}, - "/cloudbroker/compute/computeciSet": compute_cb.ComputeCISetRequest{}, - "/cloudbroker/compute/computeciUnset": compute_cb.ComputeCIUnsetRequest{}, - "/cloudbroker/compute/createTemplate": compute_cb.CreateTemplateRequest{}, - "/cloudbroker/compute/createTemplateFromBlank": compute_cb.CreateTemplateFromBlankRequest{}, - "/cloudbroker/compute/delete": compute_cb.DeleteRequest{}, - "/cloudbroker/compute/deleteCustomFields": compute_cb.DeleteCustomFieldsRequest{}, - "/cloudbroker/compute/detachGpu": compute_cb.DetachGPURequest{}, - "/cloudbroker/compute/detachPciDevice": compute_cb.DetachPCIDeviceRequest{}, - "/cloudbroker/compute/disable": compute_cb.DisableRequest{}, - "/cloudbroker/compute/diskAdd": compute_cb.DiskAddRequest{}, - "/cloudbroker/compute/diskAttach": compute_cb.DiskAttachRequest{}, - "/cloudbroker/compute/diskDel": compute_cb.DiskDelRequest{}, - "/cloudbroker/compute/diskDetach": compute_cb.DiskDetachRequest{}, - "/cloudbroker/compute/diskMigrate": compute_cb.DiskMigrateRequest{}, - "/cloudbroker/compute/diskResize": compute_cb.DiskResizeRequest{}, - "/cloudbroker/compute/diskSwitchToReplication": compute_cb.DiskSwitchToReplicationRequest{}, - "/cloudbroker/compute/diskQos": compute_cb.DiskQOSRequest{}, - "/cloudbroker/compute/enable": compute_cb.EnableRequest{}, - "/cloudbroker/compute/get": compute_cb.GetRequest{}, - "/cloudbroker/compute/getAudits": compute_cb.GetAuditsRequest{}, - "/cloudbroker/compute/getConsoleUrl": compute_cb.GetConsoleURLRequest{}, - "/cloudbroker/compute/getCustomFields": compute_cb.GetCustomFieldsRequest{}, - "/cloudbroker/compute/getLog": compute_cb.GetLogRequest{}, - "/cloudbroker/compute/list": compute_cb.ListRequest{}, - "/cloudbroker/compute/listDeleted": compute_cb.ListDeletedRequest{}, - "/cloudbroker/compute/listPciDevice": compute_cb.ListPCIDeviceRequest{}, - "/cloudbroker/compute/listVGpu": compute_cb.ListVGPURequest{}, - "/cloudbroker/compute/massDelete": compute_cb.MassDeleteRequest{}, - "/cloudbroker/compute/massStart": compute_cb.MassStartRequest{}, - "/cloudbroker/compute/massStop": compute_cb.MassStopRequest{}, - "/cloudbroker/compute/massReboot": compute_cb.MassRebootRequest{}, - "/cloudbroker/compute/massRepairBootFs": compute_cb.MassRepairBootFSRequest{}, - "/cloudbroker/compute/migrate": compute_cb.MigrateRequest{}, - "/cloudbroker/compute/migrateStorage": compute_cb.MigrateStorageRequest{}, - "/cloudbroker/compute/migrateStorageAbort": compute_cb.MigrateStorageAbortRequest{}, - "/cloudbroker/compute/migrateStorageCleanup": compute_cb.MigrateStorageCleanUpRequest{}, - "/cloudbroker/compute/migrateStorageInfo": compute_cb.MigrateStorageInfoRequest{}, - "/cloudbroker/compute/moveToRg": compute_cb.MoveToRGRequest{}, - "/cloudbroker/compute/netAttach": compute_cb.NetAttachRequest{}, - "/cloudbroker/compute/netDetach": compute_cb.NetDetachRequest{}, - "/cloudbroker/compute/netQos": compute_cb.NetQOSRequest{}, - "/cloudbroker/compute/pfwAdd": compute_cb.PFWAddRequest{}, - "/cloudbroker/compute/pfwDel": compute_cb.PFWDelRequest{}, - "/cloudbroker/compute/pfwList": compute_cb.PFWListRequest{}, - "/cloudbroker/compute/pause": compute_cb.PauseRequest{}, - "/cloudbroker/compute/pinToStack": compute_cb.PinToStackRequest{}, - "/cloudbroker/compute/powerCycle": compute_cb.PowerCycleRequest{}, - "/cloudbroker/compute/raiseDown": EmptyStruct{}, - "/cloudbroker/compute/reboot": compute_cb.RebootRequest{}, - "/cloudbroker/compute/redeploy": compute_cb.RedeployRequest{}, - "/cloudbroker/compute/registration": compute_cb.RegistrationRequest{}, - "/cloudbroker/compute/repairBootFs": compute_cb.RepairBootFSRequest{}, - "/cloudbroker/compute/reset": compute_cb.ResetRequest{}, - "/cloudbroker/compute/resize": compute_cb.ResizeRequest{}, - "/cloudbroker/compute/restore": compute_cb.RestoreRequest{}, - "/cloudbroker/compute/resume": compute_cb.ResumeRequest{}, - "/cloudbroker/compute/setCustomFields": compute_cb.SetCustomFieldsRequest{}, - "/cloudbroker/compute/snapshotCreate": compute_cb.SnapshotCreateRequest{}, - "/cloudbroker/compute/snapshotDelete": compute_cb.SnapshotDeleteRequest{}, - "/cloudbroker/compute/snapshotEvictDisk": compute_cb.SnapshotEvictDiskRequest{}, - "/cloudbroker/compute/snapshotList": compute_cb.SnapshotListRequest{}, - "/cloudbroker/compute/snapshotRollback": compute_cb.SnapshotRollbackRequest{}, - "/cloudbroker/compute/snapshotUsage": compute_cb.SnapshotUsageRequest{}, - "/cloudbroker/compute/start": compute_cb.StartRequest{}, - "/cloudbroker/compute/stop": compute_cb.StopRequest{}, - "/cloudbroker/compute/tagAdd": compute_cb.TagAddRequest{}, - "/cloudbroker/compute/tagRemove": compute_cb.TagRemoveRequest{}, - "/cloudbroker/compute/unpinFromStack": compute_cb.UnpinFromStackRequest{}, - "/cloudbroker/compute/update": compute_cb.UpdateRequest{}, - "/cloudbroker/compute/userGrant": compute_cb.UserGrantRequest{}, - "/cloudbroker/compute/userList": compute_cb.UserListRequest{}, - "/cloudbroker/compute/userRevoke": compute_cb.UserRevokeRequest{}, - "/cloudbroker/compute/userUpdate": compute_cb.UserUpdateRequest{}, + "/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/massRepairBootFs": compute_cb.MassRepairBootFSRequest{}, + "/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/registration": compute_cb.RegistrationRequest{}, + "/restmachine/cloudbroker/compute/repairBootFs": compute_cb.RepairBootFSRequest{}, + "/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{}, // disks - "/cloudbroker/disks/create": disks_cb.CreateRequest{}, - "/cloudbroker/disks/delete": disks_cb.DeleteRequest{}, - "/cloudbroker/disks/deleteDisks": disks_cb.DeleteDisksRequest{}, - "/cloudbroker/disks/depresent": disks_cb.DepresentRequest{}, - "/cloudbroker/disks/fromPlatformDisk": disks_cb.FromPlatformDiskRequest{}, - "/cloudbroker/disks/get": disks_cb.GetRequest{}, - "/cloudbroker/disks/limitIO": disks_cb.LimitIORequest{}, - "/cloudbroker/disks/list": disks_cb.ListRequest{}, - "/cloudbroker/disks/listDeleted": disks_cb.ListDeletedRequest{}, - "/cloudbroker/disks/listTypes": disks_cb.ListTypesRequest{}, - "/cloudbroker/disks/listUnattached": disks_cb.ListUnattachedRequest{}, - "/cloudbroker/disks/rename": disks_cb.RenameRequest{}, - "/cloudbroker/disks/present": disks_cb.PresentRequest{}, - "/cloudbroker/disks/replicate": disks_cb.ReplicateRequest{}, - "/cloudbroker/disks/replicationResume": disks_cb.ReplicationResumeRequest{}, - "/cloudbroker/disks/replicationReverse": disks_cb.ReplicationReverseRequest{}, - "/cloudbroker/disks/replicationStart": disks_cb.ReplicationStartRequest{}, - "/cloudbroker/disks/replicationStatus": disks_cb.ReplicationStatusRequest{}, - "/cloudbroker/disks/replicationStop": disks_cb.ReplicationStopRequest{}, - "/cloudbroker/disks/replicationSuspend": disks_cb.ReplicationSuspendRequest{}, - "/cloudbroker/disks/resize": disks_cb.ResizeRequest{}, - "/cloudbroker/disks/resize2": disks_cb.ResizeRequest{}, - "/cloudbroker/disks/restore": disks_cb.RestoreRequest{}, - "/cloudbroker/disks/search": disks_cb.SearchRequest{}, - "/cloudbroker/disks/share": disks_cb.ShareRequest{}, - "/cloudbroker/disks/snapshotDelete": disks_cb.SnapshotDeleteRequest{}, - "/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{}, - "/cloudbroker/disks/unshare": disks_cb.UnshareRequest{}, + "/restmachine/cloudbroker/disks/create": disks_cb.CreateRequest{}, + "/restmachine/cloudbroker/disks/delete": disks_cb.DeleteRequest{}, + "/restmachine/cloudbroker/disks/deleteDisks": disks_cb.DeleteDisksRequest{}, + "/restmachine/cloudbroker/disks/depresent": disks_cb.DepresentRequest{}, + "/restmachine/cloudbroker/disks/fromPlatformDisk": disks_cb.FromPlatformDiskRequest{}, + "/restmachine/cloudbroker/disks/get": disks_cb.GetRequest{}, + "/restmachine/cloudbroker/disks/limitIO": disks_cb.LimitIORequest{}, + "/restmachine/cloudbroker/disks/list": disks_cb.ListRequest{}, + "/restmachine/cloudbroker/disks/listDeleted": disks_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/disks/listTypes": disks_cb.ListTypesRequest{}, + "/restmachine/cloudbroker/disks/listUnattached": disks_cb.ListUnattachedRequest{}, + "/restmachine/cloudbroker/disks/rename": disks_cb.RenameRequest{}, + "/restmachine/cloudbroker/disks/present": disks_cb.PresentRequest{}, + "/restmachine/cloudbroker/disks/replicate": disks_cb.ReplicateRequest{}, + "/restmachine/cloudbroker/disks/replicationResume": disks_cb.ReplicationResumeRequest{}, + "/restmachine/cloudbroker/disks/replicationReverse": disks_cb.ReplicationReverseRequest{}, + "/restmachine/cloudbroker/disks/replicationStart": disks_cb.ReplicationStartRequest{}, + "/restmachine/cloudbroker/disks/replicationStatus": disks_cb.ReplicationStatusRequest{}, + "/restmachine/cloudbroker/disks/replicationStop": disks_cb.ReplicationStopRequest{}, + "/restmachine/cloudbroker/disks/replicationSuspend": disks_cb.ReplicationSuspendRequest{}, + "/restmachine/cloudbroker/disks/resize": disks_cb.ResizeRequest{}, + "/restmachine/cloudbroker/disks/resize2": disks_cb.ResizeRequest{}, + "/restmachine/cloudbroker/disks/restore": disks_cb.RestoreRequest{}, + "/restmachine/cloudbroker/disks/search": disks_cb.SearchRequest{}, + "/restmachine/cloudbroker/disks/share": disks_cb.ShareRequest{}, + "/restmachine/cloudbroker/disks/snapshotDelete": disks_cb.SnapshotDeleteRequest{}, + "/restmachine/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{}, + "/restmachine/cloudbroker/disks/unshare": disks_cb.UnshareRequest{}, // extnet - "/cloudbroker/extnet/accessAdd": extnet_cb.AccessAddRequest{}, - "/cloudbroker/extnet/accessRemove": extnet_cb.AccessRemoveRequest{}, - "/cloudbroker/extnet/create": extnet_cb.CreateRequest{}, - "/cloudbroker/extnet/dnsApply": extnet_cb.DNSApplyRequest{}, - "/cloudbroker/extnet/defaultQosUpdate": extnet_cb.DefaultQOSUpdateRequest{}, - "/cloudbroker/extnet/destroy": extnet_cb.DestroyRequest{}, - "/cloudbroker/extnet/deviceDeploy": extnet_cb.DeviceDeployRequest{}, - "/cloudbroker/extnet/deviceMigrate": extnet_cb.DeviceMigrateRequest{}, - "/cloudbroker/extnet/deviceRemove": extnet_cb.DeviceRemoveRequest{}, - "/cloudbroker/extnet/deviceRestart": extnet_cb.DeviceRestartRequest{}, - "/cloudbroker/extnet/disable": extnet_cb.DisableRequest{}, - "/cloudbroker/extnet/enable": extnet_cb.EnableRequest{}, - "/cloudbroker/extnet/get": extnet_cb.GetRequest{}, - "/cloudbroker/extnet/getDefault": EmptyStruct{}, - "/cloudbroker/extnet/ipsExclude": extnet_cb.IPsExcludeRequest{}, - "/cloudbroker/extnet/ipsExcludeRange": extnet_cb.IPsExcludeRangeRequest{}, - "/cloudbroker/extnet/ipsInclude": extnet_cb.IPsExcludeRequest{}, - "/cloudbroker/extnet/ipsIncludeRange": extnet_cb.IPsExcludeRangeRequest{}, - "/cloudbroker/extnet/list": extnet_cb.ListRequest{}, - "/cloudbroker/extnet/ntpApply": extnet_cb.NTPApplyRequest{}, - "/cloudbroker/extnet/raiseDown": EmptyStruct{}, - "/cloudbroker/extnet/setDefault": extnet_cb.SetDefaultRequest{}, - "/cloudbroker/extnet/staticRouteAccessGrant": extnet_cb.StaticRouteAccessGrantRequest{}, - "/cloudbroker/extnet/staticRouteAccessRevoke": extnet_cb.StaticRouteAccessRevokeRequest{}, - "/cloudbroker/extnet/staticRouteAdd": extnet_cb.StaticRouteAddRequest{}, - "/cloudbroker/extnet/staticRouteDel": extnet_cb.StaticRouteDelRequest{}, - "/cloudbroker/extnet/staticRouteList": extnet_cb.StaticRouteListRequest{}, - "/cloudbroker/extnet/update": extnet_cb.UpdateRequest{}, + "/restmachine/cloudbroker/extnet/accessAdd": extnet_cb.AccessAddRequest{}, + "/restmachine/cloudbroker/extnet/accessRemove": extnet_cb.AccessRemoveRequest{}, + "/restmachine/cloudbroker/extnet/create": extnet_cb.CreateRequest{}, + "/restmachine/cloudbroker/extnet/dnsApply": extnet_cb.DNSApplyRequest{}, + "/restmachine/cloudbroker/extnet/defaultQosUpdate": extnet_cb.DefaultQOSUpdateRequest{}, + "/restmachine/cloudbroker/extnet/destroy": extnet_cb.DestroyRequest{}, + "/restmachine/cloudbroker/extnet/deviceDeploy": extnet_cb.DeviceDeployRequest{}, + "/restmachine/cloudbroker/extnet/deviceMigrate": extnet_cb.DeviceMigrateRequest{}, + "/restmachine/cloudbroker/extnet/deviceRemove": extnet_cb.DeviceRemoveRequest{}, + "/restmachine/cloudbroker/extnet/deviceRestart": extnet_cb.DeviceRestartRequest{}, + "/restmachine/cloudbroker/extnet/disable": extnet_cb.DisableRequest{}, + "/restmachine/cloudbroker/extnet/enable": extnet_cb.EnableRequest{}, + "/restmachine/cloudbroker/extnet/get": extnet_cb.GetRequest{}, + "/restmachine/cloudbroker/extnet/getDefault": EmptyStruct{}, + "/restmachine/cloudbroker/extnet/ipsExclude": extnet_cb.IPsExcludeRequest{}, + "/restmachine/cloudbroker/extnet/ipsExcludeRange": extnet_cb.IPsExcludeRangeRequest{}, + "/restmachine/cloudbroker/extnet/ipsInclude": extnet_cb.IPsExcludeRequest{}, + "/restmachine/cloudbroker/extnet/ipsIncludeRange": extnet_cb.IPsExcludeRangeRequest{}, + "/restmachine/cloudbroker/extnet/list": extnet_cb.ListRequest{}, + "/restmachine/cloudbroker/extnet/ntpApply": extnet_cb.NTPApplyRequest{}, + "/restmachine/cloudbroker/extnet/raiseDown": EmptyStruct{}, + "/restmachine/cloudbroker/extnet/setDefault": extnet_cb.SetDefaultRequest{}, + "/restmachine/cloudbroker/extnet/staticRouteAccessGrant": extnet_cb.StaticRouteAccessGrantRequest{}, + "/restmachine/cloudbroker/extnet/staticRouteAccessRevoke": extnet_cb.StaticRouteAccessRevokeRequest{}, + "/restmachine/cloudbroker/extnet/staticRouteAdd": extnet_cb.StaticRouteAddRequest{}, + "/restmachine/cloudbroker/extnet/staticRouteDel": extnet_cb.StaticRouteDelRequest{}, + "/restmachine/cloudbroker/extnet/staticRouteList": extnet_cb.StaticRouteListRequest{}, + "/restmachine/cloudbroker/extnet/update": extnet_cb.UpdateRequest{}, // flipgroup - "/cloudbroker/flipgroup/computeAdd": flipgroup_cb.ComputeAddRequest{}, - "/cloudbroker/flipgroup/computeRemove": flipgroup_cb.ComputeRemoveRequest{}, - "/cloudbroker/flipgroup/create": flipgroup_cb.CreateRequest{}, - "/cloudbroker/flipgroup/delete": flipgroup_cb.DeleteRequest{}, - "/cloudbroker/flipgroup/edit": flipgroup_cb.EditRequest{}, - "/cloudbroker/flipgroup/get": flipgroup_cb.GetRequest{}, - "/cloudbroker/flipgroup/list": flipgroup_cb.ListRequest{}, + "/restmachine/cloudbroker/flipgroup/computeAdd": flipgroup_cb.ComputeAddRequest{}, + "/restmachine/cloudbroker/flipgroup/computeRemove": flipgroup_cb.ComputeRemoveRequest{}, + "/restmachine/cloudbroker/flipgroup/create": flipgroup_cb.CreateRequest{}, + "/restmachine/cloudbroker/flipgroup/delete": flipgroup_cb.DeleteRequest{}, + "/restmachine/cloudbroker/flipgroup/edit": flipgroup_cb.EditRequest{}, + "/restmachine/cloudbroker/flipgroup/get": flipgroup_cb.GetRequest{}, + "/restmachine/cloudbroker/flipgroup/list": flipgroup_cb.ListRequest{}, // grid - "/cloudbroker/grid/add": grid_cb.AddRequest{}, - "/cloudbroker/grid/addCustomBackupPath": grid_cb.AddCustomBackupPathRequest{}, - "/cloudbroker/grid/changeSettings": grid_cb.ChangeSettingsRequest{}, - "/cloudbroker/grid/checkVMs": grid_cb.CheckVMsRequest{}, - "/cloudbroker/grid/createSystemSpace": grid_cb.CreateSystemSpaceRequest{}, - "/cloudbroker/grid/executeMaintenanceScript": grid_cb.ExecuteMaintenanceScriptRequest{}, - "/cloudbroker/grid/get": grid_cb.GetRequest{}, - "/cloudbroker/grid/getBackup": grid_cb.GetBackupRequest{}, - "/cloudbroker/grid/getDiagnosis": grid_cb.GetDiagnosisRequest{}, - "/cloudbroker/grid/getResourceConsumption": grid_cb.GetResourceConsumptionRequest{}, - "/cloudbroker/grid/list": grid_cb.ListRequest{}, - "/cloudbroker/grid/listEmails": grid_cb.ListEmailsRequest{}, - "/cloudbroker/grid/listResourceConsumption": EmptyStruct{}, - "/cloudbroker/grid/purgeLogs": grid_cb.PurgeLogsRequest{}, - "/cloudbroker/grid/removeCustomBackupPath": grid_cb.RemoveCustomBackupPathRequest{}, - "/cloudbroker/grid/rename": grid_cb.RenameRequest{}, - "/cloudbroker/grid/servicesRestart": grid_cb.ServicesRestartRequest{}, - "/cloudbroker/grid/setCpuAllocationParameter": grid_cb.SetCPUAllocationParameterRequest{}, - "/cloudbroker/grid/setCpuAllocationRatio": grid_cb.SetCPUAllocationRatioRequest{}, - "/cloudbroker/grid/setCpuAllocationRatioForVM": grid_cb.SetCPUAllocationRatioForVMRequest{}, - "/cloudbroker/grid/setMemAllocationRatio": grid_cb.SetMemAllocationRatioRequest{}, - "/cloudbroker/grid/setPasswordPolicy": grid_cb.SetPasswordPolicyRequest{}, - "/cloudbroker/grid/status": EmptyStruct{}, + "/restmachine/cloudbroker/grid/add": grid_cb.AddRequest{}, + "/restmachine/cloudbroker/grid/addCustomBackupPath": grid_cb.AddCustomBackupPathRequest{}, + "/restmachine/cloudbroker/grid/changeSettings": grid_cb.ChangeSettingsRequest{}, + "/restmachine/cloudbroker/grid/executeMaintenanceScript": grid_cb.ExecuteMaintenanceScriptRequest{}, + "/restmachine/cloudbroker/grid/get": grid_cb.GetRequest{}, + "/restmachine/cloudbroker/grid/getBackup": grid_cb.GetBackupRequest{}, + "/restmachine/cloudbroker/grid/getDiagnosis": grid_cb.GetDiagnosisRequest{}, + "/restmachine/cloudbroker/grid/getResourceConsumption": grid_cb.GetResourceConsumptionRequest{}, + "/restmachine/cloudbroker/grid/list": grid_cb.ListRequest{}, + "/restmachine/cloudbroker/grid/listEmails": grid_cb.ListEmailsRequest{}, + "/restmachine/cloudbroker/grid/listResourceConsumption": EmptyStruct{}, + "/restmachine/cloudbroker/grid/purgeLogs": grid_cb.PurgeLogsRequest{}, + "/restmachine/cloudbroker/grid/removeCustomBackupPath": grid_cb.RemoveCustomBackupPathRequest{}, + "/restmachine/cloudbroker/grid/rename": grid_cb.RenameRequest{}, + "/restmachine/cloudbroker/grid/servicesRestart": grid_cb.ServicesRestartRequest{}, + "/restmachine/cloudbroker/grid/setCpuAllocationParameter": grid_cb.SetCPUAllocationParameterRequest{}, + "/restmachine/cloudbroker/grid/setCpuAllocationRatio": grid_cb.SetCPUAllocationRatioRequest{}, + "/restmachine/cloudbroker/grid/setCpuAllocationRatioForVM": grid_cb.SetCPUAllocationRatioForVMRequest{}, + "/restmachine/cloudbroker/grid/setMemAllocationRatio": grid_cb.SetMemAllocationRatioRequest{}, + "/restmachine/cloudbroker/grid/setPasswordPolicy": grid_cb.SetPasswordPolicyRequest{}, + "/restmachine/cloudbroker/grid/status": EmptyStruct{}, // group - "/cloudbroker/group/get": group_cb.GetRequest{}, - "/cloudbroker/group/list": group_cb.ListRequest{}, + "/restmachine/cloudbroker/group/get": group_cb.GetRequest{}, + "/restmachine/cloudbroker/group/list": group_cb.ListRequest{}, // image - "/cloudbroker/image/computeciSet": image_cb.ComputeCISetRequest{}, - "/cloudbroker/image/computeciUnset": image_cb.ComputeCIUnsetRequest{}, - "/cloudbroker/image/createCDROMImage": image_cb.CreateCDROMImageRequest{}, - "/cloudbroker/image/createImage": image_cb.CreateRequest{}, - "/cloudbroker/image/createVirtual": image_cb.CreateVirtualRequest{}, - "/cloudbroker/image/delete": image_cb.DeleteRequest{}, - "/cloudbroker/image/deleteCDROMImage": image_cb.DeleteCDROMImageRequest{}, - "/cloudbroker/image/deleteImages": image_cb.DeleteImagesRequest{}, - "/cloudbroker/image/disable": image_cb.DisableRequest{}, - "/cloudbroker/image/edit": image_cb.EditRequest{}, - "/cloudbroker/image/enable": image_cb.EnableRequest{}, - "/cloudbroker/image/get": image_cb.GetRequest{}, - "/cloudbroker/image/grantAccess": image_cb.GrantAccessRequest{}, - "/cloudbroker/image/link": image_cb.LinkRequest{}, - "/cloudbroker/image/list": image_cb.ListRequest{}, - "/cloudbroker/image/listStacks": image_cb.ListStacksRequest{}, - "/cloudbroker/image/rename": image_cb.RenameRequest{}, - "/cloudbroker/image/revokeAccess": image_cb.RevokeAccessRequest{}, - "/cloudbroker/image/share": image_cb.ShareRequest{}, - "/cloudbroker/image/syncCreateImage": image_cb.SyncCreateRequest{}, - "/cloudbroker/image/updateNodes": image_cb.UpdateNodesRequest{}, + "/restmachine/cloudbroker/image/computeciSet": image_cb.ComputeCISetRequest{}, + "/restmachine/cloudbroker/image/computeciUnset": image_cb.ComputeCIUnsetRequest{}, + "/restmachine/cloudbroker/image/createCDROMImage": image_cb.CreateCDROMImageRequest{}, + "/restmachine/cloudbroker/image/createImage": image_cb.CreateRequest{}, + "/restmachine/cloudbroker/image/createVirtual": image_cb.CreateVirtualRequest{}, + "/restmachine/cloudbroker/image/delete": image_cb.DeleteRequest{}, + "/restmachine/cloudbroker/image/deleteCDROMImage": image_cb.DeleteCDROMImageRequest{}, + "/restmachine/cloudbroker/image/deleteImages": image_cb.DeleteImagesRequest{}, + "/restmachine/cloudbroker/image/disable": image_cb.DisableRequest{}, + "/restmachine/cloudbroker/image/edit": image_cb.EditRequest{}, + "/restmachine/cloudbroker/image/enable": image_cb.EnableRequest{}, + "/restmachine/cloudbroker/image/get": image_cb.GetRequest{}, + "/restmachine/cloudbroker/image/grantAccess": image_cb.GrantAccessRequest{}, + "/restmachine/cloudbroker/image/link": image_cb.LinkRequest{}, + "/restmachine/cloudbroker/image/list": image_cb.ListRequest{}, + "/restmachine/cloudbroker/image/listStacks": image_cb.ListStacksRequest{}, + "/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 - "/cloudbroker/k8ci/accessAdd": k8ci_cb.AccessAddRequest{}, - "/cloudbroker/k8ci/accessRemove": k8ci_cb.AccessRemoveRequest{}, - "/cloudbroker/k8ci/create": k8ci_cb.CreateRequest{}, - "/cloudbroker/k8ci/delete": k8ci_cb.DeleteRequest{}, - "/cloudbroker/k8ci/disable": k8ci_cb.DisableRequest{}, - "/cloudbroker/k8ci/enable": k8ci_cb.EnableRequest{}, - "/cloudbroker/k8ci/get": k8ci_cb.GetRequest{}, - "/cloudbroker/k8ci/list": k8ci_cb.ListRequest{}, - "/cloudbroker/k8ci/listDeleted": k8ci_cb.ListDeletedRequest{}, - "/cloudbroker/k8ci/restore": k8ci_cb.RestoreRequest{}, + "/restmachine/cloudbroker/k8ci/accessAdd": k8ci_cb.AccessAddRequest{}, + "/restmachine/cloudbroker/k8ci/accessRemove": k8ci_cb.AccessRemoveRequest{}, + "/restmachine/cloudbroker/k8ci/create": k8ci_cb.CreateRequest{}, + "/restmachine/cloudbroker/k8ci/delete": k8ci_cb.DeleteRequest{}, + "/restmachine/cloudbroker/k8ci/disable": k8ci_cb.DisableRequest{}, + "/restmachine/cloudbroker/k8ci/enable": k8ci_cb.EnableRequest{}, + "/restmachine/cloudbroker/k8ci/get": k8ci_cb.GetRequest{}, + "/restmachine/cloudbroker/k8ci/list": k8ci_cb.ListRequest{}, + "/restmachine/cloudbroker/k8ci/listDeleted": k8ci_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/k8ci/restore": k8ci_cb.RestoreRequest{}, // k8s - "/cloudbroker/k8s/create": k8s_cb.CreateRequest{}, - "/cloudbroker/k8s/delete": k8s_cb.DeleteRequest{}, - "/cloudbroker/k8s/deleteMasterFromGroup": k8s_cb.DeleteMasterFromGroupRequest{}, - "/cloudbroker/k8s/deleteWorkerFromGroup": k8s_cb.DeleteWorkerFromGroupRequest{}, - "/cloudbroker/k8s/disable": k8s_cb.DisableRequest{}, - "/cloudbroker/k8s/enable": k8s_cb.EnableRequest{}, - "/cloudbroker/k8s/findGroupByLabel": k8s_cb.FindGroupByLabelRequest{}, - "/cloudbroker/k8s/get": k8s_cb.GetRequest{}, - "/cloudbroker/k8s/getConfig": k8s_cb.GetConfigRequest{}, - "/cloudbroker/k8s/getNodeAnnotations": k8s_cb.GetNodeAnnotationsRequest{}, - "/cloudbroker/k8s/getNodeLabels": k8s_cb.GetNodeLabelsRequest{}, - "/cloudbroker/k8s/getNodeTaints": k8s_cb.GetNodeTaintsRequest{}, - "/cloudbroker/k8s/getWorkerNodesMetaData": k8s_cb.GetWorkerNodesMetaDataRequest{}, - "/cloudbroker/k8s/list": k8s_cb.ListRequest{}, - "/cloudbroker/k8s/listDeleted": k8s_cb.ListDeletedRequest{}, - "/cloudbroker/k8s/restore": k8s_cb.RestoreRequest{}, - "/cloudbroker/k8s/start": k8s_cb.StartRequest{}, - "/cloudbroker/k8s/stop": k8s_cb.StopRequest{}, - "/cloudbroker/k8s/update": k8s_cb.UpdateRequest{}, - "/cloudbroker/k8s/updateWorkerNodesMetaData": k8s_cb.UpdateWorkerNodesMetaDataRequest{}, - "/cloudbroker/k8s/workerAdd": k8s_cb.WorkerAddRequest{}, - "/cloudbroker/k8s/workersGroupAdd": k8s_cb.WorkersGroupAddRequest{}, - "/cloudbroker/k8s/workersGroupDelete": k8s_cb.WorkersGroupDeleteRequest{}, - "/cloudbroker/k8s/workersGroupGetByName": k8s_cb.WorkersGroupGetByNameRequest{}, - "/cloudbroker/k8s/workerReset": k8s_cb.WorkerResetRequest{}, - "/cloudbroker/k8s/workerRestart": k8s_cb.WorkerRestartRequest{}, - - // kvmppc, kvmx86 - "/cloudbroker/kvmppc/create": kvmppc_cb.CreateRequest{}, - "/cloudbroker/kvmppc/createBlank": kvmppc_cb.CreateBlankRequest{}, - "/cloudbroker/kvmppc/massCreate": kvmppc_cb.MassCreateRequest{}, - "/cloudbroker/kvmx86/create": kvmx86_cb.CreateRequest{}, - "/cloudbroker/kvmx86/createBlank": kvmx86_cb.CreateBlankRequest{}, - "/cloudbroker/kvmx86/massCreate": kvmx86_cb.MassCreateRequest{}, + "/restmachine/cloudbroker/k8s/create": k8s_cb.CreateRequest{}, + "/restmachine/cloudbroker/k8s/delete": k8s_cb.DeleteRequest{}, + "/restmachine/cloudbroker/k8s/deleteMasterFromGroup": k8s_cb.DeleteMasterFromGroupRequest{}, + "/restmachine/cloudbroker/k8s/deleteWorkerFromGroup": k8s_cb.DeleteWorkerFromGroupRequest{}, + "/restmachine/cloudbroker/k8s/disable": k8s_cb.DisableRequest{}, + "/restmachine/cloudbroker/k8s/enable": k8s_cb.EnableRequest{}, + "/restmachine/cloudbroker/k8s/findGroupByLabel": k8s_cb.FindGroupByLabelRequest{}, + "/restmachine/cloudbroker/k8s/get": k8s_cb.GetRequest{}, + "/restmachine/cloudbroker/k8s/getConfig": k8s_cb.GetConfigRequest{}, + "/restmachine/cloudbroker/k8s/getNodeAnnotations": k8s_cb.GetNodeAnnotationsRequest{}, + "/restmachine/cloudbroker/k8s/getNodeLabels": k8s_cb.GetNodeLabelsRequest{}, + "/restmachine/cloudbroker/k8s/getNodeTaints": k8s_cb.GetNodeTaintsRequest{}, + "/restmachine/cloudbroker/k8s/getWorkerNodesMetaData": k8s_cb.GetWorkerNodesMetaDataRequest{}, + "/restmachine/cloudbroker/k8s/list": k8s_cb.ListRequest{}, + "/restmachine/cloudbroker/k8s/listDeleted": k8s_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/k8s/restore": k8s_cb.RestoreRequest{}, + "/restmachine/cloudbroker/k8s/start": k8s_cb.StartRequest{}, + "/restmachine/cloudbroker/k8s/stop": k8s_cb.StopRequest{}, + "/restmachine/cloudbroker/k8s/update": k8s_cb.UpdateRequest{}, + "/restmachine/cloudbroker/k8s/updateWorkerNodesMetaData": k8s_cb.UpdateWorkerNodesMetaDataRequest{}, + "/restmachine/cloudbroker/k8s/workerAdd": k8s_cb.WorkerAddRequest{}, + "/restmachine/cloudbroker/k8s/workersGroupAdd": k8s_cb.WorkersGroupAddRequest{}, + "/restmachine/cloudbroker/k8s/workersGroupDelete": k8s_cb.WorkersGroupDeleteRequest{}, + "/restmachine/cloudbroker/k8s/workersGroupGetByName": k8s_cb.WorkersGroupGetByNameRequest{}, + "/restmachine/cloudbroker/k8s/workerReset": k8s_cb.WorkerResetRequest{}, + "/restmachine/cloudbroker/k8s/workerRestart": k8s_cb.WorkerRestartRequest{}, + + // kvmx86 + "/restmachine/cloudbroker/kvmx86/create": kvmx86_cb.CreateRequest{}, + "/restmachine/cloudbroker/kvmx86/createBlank": kvmx86_cb.CreateBlankRequest{}, + "/restmachine/cloudbroker/kvmx86/massCreate": kvmx86_cb.MassCreateRequest{}, // lb - "/cloudbroker/lb/backendCreate": lb_cb.BackendCreateRequest{}, - "/cloudbroker/lb/backendDelete": lb_cb.BackendDeleteRequest{}, - "/cloudbroker/lb/backendServerAdd": lb_cb.BackendServerAddRequest{}, - "/cloudbroker/lb/backendServerDelete": lb_cb.BackendServerDeleteRequest{}, - "/cloudbroker/lb/backendServerUpdate": lb_cb.BackendServerUpdateRequest{}, - "/cloudbroker/lb/backendUpdate": lb_cb.BackendUpdateRequest{}, - "/cloudbroker/lb/configReset": lb_cb.ConfigResetRequest{}, - "/cloudbroker/lb/create": lb_cb.CreateRequest{}, - "/cloudbroker/lb/delete": lb_cb.DeleteRequest{}, - "/cloudbroker/lb/disable": lb_cb.DisableRequest{}, - "/cloudbroker/lb/enable": lb_cb.EnableRequest{}, - "/cloudbroker/lb/frontendBind": lb_cb.FrontendBindRequest{}, - "/cloudbroker/lb/frontendBindDelete": lb_cb.FrontendBindDeleteRequest{}, - "/cloudbroker/lb/frontendBindingUpdate": lb_cb.FrontendBindUpdateRequest{}, - "/cloudbroker/lb/frontendCreate": lb_cb.FrontendCreateRequest{}, - "/cloudbroker/lb/frontendDelete": lb_cb.FrontendDeleteRequest{}, - "/cloudbroker/lb/get": lb_cb.GetRequest{}, - "/cloudbroker/lb/makeHighlyAvailable": lb_cb.HighlyAvailableRequest{}, - "/cloudbroker/lb/list": lb_cb.ListRequest{}, - "/cloudbroker/lb/listDeleted": lb_cb.ListDeletedRequest{}, - "/cloudbroker/lb/restart": lb_cb.RestartRequest{}, - "/cloudbroker/lb/restore": lb_cb.RestoreRequest{}, - "/cloudbroker/lb/start": lb_cb.StartRequest{}, - "/cloudbroker/lb/stop": lb_cb.StopRequest{}, - "/cloudbroker/lb/update": lb_cb.UpdateRequest{}, - "/cloudbroker/lb/updateSysctlParams": lb_cb.UpdateSysctParamsRequest{}, + "/restmachine/cloudbroker/lb/backendCreate": lb_cb.BackendCreateRequest{}, + "/restmachine/cloudbroker/lb/backendDelete": lb_cb.BackendDeleteRequest{}, + "/restmachine/cloudbroker/lb/backendServerAdd": lb_cb.BackendServerAddRequest{}, + "/restmachine/cloudbroker/lb/backendServerDelete": lb_cb.BackendServerDeleteRequest{}, + "/restmachine/cloudbroker/lb/backendServerUpdate": lb_cb.BackendServerUpdateRequest{}, + "/restmachine/cloudbroker/lb/backendUpdate": lb_cb.BackendUpdateRequest{}, + "/restmachine/cloudbroker/lb/configReset": lb_cb.ConfigResetRequest{}, + "/restmachine/cloudbroker/lb/create": lb_cb.CreateRequest{}, + "/restmachine/cloudbroker/lb/delete": lb_cb.DeleteRequest{}, + "/restmachine/cloudbroker/lb/disable": lb_cb.DisableRequest{}, + "/restmachine/cloudbroker/lb/enable": lb_cb.EnableRequest{}, + "/restmachine/cloudbroker/lb/frontendBind": lb_cb.FrontendBindRequest{}, + "/restmachine/cloudbroker/lb/frontendBindDelete": lb_cb.FrontendBindDeleteRequest{}, + "/restmachine/cloudbroker/lb/frontendBindingUpdate": lb_cb.FrontendBindUpdateRequest{}, + "/restmachine/cloudbroker/lb/frontendCreate": lb_cb.FrontendCreateRequest{}, + "/restmachine/cloudbroker/lb/frontendDelete": lb_cb.FrontendDeleteRequest{}, + "/restmachine/cloudbroker/lb/get": lb_cb.GetRequest{}, + "/restmachine/cloudbroker/lb/makeHighlyAvailable": lb_cb.HighlyAvailableRequest{}, + "/restmachine/cloudbroker/lb/list": lb_cb.ListRequest{}, + "/restmachine/cloudbroker/lb/listDeleted": lb_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/lb/restart": lb_cb.RestartRequest{}, + "/restmachine/cloudbroker/lb/restore": lb_cb.RestoreRequest{}, + "/restmachine/cloudbroker/lb/start": lb_cb.StartRequest{}, + "/restmachine/cloudbroker/lb/stop": lb_cb.StopRequest{}, + "/restmachine/cloudbroker/lb/update": lb_cb.UpdateRequest{}, + "/restmachine/cloudbroker/lb/updateSysctlParams": lb_cb.UpdateSysctParamsRequest{}, // node - "/cloudbroker/node/applyIpmiAction": node_cb.ApplyIpmiActionRequest{}, - "/cloudbroker/node/consumption": node_cb.ConsumptionRequest{}, - "/cloudbroker/node/decommission": node_cb.DecommissionRequest{}, - "/cloudbroker/node/enable": node_cb.EnableRequest{}, - "/cloudbroker/node/enableNodes": node_cb.EnableNodesRequest{}, - "/cloudbroker/node/get": node_cb.GetRequest{}, - "/cloudbroker/node/list": node_cb.ListRequest{}, - "/cloudbroker/node/maintenance": node_cb.MaintenanceRequest{}, - "/cloudbroker/node/restrict": node_cb.RestrictRequest{}, - "/cloudbroker/node/setCoreIsolation": node_cb.SetCoreIsolationRequest{}, - "/cloudbroker/node/setHugePages": node_cb.SetHugePagesRequest{}, - "/cloudbroker/node/setsriovstatus": node_cb.SetSRIOVStatusRequest{}, - "/cloudbroker/node/setVFsNumber": node_cb.SetVFsNumberRequest{}, - "/cloudbroker/node/update": node_cb.UpdateRequest{}, + "/restmachine/cloudbroker/node/applyIpmiAction": node_cb.ApplyIpmiActionRequest{}, + "/restmachine/cloudbroker/node/consumption": node_cb.ConsumptionRequest{}, + "/restmachine/cloudbroker/node/decommission": node_cb.DecommissionRequest{}, + "/restmachine/cloudbroker/node/enable": node_cb.EnableRequest{}, + "/restmachine/cloudbroker/node/enableNodes": node_cb.EnableNodesRequest{}, + "/restmachine/cloudbroker/node/get": node_cb.GetRequest{}, + "/restmachine/cloudbroker/node/list": node_cb.ListRequest{}, + "/restmachine/cloudbroker/node/maintenance": node_cb.MaintenanceRequest{}, + "/restmachine/cloudbroker/node/restrict": node_cb.RestrictRequest{}, + "/restmachine/cloudbroker/node/setCoreIsolation": node_cb.SetCoreIsolationRequest{}, + "/restmachine/cloudbroker/node/setHugePages": node_cb.SetHugePagesRequest{}, + "/restmachine/cloudbroker/node/setsriovstatus": node_cb.SetSRIOVStatusRequest{}, + "/restmachine/cloudbroker/node/setVFsNumber": node_cb.SetVFsNumberRequest{}, + "/restmachine/cloudbroker/node/update": node_cb.UpdateRequest{}, // pcidevice - "/cloudbroker/pcidevice/create": pcidevice_cb.CreateRequest{}, - "/cloudbroker/pcidevice/delete": pcidevice_cb.DeleteRequest{}, - "/cloudbroker/pcidevice/disable": pcidevice_cb.DisableRequest{}, - "/cloudbroker/pcidevice/enable": pcidevice_cb.EnableRequest{}, - "/cloudbroker/pcidevice/list": pcidevice_cb.ListRequest{}, + "/restmachine/cloudbroker/pcidevice/create": pcidevice_cb.CreateRequest{}, + "/restmachine/cloudbroker/pcidevice/delete": pcidevice_cb.DeleteRequest{}, + "/restmachine/cloudbroker/pcidevice/disable": pcidevice_cb.DisableRequest{}, + "/restmachine/cloudbroker/pcidevice/enable": pcidevice_cb.EnableRequest{}, + "/restmachine/cloudbroker/pcidevice/list": pcidevice_cb.ListRequest{}, // rg - "/cloudbroker/rg/accessGrant": rg_cb.AccessGrantRequest{}, - "/cloudbroker/rg/accessRevoke": rg_cb.AccessRevokeRequest{}, - "/cloudbroker/rg/affinityGroupComputes": rg_cb.AffinityGroupComputesRequest{}, - "/cloudbroker/rg/affinityGroupsGet": rg_cb.AffinityGroupsGetRequest{}, - "/cloudbroker/rg/affinityGroupsList": rg_cb.AffinityGroupsListRequest{}, - "/cloudbroker/rg/audits": rg_cb.AuditsRequest{}, - "/cloudbroker/rg/create": rg_cb.CreateRequest{}, - "/cloudbroker/rg/delete": rg_cb.DeleteRequest{}, - "/cloudbroker/rg/disable": rg_cb.DisableRequest{}, - "/cloudbroker/rg/enable": rg_cb.EnableRequest{}, - "/cloudbroker/rg/get": rg_cb.GetRequest{}, - "/cloudbroker/rg/getResourceConsumption": rg_cb.GetResourceConsumptionRequest{}, - "/cloudbroker/rg/list": rg_cb.ListRequest{}, - "/cloudbroker/rg/listComputes": rg_cb.ListComputesRequest{}, - "/cloudbroker/rg/listDeleted": rg_cb.ListDeletedRequest{}, - "/cloudbroker/rg/listLb": rg_cb.ListLBRequest{}, - "/cloudbroker/rg/listPFW": rg_cb.ListPFWRequest{}, - "/cloudbroker/rg/listResourceConsumption": EmptyStruct{}, - "/cloudbroker/rg/listVins": rg_cb.ListVINSRequest{}, - "/cloudbroker/rg/massDelete": rg_cb.MassDeleteRequest{}, - "/cloudbroker/rg/massDisable": rg_cb.MassDisableRequest{}, - "/cloudbroker/rg/massEnable": rg_cb.MassEnableRequest{}, - "/cloudbroker/rg/restore": rg_cb.RestoreRequest{}, - "/cloudbroker/rg/setCpuAllocationParameter": rg_cb.SetCPUAllocationParameterRequest{}, - "/cloudbroker/rg/setCpuAllocationRatio": rg_cb.SetCPUAllocationRatioRequest{}, - "/cloudbroker/rg/setDefNet": rg_cb.SetDefNetRequest{}, - "/cloudbroker/rg/update": rg_cb.UpdateRequest{}, - "/cloudbroker/rg/updateComputeFeatures": rg_cb.UpdateComputeFeaturesRequest{}, - "/cloudbroker/rg/updateResourceTypes": rg_cb.UpdateResourceTypesRequest{}, - "/cloudbroker/rg/usage": rg_cb.UsageRequest{}, + "/restmachine/cloudbroker/rg/accessGrant": rg_cb.AccessGrantRequest{}, + "/restmachine/cloudbroker/rg/accessRevoke": rg_cb.AccessRevokeRequest{}, + "/restmachine/cloudbroker/rg/affinityGroupComputes": rg_cb.AffinityGroupComputesRequest{}, + "/restmachine/cloudbroker/rg/affinityGroupsGet": rg_cb.AffinityGroupsGetRequest{}, + "/restmachine/cloudbroker/rg/affinityGroupsList": rg_cb.AffinityGroupsListRequest{}, + "/restmachine/cloudbroker/rg/audits": rg_cb.AuditsRequest{}, + "/restmachine/cloudbroker/rg/create": rg_cb.CreateRequest{}, + "/restmachine/cloudbroker/rg/delete": rg_cb.DeleteRequest{}, + "/restmachine/cloudbroker/rg/disable": rg_cb.DisableRequest{}, + "/restmachine/cloudbroker/rg/enable": rg_cb.EnableRequest{}, + "/restmachine/cloudbroker/rg/get": rg_cb.GetRequest{}, + "/restmachine/cloudbroker/rg/getResourceConsumption": rg_cb.GetResourceConsumptionRequest{}, + "/restmachine/cloudbroker/rg/list": rg_cb.ListRequest{}, + "/restmachine/cloudbroker/rg/listComputes": rg_cb.ListComputesRequest{}, + "/restmachine/cloudbroker/rg/listDeleted": rg_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/rg/listLb": rg_cb.ListLBRequest{}, + "/restmachine/cloudbroker/rg/listPFW": rg_cb.ListPFWRequest{}, + "/restmachine/cloudbroker/rg/listResourceConsumption": EmptyStruct{}, + "/restmachine/cloudbroker/rg/listVins": rg_cb.ListVINSRequest{}, + "/restmachine/cloudbroker/rg/massDelete": rg_cb.MassDeleteRequest{}, + "/restmachine/cloudbroker/rg/massDisable": rg_cb.MassDisableRequest{}, + "/restmachine/cloudbroker/rg/massEnable": rg_cb.MassEnableRequest{}, + "/restmachine/cloudbroker/rg/restore": rg_cb.RestoreRequest{}, + "/restmachine/cloudbroker/rg/setCpuAllocationParameter": rg_cb.SetCPUAllocationParameterRequest{}, + "/restmachine/cloudbroker/rg/setCpuAllocationRatio": rg_cb.SetCPUAllocationRatioRequest{}, + "/restmachine/cloudbroker/rg/setDefNet": rg_cb.SetDefNetRequest{}, + "/restmachine/cloudbroker/rg/update": rg_cb.UpdateRequest{}, + "/restmachine/cloudbroker/rg/updateComputeFeatures": rg_cb.UpdateComputeFeaturesRequest{}, + "/restmachine/cloudbroker/rg/updateResourceTypes": rg_cb.UpdateResourceTypesRequest{}, + "/restmachine/cloudbroker/rg/usage": rg_cb.UsageRequest{}, // sep - "/cloudbroker/sep/accessGrant": sep_cb.AccessGrantRequest{}, - "/cloudbroker/sep/accessGrantToPool": sep_cb.AccessGrantToPoolRequest{}, - "/cloudbroker/sep/accessRevoke": sep_cb.AccessRevokeRequest{}, - "/cloudbroker/sep/accessRevokeToPool": sep_cb.AccessRevokeToPoolRequest{}, - "/cloudbroker/sep/addConsumerNodes": sep_cb.AddConsumerNodesRequest{}, - "/cloudbroker/sep/addPool": sep_cb.AddPoolRequest{}, - "/cloudbroker/sep/addProviderNodes": sep_cb.AddProviderNodesRequest{}, - "/cloudbroker/sep/configFieldEdit": sep_cb.ConfigFieldEditRequest{}, - "/cloudbroker/sep/configInsert": sep_cb.ConfigInsertRequest{}, - "/cloudbroker/sep/configValidate": sep_cb.ConfigValidateRequest{}, - "/cloudbroker/sep/consumption": sep_cb.ConsumptionRequest{}, - "/cloudbroker/sep/create": sep_cb.CreateRequest{}, - "/cloudbroker/sep/decommission": sep_cb.DecommissionRequest{}, - "/cloudbroker/sep/delConsumerNodes": sep_cb.DelConsumerNodesRequest{}, - "/cloudbroker/sep/delete": sep_cb.DeleteRequest{}, - "/cloudbroker/sep/delPool": sep_cb.DelPoolRequest{}, - "/cloudbroker/sep/disable": sep_cb.DisableRequest{}, - "/cloudbroker/sep/diskList": sep_cb.DiskListRequest{}, - "/cloudbroker/sep/enable": sep_cb.EnableRequest{}, - "/cloudbroker/sep/get": sep_cb.GetRequest{}, - "/cloudbroker/sep/getConfig": sep_cb.GetConfigRequest{}, - "/cloudbroker/sep/getPool": sep_cb.GetPoolRequest{}, - "/cloudbroker/sep/list": sep_cb.ListRequest{}, - "/cloudbroker/sep/updateCapacityLimit": sep_cb.UpdateCapacityLimitRequest{}, + "/restmachine/cloudbroker/sep/accessGrant": sep_cb.AccessGrantRequest{}, + "/restmachine/cloudbroker/sep/accessGrantToPool": sep_cb.AccessGrantToPoolRequest{}, + "/restmachine/cloudbroker/sep/accessRevoke": sep_cb.AccessRevokeRequest{}, + "/restmachine/cloudbroker/sep/accessRevokeToPool": sep_cb.AccessRevokeToPoolRequest{}, + "/restmachine/cloudbroker/sep/addConsumerNodes": sep_cb.AddConsumerNodesRequest{}, + "/restmachine/cloudbroker/sep/addPool": sep_cb.AddPoolRequest{}, + "/restmachine/cloudbroker/sep/addProviderNodes": sep_cb.AddProviderNodesRequest{}, + "/restmachine/cloudbroker/sep/configFieldEdit": sep_cb.ConfigFieldEditRequest{}, + "/restmachine/cloudbroker/sep/configInsert": sep_cb.ConfigInsertRequest{}, + "/restmachine/cloudbroker/sep/configValidate": sep_cb.ConfigValidateRequest{}, + "/restmachine/cloudbroker/sep/consumption": sep_cb.ConsumptionRequest{}, + "/restmachine/cloudbroker/sep/create": sep_cb.CreateRequest{}, + "/restmachine/cloudbroker/sep/decommission": sep_cb.DecommissionRequest{}, + "/restmachine/cloudbroker/sep/delConsumerNodes": sep_cb.DelConsumerNodesRequest{}, + "/restmachine/cloudbroker/sep/delete": sep_cb.DeleteRequest{}, + "/restmachine/cloudbroker/sep/delPool": sep_cb.DelPoolRequest{}, + "/restmachine/cloudbroker/sep/disable": sep_cb.DisableRequest{}, + "/restmachine/cloudbroker/sep/diskList": sep_cb.DiskListRequest{}, + "/restmachine/cloudbroker/sep/enable": sep_cb.EnableRequest{}, + "/restmachine/cloudbroker/sep/get": sep_cb.GetRequest{}, + "/restmachine/cloudbroker/sep/getConfig": sep_cb.GetConfigRequest{}, + "/restmachine/cloudbroker/sep/getPool": sep_cb.GetPoolRequest{}, + "/restmachine/cloudbroker/sep/list": sep_cb.ListRequest{}, + "/restmachine/cloudbroker/sep/updateCapacityLimit": sep_cb.UpdateCapacityLimitRequest{}, // stack - "/cloudbroker/stack/get": stack_cb.GetRequest{}, - "/cloudbroker/stack/getLogicalCoresCount": stack_cb.GetLogicalCoresCountRequest{}, - "/cloudbroker/stack/list": stack_cb.ListRequest{}, - "/cloudbroker/stack/setCpuAllocationRatio": stack_cb.SetCpuAllocationRatioRequest{}, - "/cloudbroker/stack/setMemAllocationRatio": stack_cb.SetMemAllocationRatioRequest{}, + "/restmachine/cloudbroker/stack/get": stack_cb.GetRequest{}, + "/restmachine/cloudbroker/stack/getLogicalCoresCount": stack_cb.GetLogicalCoresCountRequest{}, + "/restmachine/cloudbroker/stack/list": stack_cb.ListRequest{}, + "/restmachine/cloudbroker/stack/setCpuAllocationRatio": stack_cb.SetCpuAllocationRatioRequest{}, + "/restmachine/cloudbroker/stack/setMemAllocationRatio": stack_cb.SetMemAllocationRatioRequest{}, // tasks - "/cloudbroker/tasks/get": tasks_cb.GetRequest{}, - "/cloudbroker/tasks/list": tasks_cb.ListRequest{}, + "/restmachine/cloudbroker/tasks/get": tasks_cb.GetRequest{}, + "/restmachine/cloudbroker/tasks/list": tasks_cb.ListRequest{}, // user - "/cloudbroker/user/apiaccessJoin": user_cb.APIAccessJoinRequest{}, - "/cloudbroker/user/apiaccessLeave": user_cb.APIAccessLeaveRequest{}, - "/cloudbroker/user/apiaccessList": user_cb.APIAccessListRequest{}, - "/cloudbroker/user/apiList": user_cb.APIListRequest{}, - "/cloudbroker/user/create": user_cb.CreateRequest{}, - "/cloudbroker/user/delete": user_cb.DeleteRequest{}, - "/cloudbroker/user/deleteByGuid": user_cb.DeleteByGUIDRequest{}, - "/cloudbroker/user/deleteUsers": user_cb.DeleteUsersRequest{}, - "/cloudbroker/user/get": user_cb.GetRequest{}, - "/cloudbroker/user/getAudit": user_cb.GetAuditRequest{}, - "/cloudbroker/user/getMatchingUsernames": user_cb.GetMatchingUsernamesRequest{}, - "/cloudbroker/user/list": user_cb.ListRequest{}, + "/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/create": user_cb.CreateRequest{}, + "/restmachine/cloudbroker/user/delete": user_cb.DeleteRequest{}, + "/restmachine/cloudbroker/user/deleteByGuid": user_cb.DeleteByGUIDRequest{}, + "/restmachine/cloudbroker/user/deleteUsers": user_cb.DeleteUsersRequest{}, + "/restmachine/cloudbroker/user/get": user_cb.GetRequest{}, + "/restmachine/cloudbroker/user/getAudit": user_cb.GetAuditRequest{}, + "/restmachine/cloudbroker/user/getMatchingUsernames": user_cb.GetMatchingUsernamesRequest{}, + "/restmachine/cloudbroker/user/list": user_cb.ListRequest{}, // vfpool - "/cloudbroker/vfpool/create": vfpool_cb.CreateRequest{}, - "/cloudbroker/vfpool/delete": vfpool_cb.DeleteRequest{}, - "/cloudbroker/vfpool/disable": vfpool_cb.DisableRequest{}, - "/cloudbroker/vfpool/enable": vfpool_cb.EnableRequest{}, - "/cloudbroker/vfpool/get": vfpool_cb.GetRequest{}, - "/cloudbroker/vfpool/list": vfpool_cb.ListRequest{}, - "/cloudbroker/vfpool/update": vfpool_cb.UpdateRequest{}, + "/restmachine/cloudbroker/vfpool/create": vfpool_cb.CreateRequest{}, + "/restmachine/cloudbroker/vfpool/delete": vfpool_cb.DeleteRequest{}, + "/restmachine/cloudbroker/vfpool/disable": vfpool_cb.DisableRequest{}, + "/restmachine/cloudbroker/vfpool/enable": vfpool_cb.EnableRequest{}, + "/restmachine/cloudbroker/vfpool/get": vfpool_cb.GetRequest{}, + "/restmachine/cloudbroker/vfpool/list": vfpool_cb.ListRequest{}, + "/restmachine/cloudbroker/vfpool/update": vfpool_cb.UpdateRequest{}, // vgpu - "/cloudbroker/vgpu/allocate": vgpu_cb.AllocateRequest{}, - "/cloudbroker/vgpu/create": vgpu_cb.CreateRequest{}, - "/cloudbroker/vgpu/deallocate": vgpu_cb.DeallocateRequest{}, - "/cloudbroker/vgpu/destroy": vgpu_cb.DestroyRequest{}, - "/cloudbroker/vgpu/list": vgpu_cb.ListRequest{}, + "/restmachine/cloudbroker/vgpu/allocate": vgpu_cb.AllocateRequest{}, + "/restmachine/cloudbroker/vgpu/create": vgpu_cb.CreateRequest{}, + "/restmachine/cloudbroker/vgpu/deallocate": vgpu_cb.DeallocateRequest{}, + "/restmachine/cloudbroker/vgpu/destroy": vgpu_cb.DestroyRequest{}, + "/restmachine/cloudbroker/vgpu/list": vgpu_cb.ListRequest{}, // vins - "/cloudbroker/vins/audits": vins_cb.AuditsRequest{}, - "/cloudbroker/vins/createInAccount": vins_cb.CreateInAccountRequest{}, - "/cloudbroker/vins/createInRG": vins_cb.CreateInRGRequest{}, - "/cloudbroker/vins/defaultQosUpdate": vins_cb.DefaultQOSUpdateRequest{}, - "/cloudbroker/vins/delete": vins_cb.DeleteRequest{}, - "/cloudbroker/vins/disable": vins_cb.DisableRequest{}, - "/cloudbroker/vins/dnsApply": vins_cb.DNSApplyRequest{}, - "/cloudbroker/vins/enable": vins_cb.EnableRequest{}, - "/cloudbroker/vins/extNetConnect": vins_cb.ExtNetConnectRequest{}, - "/cloudbroker/vins/extNetDisconnect": vins_cb.ExtNetDisconnectRequest{}, - "/cloudbroker/vins/extNetList": vins_cb.ExtNetListRequest{}, - "/cloudbroker/vins/get": vins_cb.GetRequest{}, - "/cloudbroker/vins/ipList": vins_cb.IPListRequest{}, - "/cloudbroker/vins/ipRelease": vins_cb.IPReleaseRequest{}, - "/cloudbroker/vins/ipReserve": vins_cb.IPReserveRequest{}, - "/cloudbroker/vins/list": vins_cb.ListRequest{}, - "/cloudbroker/vins/listDeleted": vins_cb.ListDeletedRequest{}, - "/cloudbroker/vins/massDelete": vins_cb.MassDeleteRequest{}, - "/cloudbroker/vins/massDisable": vins_cb.MassDisableRequest{}, - "/cloudbroker/vins/massEnable": vins_cb.MassEnableRequest{}, - "/cloudbroker/vins/natRuleAdd": vins_cb.NATRuleAddRequest{}, - "/cloudbroker/vins/natRuleDel": vins_cb.NATRuleDelRequest{}, - "/cloudbroker/vins/natRuleList": vins_cb.NATRuleListRequest{}, - "/cloudbroker/vins/netQos": vins_cb.NetQOSRequest{}, - "/cloudbroker/vins/raiseDown": EmptyStruct{}, - "/cloudbroker/vins/restore": vins_cb.RestoreRequest{}, - "/cloudbroker/vins/search": vins_cb.SearchRequest{}, - "/cloudbroker/vins/staticRouteAccessGrant": vins_cb.StaticRouteAccessGrantRequest{}, - "/cloudbroker/vins/staticRouteAccessRevoke": vins_cb.StaticRouteAccessRevokeRequest{}, - "/cloudbroker/vins/staticRouteAdd": vins_cb.StaticRouteAddRequest{}, - "/cloudbroker/vins/staticRouteDel": vins_cb.StaticRouteDelRequest{}, - "/cloudbroker/vins/staticRouteList": vins_cb.StaticRouteListRequest{}, - "/cloudbroker/vins/vnfdevRedeploy": vins_cb.VNFDevRedeployRequest{}, - "/cloudbroker/vins/vnfdevRestart": vins_cb.VNFDevRestartRequest{}, - "/cloudbroker/vins/vnfdevReset": vins_cb.VNFDevResetRequest{}, - "/cloudbroker/vins/vnfdevStart": vins_cb.VNFDevStartRequest{}, - "/cloudbroker/vins/vnfdevStop": vins_cb.VNFDevStopRequest{}, + "/restmachine/cloudbroker/vins/audits": vins_cb.AuditsRequest{}, + "/restmachine/cloudbroker/vins/createInAccount": vins_cb.CreateInAccountRequest{}, + "/restmachine/cloudbroker/vins/createInRG": vins_cb.CreateInRGRequest{}, + "/restmachine/cloudbroker/vins/defaultQosUpdate": vins_cb.DefaultQOSUpdateRequest{}, + "/restmachine/cloudbroker/vins/delete": vins_cb.DeleteRequest{}, + "/restmachine/cloudbroker/vins/disable": vins_cb.DisableRequest{}, + "/restmachine/cloudbroker/vins/dnsApply": vins_cb.DNSApplyRequest{}, + "/restmachine/cloudbroker/vins/enable": vins_cb.EnableRequest{}, + "/restmachine/cloudbroker/vins/extNetConnect": vins_cb.ExtNetConnectRequest{}, + "/restmachine/cloudbroker/vins/extNetDisconnect": vins_cb.ExtNetDisconnectRequest{}, + "/restmachine/cloudbroker/vins/extNetList": vins_cb.ExtNetListRequest{}, + "/restmachine/cloudbroker/vins/get": vins_cb.GetRequest{}, + "/restmachine/cloudbroker/vins/ipList": vins_cb.IPListRequest{}, + "/restmachine/cloudbroker/vins/ipRelease": vins_cb.IPReleaseRequest{}, + "/restmachine/cloudbroker/vins/ipReserve": vins_cb.IPReserveRequest{}, + "/restmachine/cloudbroker/vins/list": vins_cb.ListRequest{}, + "/restmachine/cloudbroker/vins/listDeleted": vins_cb.ListDeletedRequest{}, + "/restmachine/cloudbroker/vins/massDelete": vins_cb.MassDeleteRequest{}, + "/restmachine/cloudbroker/vins/massDisable": vins_cb.MassDisableRequest{}, + "/restmachine/cloudbroker/vins/massEnable": vins_cb.MassEnableRequest{}, + "/restmachine/cloudbroker/vins/natRuleAdd": vins_cb.NATRuleAddRequest{}, + "/restmachine/cloudbroker/vins/natRuleDel": vins_cb.NATRuleDelRequest{}, + "/restmachine/cloudbroker/vins/natRuleList": vins_cb.NATRuleListRequest{}, + "/restmachine/cloudbroker/vins/netQos": vins_cb.NetQOSRequest{}, + "/restmachine/cloudbroker/vins/raiseDown": EmptyStruct{}, + "/restmachine/cloudbroker/vins/restore": vins_cb.RestoreRequest{}, + "/restmachine/cloudbroker/vins/search": vins_cb.SearchRequest{}, + "/restmachine/cloudbroker/vins/staticRouteAccessGrant": vins_cb.StaticRouteAccessGrantRequest{}, + "/restmachine/cloudbroker/vins/staticRouteAccessRevoke": vins_cb.StaticRouteAccessRevokeRequest{}, + "/restmachine/cloudbroker/vins/staticRouteAdd": vins_cb.StaticRouteAddRequest{}, + "/restmachine/cloudbroker/vins/staticRouteDel": vins_cb.StaticRouteDelRequest{}, + "/restmachine/cloudbroker/vins/staticRouteList": vins_cb.StaticRouteListRequest{}, + "/restmachine/cloudbroker/vins/vnfdevRedeploy": vins_cb.VNFDevRedeployRequest{}, + "/restmachine/cloudbroker/vins/vnfdevRestart": vins_cb.VNFDevRestartRequest{}, + "/restmachine/cloudbroker/vins/vnfdevReset": vins_cb.VNFDevResetRequest{}, + "/restmachine/cloudbroker/vins/vnfdevStart": vins_cb.VNFDevStartRequest{}, + "/restmachine/cloudbroker/vins/vnfdevStop": vins_cb.VNFDevStopRequest{}, } } diff --git a/tests/platform_upgrade/utils_requests.go b/tests/platform_upgrade/utils_requests.go index 233e72d..510e435 100644 --- a/tests/platform_upgrade/utils_requests.go +++ b/tests/platform_upgrade/utils_requests.go @@ -100,7 +100,10 @@ func getErrorsFromJSON(bytes []byte, t *testing.T, cloud string) { } name := param["name"].(string) - required := param["required"].(bool) + required, ok := param["required"].(bool) + if !ok { + required = false + } typ := p.(map[string]interface{})["type"].(string) var items string diff --git a/tests/platform_upgrade/utils_urls.go b/tests/platform_upgrade/utils_urls.go index 4c5739c..853af6f 100644 --- a/tests/platform_upgrade/utils_urls.go +++ b/tests/platform_upgrade/utils_urls.go @@ -62,7 +62,7 @@ func getUrlsFromBytes(bytes []byte) ([]string, error) { } func validateUrlFromJson(url string) bool { - if !strings.HasPrefix(url, "/cloudapi/") && !strings.HasPrefix(url, "/cloudbroker/") { + if !strings.HasPrefix(url, "/restmachine/cloudapi/") && !strings.HasPrefix(url, "/restmachine/cloudbroker/") { return false } @@ -156,11 +156,13 @@ func readUrlFromFile(fileName string) ([]string, error) { for scanner.Scan() { if strings.Contains(scanner.Text(), `"/cloudapi/`) { indexStart := strings.Index(scanner.Text(), "/cloudapi/") - result = append(result, strings.TrimRight(scanner.Text()[indexStart:], `"`)) + url := strings.Trim(scanner.Text()[indexStart:], `"`) + result = append(result, "/restmachine"+url) } if strings.Contains(scanner.Text(), `"/cloudbroker/`) { indexStart := strings.Index(scanner.Text(), "/cloudbroker/") - result = append(result, strings.TrimRight(scanner.Text()[indexStart:], `"`)) + url := strings.Trim(scanner.Text()[indexStart:], `"`) + result = append(result, "/restmachine"+url) } }