This commit is contained in:
2024-04-16 14:26:06 +03:00
parent bc264c4d90
commit e7c968797b
298 changed files with 11066 additions and 398 deletions

View File

@@ -0,0 +1,5 @@
# delta
AppID="app_id"
AppSecret="app_secret"
SSOURL="https://sso-delta.qa.loc:8443"
DecortURL="https://delta.qa.loc/"

View File

@@ -0,0 +1,133 @@
# Авто тесты при переходе на новую версию платформы
## Содержание
- [Авто тесты при переходе на новую версию платформы](#авто-тесты-при-переходе-на-новую-версию-платформы)
- [Содержание](#содержание)
- [Подготовка к тестам](#подготовка-к-тестам)
- [Тесты Raw методов (Get, List)](#тесты-raw-методов-get-list)
- [Cloudapi](#cloudapi)
- [Cloudbroker](#cloudbroker)
- [Тесты запросов](#тесты-запросов)
- [Cloudapi](#cloudapi-1)
- [Cloudbroker](#cloudbroker-1)
- [Тесты API методов](#тесты-api-методов)
## Подготовка к тестам
1. Тесты находятся по директории `decort-sdk/tests/platform_upgrade`
2. Внутри директории нужно создать и заполнить файл `.env` по аналогии с `.env.template` для доступа к платформе
3. Внутри директории нужно создать и заполнить файл `input.json`, содержащий json с раздела [POST /system/docgenerator/prepareCatalog](https://delta.qa.loc/system/ActorApi?group=system#!/system__docgenerator/post_system_docgenerator_prepareCatalog) (для получения json нажать кнопку Try it Out!) - требуется только для тестов запросов
## Тесты Raw методов (Get, List)
### Cloudapi
Запустить тест `TestGetListCloudAPI` в `decort-sdk/tests/platform_upgrade/cloud_test.go`
При наличии подсвеченных полей, проверить, что они содержатся на платформе и не содержатся в go структурах, завести и исправить ошибку.
Пример вывода:
```go
utils_get_list.go:71: Sizes list: OK
utils_get_list.go:71: Tasks list:
Platform has these fields that golang struct doesn't: [updatedBy guid]
utils_get_list.go:71: VINS list:
Platform has these fields that golang struct doesn't: [freeIPs extnetId]
utils_get_list.go:71: VINS get: OK
--- FAIL: TestGetListCloudAPI (66.13s)
```
### Cloudbroker
**ВНИМАНИЕ: из-за особенностей архитектуры моделей (вложенные структуры без json-тегов) в cloudbroker этот тест часто выдает некорректные результаты - ложноположительные на предмет багов.**
Запустить тест `TestGetListCloudbroker` в `decort-sdk/tests/platform_upgrade/cloud_test.go`
При наличии подсвеченных полей, проверить, что они содержатся на платформе и не содержатся в go структурах, завести и исправить ошибку.
## Тесты запросов
### Cloudapi
Запустить тест `TestRequestsCloudAPI` в `decort-sdk/tests/platform_upgrade/cloud_test.go`
При наличии подсвеченных ошибок, проверить, что они являются ошибками (возможны ситуации, когда расхождение платформы и sdk задумано специально), завести и исправить ошибку.
Пример вывода:
```go
=== RUN TestRequestsCloudAPI
utils_requests.go:125: Path /cloudapi/compute/affinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudapi/lb/listDeleted has following errors: [Platform has field accountId that golang structure doesn't]
utils_requests.go:125: Path /cloudapi/compute/pfwAdd has following errors: [Field localBasePort has different required parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudapi/kvmppc/create has following errors: [Field interfaces has different type parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudapi/image/create has following errors: [Platform (14) and golang structure (15) have different amount of fields. Field accountId has different required parameters on the platform and in golang structure]
<...>
utils_requests.go:125: Path /cloudapi/compute/affinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudapi/compute/antiAffinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudapi/lb/create has following errors: [Platform (7) and golang structure (8) have different amount of fields. Field extnetId has different required parameters on the platform and in golang structure Field vinsId has different required parameters on the platform and in golang structure]
--- FAIL: TestRequestsCloudAPI (0.02s)
FAIL
```
### Cloudbroker
Запустить тест `TestRequestsCloudbroker` в `decort-sdk/tests/platform_upgrade/cloud_test.go`
При наличии подсвеченных ошибок, проверить, что они являются ошибками (возможны ситуации, когда расхождение платформы и sdk задумано специально), завести и исправить ошибку.
Пример вывода:
```go
=== RUN TestRequestsCloudbroker
utils_requests.go:125: Path /cloudbroker/image/updateNodes has following errors: [Field enabledStacks has different type parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudbroker/lb/listDeleted has following errors: [Platform has field accountId that golang structure doesn't]
utils_requests.go:125: Path /cloudbroker/k8ci/listDeleted has following errors: [Platform has field k8cId that golang structure doesn't]
<...>
utils_requests.go:125: Path /cloudbroker/account/setCpuAllocationRatio has following errors: [Platform has field accountId that golang structure doesn't Field ratio has different required parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudbroker/image/list has following errors: [Field size has different type parameters on the platform and in golang structure]
utils_requests.go:125: Path /cloudbroker/rg/create has following errors: [Platform has field uniqPools that golang structure doesn't]
utils_requests.go:125: Path /cloudbroker/sep/create has following errors: [Field config has different required parameters on the platform and in golang structure]
--- FAIL: TestRequestsCloudbroker (0.02s)
FAIL
```
## Тесты API методов
Запустить тест `TestGetAllPaths` в `decort-sdk/tests/platform_upgrade/cloud_test.go`
При наличии подсвеченных ошибок, проверить, что указанные методы API не являются устаревшими (deprecated). В противном случе добавить устаревшие методы в переменную `DEPRECATED_GROUPS` по адресу `decort-sdk/tests/platform_upgrade/utils_url.go`.
Пример вывода:
```go
=== RUN TestGetAllPaths
cloud_test.go:692: Below API handlers (30 in total) need to be added to decort-sdk:
/cloudbroker/grid/addCustomBackupPath
/cloudapi/user/getResourceConsumption
/cloudapi/user/authenticate
/cloudbroker/compute/getCustomFields
/cloudapi/user/isValidInviteUserToken
/cloudapi/pcidevice/list
/cloudbroker/compute/createTemplateFromBlank
/cloudbroker/account/listVMs
/cloudapi/user/brief
/cloudapi/user/search
/cloudbroker/stack/setMemAllocationRatio
/cloudbroker/image/computeciUnset
/cloudbroker/image/uploadImageFile
/cloudapi/account/getStats
/cloudapi/disks/fromPlatformDisk
/cloudbroker/stack/getLogicalCoresCount
/cloudapi/lb/stop
/cloudapi/account/listVMs
/cloudapi/user/setData
/cloudapi/compute/createTemplateFromBlank
/cloudbroker/grid/removeCustomBackupPath
/cloudapi/user/getAudit
/cloudbroker/account/listCS
/cloudapi/account/listCS
/cloudbroker/stack/setCpuAllocationRatio
/cloudbroker/grid/setPasswordPolicy
/cloudapi/user/apiList
/cloudbroker/disks/fromPlatformDisk
/cloudapi/user/get
/cloudapi/vgpu/list
--- FAIL: TestGetAllPaths (0.03s)
FAIL
exit status 1
FAIL repository.basistech.ru/BASIS/decort-golang-sdk/tests/platform_upgrade 0.031s
```

View File

@@ -0,0 +1,696 @@
package test
import (
"context"
"fmt"
"testing"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/flipgroup"
"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/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"
account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
audit_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit"
compute_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/compute"
disks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/disks"
extnet_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/extnet"
flipgroup_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/flipgroup"
grid_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/grid"
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"
lb_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/lb"
pcidevice_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/pcidevice"
rg_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/rg"
sep_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
stack_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/stack"
tasks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/tasks"
vins_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vins"
)
// TestGetListCloudAPI tests platforms responses vs. json tags of golang structures in cloudapi get/list methods
func TestGetListCloudAPI(t *testing.T) {
var bytes []byte
var err error
client, err := getClient()
if err != nil {
t.Fatalf("Cannot get client: %v", err)
}
// Account
// List
bytes, err = client.CloudAPI().Account().ListRaw(context.Background(), account.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Account list", bytes, account.ListAccounts{}, t)
// Get
listAcc, _ := client.CloudAPI().Account().List(context.Background(), account.ListRequest{})
if len(listAcc.Data) > 0 {
id := listAcc.Data[0].ID
bytes, err = client.CloudAPI().Account().GetRaw(context.Background(), account.GetRequest{AccountID: id})
if err != nil {
t.Error(err)
}
getResult("Account get", bytes, account.RecordAccount{}, t)
} else {
t.Errorf("Can not test Account get because account list is empty")
}
// Bservice
// List
bytes, err = client.CloudAPI().BService().ListRaw(context.Background(), bservice.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Bservice list", bytes, bservice.ListBasicServices{}, t)
// Get
listBServ, _ := client.CloudAPI().BService().List(context.Background(), bservice.ListRequest{})
if len(listBServ.Data) > 0 {
id := listBServ.Data[0].ID
bytes, err = client.CloudAPI().BService().GetRaw(context.Background(), bservice.GetRequest{ServiceID: id})
if err != nil {
t.Error(err)
}
getResult("Bservice get", bytes, bservice.RecordBasicService{}, t)
} else {
t.Errorf("Can not test Bservice get because bservice list is empty")
}
// Compute
// List
bytes, err = client.CloudAPI().Compute().ListRaw(context.Background(), compute.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Compute list", bytes, compute.ListComputes{}, t)
// Get
listComp, _ := client.CloudAPI().Compute().List(context.Background(), compute.ListRequest{})
if len(listComp.Data) > 0 {
id := listComp.Data[0].ID
bytes, err = client.CloudAPI().Compute().GetRaw(context.Background(), compute.GetRequest{ComputeID: id})
if err != nil {
t.Error(err)
}
getResult("Compute get", bytes, compute.RecordCompute{}, t)
} else {
t.Errorf("Can not test Compute get because compute list is empty")
}
// Disk
// List
bytes, err = client.CloudAPI().Disks().ListRaw(context.Background(), disks.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Disk list", bytes, disks.ListDisks{}, t)
// Get
listDisk, _ := client.CloudAPI().Disks().List(context.Background(), disks.ListRequest{})
if len(listDisk.Data) > 0 {
id := listDisk.Data[0].ID
bytes, err = client.CloudAPI().Disks().GetRaw(context.Background(), disks.GetRequest{DiskID: id})
if err != nil {
t.Error(err)
}
getResult("Disk get", bytes, disks.RecordDisk{}, t)
} else {
t.Errorf("Can not test Disk get because disk list is empty")
}
// ExtNet
// List
bytes, err = client.CloudAPI().ExtNet().ListRaw(context.Background(), extnet.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("ExtNet list", bytes, extnet.ListExtNets{}, t)
// Get
listExtNet, _ := client.CloudAPI().ExtNet().List(context.Background(), extnet.ListRequest{})
if len(listExtNet.Data) > 0 {
id := listExtNet.Data[0].ID
bytes, err = client.CloudAPI().ExtNet().GetRaw(context.Background(), extnet.GetRequest{NetID: id})
if err != nil {
t.Error(err)
}
getResult("ExtNet get", bytes, extnet.RecordExtNet{}, t)
} else {
t.Errorf("Can not test ExtNet get because listExtNet list is empty")
}
// FLIPGroup
// List
bytes, err = client.CloudAPI().FLIPGroup().ListRaw(context.Background(), flipgroup.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("FLIPGroup list", bytes, flipgroup.ListFLIPGroups{}, t)
// Get
listFG, _ := client.CloudAPI().FLIPGroup().List(context.Background(), flipgroup.ListRequest{})
if len(listFG.Data) > 0 {
id := listFG.Data[0].ID
bytes, err = client.CloudAPI().FLIPGroup().GetRaw(context.Background(), flipgroup.GetRequest{FLIPGroupID: id})
if err != nil {
t.Error(err)
}
getResult("FLIPGroup get", bytes, flipgroup.RecordFLIPGroup{}, t)
} else {
t.Errorf("Can not test FLIPGroup get because flipgroup list is empty")
}
// Image
// List
bytes, err = client.CloudAPI().Image().ListRaw(context.Background(), image.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Image list", bytes, image.ListImages{}, t)
// Get
listImg, _ := client.CloudAPI().Image().List(context.Background(), image.ListRequest{})
if len(listImg.Data) > 0 {
id := listImg.Data[0].ID
bytes, err = client.CloudAPI().Image().GetRaw(context.Background(), image.GetRequest{ImageID: id})
if err != nil {
t.Error(err)
}
getResult("Image get", bytes, image.RecordImage{}, t)
} else {
t.Errorf("Can not test Image get because Image list is empty")
}
// K8CI
// List
bytes, err = client.CloudAPI().K8CI().ListRaw(context.Background(), k8ci.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("K8CI list", bytes, k8ci.ListK8CI{}, t)
// Get
listk8ci, _ := client.CloudAPI().K8CI().List(context.Background(), k8ci.ListRequest{})
if len(listk8ci.Data) > 0 {
id := listk8ci.Data[0].ID
bytes, err = client.CloudAPI().K8CI().GetRaw(context.Background(), k8ci.GetRequest{K8CIID: id})
if err != nil {
t.Error(err)
}
getResult("K8CI get", bytes, k8ci.RecordK8CI{}, t)
} else {
t.Errorf("Can not test K8CI get because K8CI list is empty")
}
// K8S
// List
bytes, err = client.CloudAPI().K8S().ListRaw(context.Background(), k8s.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("K8S list", bytes, k8s.ListK8SClusters{}, t)
// Get
listk8s, _ := client.CloudAPI().K8S().List(context.Background(), k8s.ListRequest{})
if len(listk8s.Data) > 0 {
id := listk8s.Data[0].ID
bytes, err = client.CloudAPI().K8S().GetRaw(context.Background(), k8s.GetRequest{K8SID: id})
if err != nil {
t.Error(err)
}
getResult("K8S get", bytes, k8s.RecordK8S{}, t)
} else {
t.Errorf("Can not test K8S get because K8S list is empty")
}
// LB
// List
bytes, err = client.CloudAPI().LB().ListRaw(context.Background(), lb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("LB list", bytes, lb.ListLB{}, t)
// Get
listLB, _ := client.CloudAPI().LB().List(context.Background(), lb.ListRequest{})
if len(listLB.Data) > 0 {
id := listLB.Data[0].ID
bytes, err = client.CloudAPI().LB().GetRaw(context.Background(), lb.GetRequest{LBID: id})
if err != nil {
t.Error(err)
}
getResult("LB get", bytes, lb.RecordLB{}, t)
} else {
t.Errorf("Can not test LB get because LB list is empty")
}
// Locations
// List
bytes, err = client.CloudAPI().Locations().ListRaw(context.Background(), locations.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Locations list", bytes, locations.ListLocations{}, t)
// RG
// List
bytes, err = client.CloudAPI().RG().ListRaw(context.Background(), rg.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("RG list", bytes, rg.ListResourceGroups{}, t)
// Get
listRG, _ := client.CloudAPI().RG().List(context.Background(), rg.ListRequest{})
if len(listRG.Data) > 0 {
id := listRG.Data[0].ID
bytes, err = client.CloudAPI().RG().GetRaw(context.Background(), rg.GetRequest{RGID: id})
if err != nil {
t.Error(err)
}
getResult("RG get", bytes, rg.RecordResourceGroup{}, t)
} else {
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)
}
getResult("Sizes list", bytes, sizes.ListSizes{}, t)
// Stack
// List
bytes, err = client.CloudAPI().Stack().ListRaw(context.Background(), stack.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Stack list", bytes, stack.ListStacks{}, t)
// Tasks
// List
bytes, err = client.CloudAPI().Tasks().ListRaw(context.Background(), tasks.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Tasks list", bytes, tasks.ListTasks{}, t)
// Get
listTasks, _ := client.CloudAPI().Tasks().List(context.Background(), tasks.ListRequest{})
if len(listTasks.Data) > 0 {
id := listTasks.Data[0].AuditID
bytes, err = client.CloudAPI().Tasks().GetRaw(context.Background(), tasks.GetRequest{AuditID: id})
if err != nil {
t.Error(err)
}
getResult("Tasks get", bytes, tasks.RecordAsyncTask{}, t)
} else {
t.Errorf("Can not test Tasks get because Tasks list is empty")
}
// VINS
// List
bytes, err = client.CloudAPI().VINS().ListRaw(context.Background(), vins.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("VINS list", bytes, vins.ListVINS{}, t)
// Get
listVINS, _ := client.CloudAPI().VINS().List(context.Background(), vins.ListRequest{})
if len(listVINS.Data) > 0 {
id := listVINS.Data[0].ID
bytes, err = client.CloudAPI().VINS().GetRaw(context.Background(), vins.GetRequest{VINSID: id})
if err != nil {
t.Error(err)
}
getResult("VINS get", bytes, vins.RecordVINS{}, t)
} else {
t.Errorf("Can not test VINS get because VINS list is empty")
}
}
// WARNING: not working correctly due to inclusions of tagless structures in cloudbroker
// TestGetListCloudbroker tests platforms responses vs. json tags of golang structures in cloudbroker get/list methods
func TestGetListCloudbroker(t *testing.T) {
var bytes []byte
var err error
client, err := getClient()
if err != nil {
t.Fatalf("Cannot get client: %v", err)
}
// Account
// List
bytes, err = client.CloudBroker().Account().ListRaw(context.Background(), account_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Account list", bytes, account_cb.ListAccounts{}, t)
// Get
listAcc, _ := client.CloudBroker().Account().List(context.Background(), account_cb.ListRequest{})
if len(listAcc.Data) > 0 {
id := listAcc.Data[0].ID
bytes, err = client.CloudBroker().Account().GetRaw(context.Background(), account_cb.GetRequest{AccountID: id})
if err != nil {
t.Error(err)
}
getResult("Account get", bytes, account_cb.RecordAccount{}, t)
} else {
t.Errorf("Can not test Account get because account list is empty")
}
// Audit
// List
bytes, err = client.CloudBroker().Audit().ListRaw(context.Background(), audit_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Audit list", bytes, audit_cb.ListAudits{}, t)
// Get
listAudits, _ := client.CloudBroker().Audit().List(context.Background(), audit_cb.ListRequest{})
if len(listAudits.Data) > 0 {
id := listAudits.Data[0].GUID
bytes, err = client.CloudBroker().Audit().GetRaw(context.Background(), audit_cb.GetRequest{AuditGuid: id})
if err != nil {
t.Error(err)
}
getResult("Audit get", bytes, audit_cb.RecordAudit{}, t)
} else {
t.Errorf("Can not test Audit get because Audit list is empty")
}
// Compute
// List
bytes, err = client.CloudBroker().Compute().ListRaw(context.Background(), compute_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Compute list", bytes, compute_cb.ListComputes{}, t)
// Get
listComp, _ := client.CloudBroker().Compute().List(context.Background(), compute_cb.ListRequest{})
if len(listComp.Data) > 0 {
id := listComp.Data[0].ID
bytes, err = client.CloudBroker().Compute().GetRaw(context.Background(), compute_cb.GetRequest{ComputeID: id})
if err != nil {
t.Error(err)
}
getResult("Compute get", bytes, compute_cb.RecordCompute{}, t)
} else {
t.Errorf("Can not test Compute get because compute list is empty")
}
// Disk
// List
bytes, err = client.CloudBroker().Disks().ListRaw(context.Background(), disks_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Disk list", bytes, disks_cb.ListDisks{}, t)
// Get
listDisk, _ := client.CloudBroker().Disks().List(context.Background(), disks_cb.ListRequest{})
if len(listDisk.Data) > 0 {
id := listDisk.Data[0].ID
bytes, err = client.CloudBroker().Disks().GetRaw(context.Background(), disks_cb.GetRequest{DiskID: id})
if err != nil {
t.Error(err)
}
getResult("Disk get", bytes, disks_cb.RecordDisk{}, t)
} else {
t.Errorf("Can not test Disk get because disk list is empty")
}
// ExtNet
// List
bytes, err = client.CloudBroker().ExtNet().ListRaw(context.Background(), extnet_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("ExtNet list", bytes, extnet_cb.ListExtNet{}, t)
// Get
listExtNet, _ := client.CloudBroker().ExtNet().List(context.Background(), extnet_cb.ListRequest{})
if len(listExtNet.Data) > 0 {
id := listExtNet.Data[0].ID
bytes, err = client.CloudBroker().ExtNet().GetRaw(context.Background(), extnet_cb.GetRequest{NetID: id})
if err != nil {
t.Error(err)
}
getResult("ExtNet get", bytes, extnet_cb.RecordExtNet{}, t)
} else {
t.Errorf("Can not test ExtNet get because listExtNet list is empty")
}
// FLIPGroup
// List
bytes, err = client.CloudBroker().FLIPGroup().ListRaw(context.Background(), flipgroup_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("FLIPGroup list", bytes, flipgroup_cb.ListFLIPGroups{}, t)
// Get
listFG, _ := client.CloudBroker().FLIPGroup().List(context.Background(), flipgroup_cb.ListRequest{})
if len(listFG.Data) > 0 {
id := listFG.Data[0].ID
bytes, err = client.CloudBroker().FLIPGroup().GetRaw(context.Background(), flipgroup_cb.GetRequest{FLIPGroupID: id})
if err != nil {
t.Error(err)
}
getResult("FLIPGroup get", bytes, flipgroup_cb.RecordFLIPGroup{}, t)
} else {
t.Errorf("Can not test FLIPGroup get because flipgroup list is empty")
}
// Grid
// List
bytes, err = client.CloudBroker().Grid().ListRaw(context.Background(), grid_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Grid list", bytes, grid_cb.ListGrids{}, t)
// Get
listGrid, _ := client.CloudBroker().Grid().List(context.Background(), grid_cb.ListRequest{})
if len(listGrid.Data) > 0 {
id := listGrid.Data[0].ID
bytes, err = client.CloudBroker().Grid().GetRaw(context.Background(), grid_cb.GetRequest{GID: id})
if err != nil {
t.Error(err)
}
getResult("Grid get", bytes, grid_cb.RecordGrid{}, t)
} else {
t.Errorf("Can not test Grid get because Grid list is empty")
}
// Image
// List
bytes, err = client.CloudBroker().Image().ListRaw(context.Background(), image_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Image list", bytes, image_cb.ListImages{}, t)
// Get
listImg, _ := client.CloudBroker().Image().List(context.Background(), image_cb.ListRequest{})
if len(listImg.Data) > 0 {
id := listImg.Data[0].ID
bytes, err = client.CloudBroker().Image().GetRaw(context.Background(), image_cb.GetRequest{ImageID: id})
if err != nil {
t.Error(err)
}
getResult("Image get", bytes, image_cb.RecordImage{}, t)
} else {
t.Errorf("Can not test Image get because Image list is empty")
}
// K8CI
// List
bytes, err = client.CloudBroker().K8CI().ListRaw(context.Background(), k8ci_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("K8CI list", bytes, k8ci_cb.ListK8CI{}, t)
// Get
listk8ci, _ := client.CloudBroker().K8CI().List(context.Background(), k8ci_cb.ListRequest{})
if len(listk8ci.Data) > 0 {
id := listk8ci.Data[0].ID
bytes, err = client.CloudBroker().K8CI().GetRaw(context.Background(), k8ci_cb.GetRequest{K8CIID: id})
if err != nil {
t.Error(err)
}
getResult("K8CI get", bytes, k8ci_cb.RecordK8CI{}, t)
} else {
t.Errorf("Can not test K8CI get because K8CI list is empty")
}
// K8S
// List
bytes, err = client.CloudBroker().K8S().ListRaw(context.Background(), k8s_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("K8S list", bytes, k8s_cb.ListK8S{}, t)
// Get
listk8s, _ := client.CloudBroker().K8S().List(context.Background(), k8s_cb.ListRequest{})
if len(listk8s.Data) > 0 {
id := listk8s.Data[0].ID
bytes, err = client.CloudBroker().K8S().GetRaw(context.Background(), k8s_cb.GetRequest{K8SID: id})
if err != nil {
t.Error(err)
}
getResult("K8S get", bytes, k8s_cb.RecordK8S{}, t)
} else {
t.Errorf("Can not test K8S get because K8S list is empty")
}
// LB
// List
bytes, err = client.CloudBroker().LB().ListRaw(context.Background(), lb_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("LB list", bytes, lb_cb.ListLB{}, t)
// Get
listLB, _ := client.CloudBroker().LB().List(context.Background(), lb_cb.ListRequest{})
if len(listLB.Data) > 0 {
id := listLB.Data[0].ID
bytes, err = client.CloudBroker().LB().GetRaw(context.Background(), lb_cb.GetRequest{LBID: id})
if err != nil {
t.Error(err)
}
getResult("LB get", bytes, lb_cb.RecordLB{}, t)
} else {
t.Errorf("Can not test LB get because LB list is empty")
}
// Pcidevice
// List
bytes, err = client.CloudBroker().PCIDevice().ListRaw(context.Background(), pcidevice_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Pcidevice list", bytes, pcidevice_cb.ListPCIDevices{}, t)
// RG
// List
bytes, err = client.CloudBroker().RG().ListRaw(context.Background(), rg_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("RG list", bytes, rg_cb.ListRG{}, t)
// Get
listRG, _ := client.CloudBroker().RG().List(context.Background(), rg_cb.ListRequest{})
if len(listRG.Data) > 0 {
id := listRG.Data[0].ID
bytes, err = client.CloudBroker().RG().GetRaw(context.Background(), rg_cb.GetRequest{RGID: id})
if err != nil {
t.Error(err)
}
getResult("RG get", bytes, rg_cb.RecordRG{}, t)
} else {
t.Errorf("Can not test RG get because RG list is empty")
}
// SEP
// List
bytes, err = client.CloudBroker().SEP().ListRaw(context.Background(), sep_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("SEP list", bytes, sep_cb.ListSEP{}, t)
// Get
listSEP, _ := client.CloudBroker().SEP().List(context.Background(), sep_cb.ListRequest{})
if len(listSEP.Data) > 0 {
id := listSEP.Data[0].ID
bytes, err = client.CloudBroker().SEP().GetRaw(context.Background(), sep_cb.GetRequest{SEPID: id})
if err != nil {
t.Error(err)
}
getResult("SEP get", bytes, sep_cb.RecordSEP{}, t)
} else {
t.Errorf("Can not test SEP get because SEP list is empty")
}
// Stack
// List
bytes, err = client.CloudBroker().Stack().ListRaw(context.Background(), stack_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Stack list", bytes, stack_cb.ListStacks{}, t)
// Get
listStack, _ := client.CloudBroker().Stack().List(context.Background(), stack_cb.ListRequest{})
if len(listStack.Data) > 0 {
id := listStack.Data[0].ID
bytes, err = client.CloudBroker().Stack().GetRaw(context.Background(), stack_cb.GetRequest{StackId: id})
if err != nil {
t.Error(err)
}
getResult("Stack get", bytes, stack_cb.InfoStack{}, t)
} else {
t.Errorf("Can not test Stack get because Stack list is empty")
}
// Tasks
// List
bytes, err = client.CloudBroker().Tasks().ListRaw(context.Background(), tasks_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("Tasks list", bytes, tasks_cb.ListTasks{}, t)
// VINS
// List
bytes, err = client.CloudBroker().VINS().ListRaw(context.Background(), vins_cb.ListRequest{})
if err != nil {
t.Error(err)
}
getResult("VINS list", bytes, vins_cb.ListVINS{}, t)
// Get
listVINS, _ := client.CloudBroker().VINS().List(context.Background(), vins_cb.ListRequest{})
if len(listVINS.Data) > 0 {
id := listVINS.Data[0].ID
bytes, err = client.CloudBroker().VINS().GetRaw(context.Background(), vins_cb.GetRequest{VINSID: id})
if err != nil {
t.Error(err)
}
getResult("VINS get", bytes, vins_cb.RecordVINS{}, t)
} else {
t.Errorf("Can not test VINS get because VINS list is empty")
}
}
// TestRequestsCloudAPI tests platform requests vs. golang request structures in sdk for cloudapi requests
func TestRequestsCloudAPI(t *testing.T) {
bytes := getBytesFromJSON("input.json", t)
getErrorsFromJSON(bytes, t, "cloudapi")
}
// TestRequestsCloudbroker tests platform requests vs. golang request structures in sdk for cloudbroker requests
func TestRequestsCloudbroker(t *testing.T) {
bytes := getBytesFromJSON("input.json", t)
getErrorsFromJSON(bytes, t, "cloudbroker")
}
// TestGetAllPaths tests if platform has any handlers that golang sdk doesn't. In this case, list of missing handlers is provided.
// Note that DEPRECATED_GROUPS stores list of groups that are considered deprecated. You can add additional grops to DEPRECATED_GROUPS if required.
func TestGetAllPaths(t *testing.T) {
bytes := getBytesFromJSON("input.json", t)
jsonUrls, err := getUrlsFromBytes(bytes)
if err != nil {
t.Error(err)
}
decortUrls := readUrlFromDir("../../pkg", len(jsonUrls))
result := getMissingDecortUrls(jsonUrls, decortUrls)
if len(result) > 0 {
errorText := fmt.Sprintf("Below API handlers (%d in total) need to be added to decort-sdk:\n", len(result))
for _, r := range result {
errorText += fmt.Sprintln(r)
}
t.Errorf(errorText)
}
}

View File

@@ -0,0 +1,912 @@
package test
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/flipgroup"
"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"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vfpool"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
apiaccess_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/apiaccess"
audit_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit"
backup_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/backup"
compute_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/compute"
disks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/disks"
extnet_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/extnet"
flipgroup_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/flipgroup"
grid_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/grid"
group_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/group"
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"
pcidevice_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/pcidevice"
rg_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/rg"
sep_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/sep"
stack_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/stack"
tasks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/tasks"
user_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/user"
vfpool_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vfpool"
vgpu_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vgpu"
vins_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vins"
)
type EmptyStruct struct{}
// getRequestsMapCloudAPI maps request path with request golang sdk structures for cloudapi most used requests
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{},
//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{},
// 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{},
// 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{},
// extnet
"/cloudapi/extnet/get": extnet.GetRequest{},
"/cloudapi/extnet/getDefault": EmptyStruct{},
"/cloudapi/extnet/list": extnet.ListRequest{},
"/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{},
// 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{},
// 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{},
// 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{},
// locations
"/cloudapi/locations/getUrl": EmptyStruct{},
"/cloudapi/locations/list": locations.ListRequest{},
// pcidevice
"/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{},
// 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{},
// vfpool
"/cloudapi/vfpool/get": vfpool.GetRequest{},
"/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{},
}
}
// getRequestsMapCloudbroker maps request path with request golang sdk structures for cloudbroker most used requests
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{},
// 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{},
// audit_cb
"/cloudbroker/audit/get": audit_cb.GetRequest{},
"/cloudbroker/audit/linkedJobs": audit_cb.LinkedJobsRequest{},
"/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{},
// 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{},
// disks
"/cloudbroker/disks/create": disks_cb.CreateRequest{},
"/cloudbroker/disks/delete": disks_cb.DeleteRequest{},
"/cloudbroker/disks/deleteDisks": disks_cb.DeleteDisksRequest{},
"/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/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{},
// 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{},
// 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{},
// 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{},
// group
"/cloudbroker/group/get": group_cb.GetRequest{},
"/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{},
// 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{},
// 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{},
// 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{},
// 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{},
// 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{},
// 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{},
// 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{},
// 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{},
// tasks
"/cloudbroker/tasks/get": tasks_cb.GetRequest{},
"/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{},
// 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{},
// 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{},
// 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{},
}
}

View File

@@ -0,0 +1,261 @@
package test
import (
"encoding/json"
"fmt"
"log"
"os"
"reflect"
"strconv"
"testing"
"time"
"github.com/joho/godotenv"
decort "repository.basistech.ru/BASIS/decort-golang-sdk"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
)
func getClient() (*decort.DecortClient, error) {
cfg := config.Config{
Retries: 5,
SSLSkipVerify: true,
}
err := godotenv.Load(".env")
if err != nil {
log.Fatal("Error loading .env file")
}
appID, ok := os.LookupEnv("AppID")
if !ok {
return &decort.DecortClient{}, fmt.Errorf("AppID is not set")
}
cfg.AppID = appID
AppSecret, ok := os.LookupEnv("AppSecret")
if !ok {
return &decort.DecortClient{}, fmt.Errorf("AppSecret is not set")
}
cfg.AppSecret = AppSecret
SSOURL, ok := os.LookupEnv("SSOURL")
if !ok {
return &decort.DecortClient{}, fmt.Errorf("SSOURL is not set")
}
cfg.SSOURL = SSOURL
DecortURL, ok := os.LookupEnv("DecortURL")
if !ok {
return &decort.DecortClient{}, fmt.Errorf("DecortURL is not set")
}
cfg.DecortURL = DecortURL
cfg.SetTimeout(5 * time.Minute)
c := decort.New(cfg)
return c, nil
}
// getResult checks how json-structure of bytes is different from golang structure and return t.Error if there are any differences.
func getResult(testName string, bytes []byte, structure any, t *testing.T) {
// convert bytes to map[string]interface{}
bytesMap, err := GetMapFromBytes(bytes)
if err != nil {
t.Errorf("%s: can not unmarshal json", testName)
}
// convert structure to map[string]interface{}
structMap := GetMapFromStructure(structure)
// assert if they are equal
if !reflect.DeepEqual(bytesMap, structMap) {
t.Errorf(getDifference(testName, bytesMap, structMap))
}
}
// getDifference tells which fields are present in bytesMap and not present in structMap and vice versa.
func getDifference(testName string, bytesMap, structMap map[string]interface{}) string {
var result string
bytesFields, _ := evaluate(bytesMap, structMap)
result += fmt.Sprintf("%s: ", testName)
if len(bytesFields) > 0 {
result += fmt.Sprintf("\nPlatform has these fields that golang struct doesn't: %v\n", bytesFields)
}
//if len(structFields) > 0 {
// result += fmt.Sprintf("Golang struct has these fields that platform doesn't: %v\n", structFields)
//}
if len(bytesFields) == 0 {
result += "OK"
}
return result
}
func evaluate(m1, m2 map[string]interface{}) ([]string, []string) {
var s1, s2 []string
for k1, v1 := range m1 {
v2, ok := m2[k1]
if !ok {
s1 = append(s1, k1)
continue
}
v1Map := v1.(map[string]interface{})
v2Map := v2.(map[string]interface{})
len1 := len(v1Map)
len2 := len(v2Map)
if len1 == 0 && len2 == 0 {
continue
} else {
toAdd1, toAdd2 := evaluate(v1Map, v2Map)
s1 = append(s1, toAdd1...)
s2 = append(s2, toAdd2...)
}
}
for k2, v2 := range m2 {
v1, ok := m1[k2]
if !ok {
if !contains(s2, k2) {
s2 = append(s2, k2)
}
continue
}
v1Map := v1.(map[string]interface{})
v2Map := v2.(map[string]interface{})
len1 := len(v1Map)
len2 := len(v2Map)
if len1 == 0 && len2 == 0 {
continue
} else {
toAdd1, toAdd2 := evaluate(v1Map, v2Map)
s1 = appendSelectedElements(s1, toAdd1)
s2 = appendSelectedElements(s2, toAdd2)
}
}
return s1, s2
}
func contains(slice []string, element string) bool {
for _, elem := range slice {
if elem == element {
return true
}
}
return false
}
func appendSelectedElements(slice []string, elements []string) []string {
result := make([]string, 0, len(slice))
result = append(result, slice...)
for _, el := range elements {
if !contains(slice, el) {
result = append(result, el)
}
}
return result
}
// GetMapFromBytes converts []byte to map[string]interface{}
func GetMapFromBytes(bytes []byte) (map[string]interface{}, error) {
var x map[string]interface{}
err := json.Unmarshal(bytes, &x)
if err != nil {
return nil, err
}
return getMapBytes(x), nil
}
func getMapBytes(value map[string]interface{}) map[string]interface{} {
temporary := make(map[string]interface{})
for k, v := range value {
list, ok := v.([]interface{})
if ok && len(list) > 0 {
elem, ok := list[0].(map[string]interface{})
if ok {
temporary[k] = getMapBytes(elem)
continue
}
temporary[k] = map[string]interface{}{}
continue
}
m, ok := v.(map[string]interface{})
if ok {
temporary[k] = getMapBytes(m)
continue
}
if _, err := strconv.Atoi(k); err != nil {
temporary[k] = map[string]interface{}{}
}
}
return temporary
}
// GetMapFromStructure converts golang structure to map[string]interface{}
func GetMapFromStructure(structure any) map[string]interface{} {
typ := reflect.TypeOf(structure)
return getMapStruct(typ)
}
func getMapStruct(t reflect.Type) map[string]interface{} {
temporary := make(map[string]interface{})
for i := 0; i < t.NumField(); i++ {
tag := t.Field(i).Tag.Get("json")
kind := t.Field(i).Type.Kind()
//nolint
switch kind {
case reflect.Array, reflect.Slice:
elem := t.Field(i).Type.Elem()
switch elem.Kind() {
case reflect.Struct:
temporary[tag] = getMapStruct(elem)
default:
temporary[tag] = map[string]interface{}{}
}
case reflect.Struct:
if tag == "" {
return getMapStruct(t.Field(i).Type)
} else {
temporary[tag] = getMapStruct(t.Field(i).Type)
}
// в этом месте работает некорректно для вложенных структур без json тегов (scope - все в cloudbroker)
case reflect.Map, reflect.Interface, reflect.String, reflect.Bool, reflect.Int64, reflect.Int, reflect.Uint,
reflect.Int32, reflect.Uint64, reflect.Float32, reflect.Float64:
temporary[tag] = map[string]interface{}{}
}
}
return temporary
}
// getMapFromFile converts json to map[string]interface{}
func getMapFromFile(bytes []byte) (map[string]interface{}, error) {
var x map[string]interface{}
err := json.Unmarshal(bytes, &x)
if err != nil {
return nil, err
}
paths := x["paths"].(map[string]interface{})
return paths, nil
}

View File

@@ -0,0 +1,218 @@
package test
import (
"fmt"
"io"
"os"
"reflect"
"strings"
"testing"
)
func getParameters(input map[string]interface{}) []interface{} {
var emptySlice []interface{}
post, ok := input["post"]
if !ok {
return emptySlice
}
parameters, ok := post.(map[string]interface{})
if !ok {
return emptySlice
}
params, ok := parameters["parameters"]
if !ok {
return emptySlice
}
res, ok := params.([]interface{})
if !ok {
return emptySlice
}
return res
}
func getBytesFromJSON(fileName string, t *testing.T) []byte {
jsonFile, err := os.Open(fileName)
if err != nil {
t.Error(err)
}
defer jsonFile.Close()
bytes, err := io.ReadAll(jsonFile)
if err != nil {
t.Error(err)
}
return bytes
}
func getErrorsFromJSON(bytes []byte, t *testing.T, cloud string) {
var requests map[string]interface{}
switch cloud {
case "cloudapi":
requests = getRequestsMapCloudAPI()
case "cloudbroker":
requests = getRequestsMapCloudbroker()
default:
t.Fatalf("Wrong cloud provided, expected `cloudapi` or `cloudbroker`, got %s", cloud)
}
paths, err := getMapFromFile(bytes)
if err != nil {
t.Error(err)
}
i := 0
for k, v := range paths {
// exclude deprecated urls from analysis
if !validateUrlFromJson(k) {
continue
}
params := getParameters(v.(map[string]interface{}))
structure, ok := requests[k]
if !ok {
continue
}
i++
typStruct := reflect.TypeOf(structure)
var errs []string
// empty request case
if len(params) == 0 && structure == nil {
continue
}
if len(params) != typStruct.NumField() {
errs = append(errs, fmt.Sprintf("Platform (%d) and golang structure (%d) have different amount of fields.", len(params), typStruct.NumField()))
}
for _, p := range params {
param, ok := p.(map[string]interface{})
if !ok {
continue
}
name := param["name"].(string)
required := param["required"].(bool)
typ := p.(map[string]interface{})["type"].(string)
var items string
if p.(map[string]interface{})["items"] != nil {
itemsTemp := p.(map[string]interface{})["items"]
if itemsTemp != nil {
itemsType := itemsTemp.(map[string]interface{})["type"]
if itemsType != nil {
items = itemsType.(string)
}
}
}
var found bool
for i := 0; i < typStruct.NumField(); i++ {
jsonTag := typStruct.Field(i).Tag.Get("json")
validation, _ := typStruct.Field(i).Tag.Lookup("validate")
if checkName(name, jsonTag) {
if !checkRequired(required, validation, typ) {
errs = append(errs, fmt.Sprintf("Field %s has different required parameters on the platform and in golang structure", name))
}
if !checkKind(typ, items, typStruct.Field(i).Type) {
errs = append(errs, fmt.Sprintf("Field %s has different type parameters on the platform and in golang structure", name))
}
found = true
break
}
}
if !found {
errs = append(errs, fmt.Sprintf("Platform has field %s that golang structure doesn't", name))
}
}
if len(errs) > 0 {
t.Errorf("Path %s has following errors: %v", k, errs)
}
}
if len(requests) != i {
t.Errorf("Amount of structure checked (%d) is not the same as amount of platform requests available (%d), please check getRequestsMapCloudAPI func in code.",
i, len(requests))
}
}
// checkName checks if name field from platform has the same value as json tag in golang structure (maybe including omitempty)
func checkName(name, tag string) bool {
return strings.Contains(tag, name)
}
// checkRequired checks if required field from platform has the same value as validate tag in golang structure
func checkRequired(required bool, validation, fieldType string) bool {
if required && strings.Contains(validation, "required") {
return true
}
if required && (!strings.Contains(validation, "omitempty") && validation != "") {
return true
}
if !required && (validation == "" || strings.Contains(validation, "omitempty")) {
return true
}
if fieldType == "boolean" {
return true // otherwise we have issues with setting false/true
}
return false
}
// checkKind checks if type field from platform has the same value as field type in golang structure
func checkKind(platformType, items string, typ reflect.Type) bool {
//nolint
switch typ.Kind() {
case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int8, reflect.Int16, reflect.Uint, reflect.Uint64, reflect.Uint16, reflect.Uint32, reflect.Uint8:
if platformType == "integer" {
return true
}
return false
case reflect.String:
if platformType == "string" {
return true
}
return false
case reflect.Bool:
if platformType == "boolean" {
return true
}
return false
case reflect.Float32, reflect.Float64:
if platformType == "number" {
return true
}
return false
case reflect.Array, reflect.Slice:
if platformType != "array" {
return false
}
elem := typ.Elem()
switch elem.Kind() {
case reflect.String:
if items == "string" {
return true
}
return false
case reflect.Int, reflect.Int32, reflect.Int64, reflect.Int8, reflect.Int16, reflect.Uint, reflect.Uint64, reflect.Uint16, reflect.Uint32, reflect.Uint8:
if items == "integer" {
return true
}
return false
}
}
return false
}

View File

@@ -0,0 +1,171 @@
package test
import (
"bufio"
"fmt"
"os"
"strings"
)
// DEPRECATED_GROUPS stores API groups that are deprecated and therefore are not supported in further developement
var DEPRECATED_GROUPS = []string{
"/cloudapi/machine/",
"/cloudapi/cloudspace/",
"/cloudapi/prometheus/",
"//cloudbroker/pgpu/",
"/cloudapi/gpu/",
"/cloudapi/portforwarding/",
"/cloudapi/account/listVMs",
"/cloudapi/account/listCS",
"/cloudapi/account/getStats",
"/cloudapi/vgpu/list",
"/cloudbroker/account/listVMs",
"/cloudbroker/account/listCS",
"/cloudbroker/machine/",
"/cloudbroker/bservice/",
"/cloudbroker/prometheus/",
"/cloudbroker/auditcollector/",
"/cloudbroker/health/",
"/cloudbroker/metering/",
"/cloudbroker/cloudspace/",
"/cloudbroker/vnfdev/",
"/cloudbroker/auditbeat/",
"/cloudbroker/zeroaccess/",
"/cloudbroker/qos/",
"/cloudbroker/backupcreator/",
"/cloudbroker/resmon/",
"/cloudbroker/pgpu/",
"/cloudbroker/job/",
"/cloudbroker/tlock/",
"/cloudbroker/eco/",
"/cloudbroker/iaas/",
"/cloudbroker/diagnostics/",
"/cloudbroker/milestones/",
}
// getUrlsFromBytes converts bytes to array of urls strings
func getUrlsFromBytes(bytes []byte) ([]string, error) {
paths, err := getMapFromFile(bytes)
if err != nil {
return nil, err
}
urls := make([]string, 0, len(paths))
for p := range paths {
if validateUrlFromJson(p) {
urls = append(urls, p)
}
}
return urls, nil
}
func validateUrlFromJson(url string) bool {
if !strings.HasPrefix(url, "/cloudapi/") && !strings.HasPrefix(url, "/cloudbroker/") {
return false
}
for _, deprecated := range DEPRECATED_GROUPS {
if strings.Contains(url, deprecated) {
return false
}
}
return true
}
// getMissingDecortUrls returns array of url strings that are present in json swagger docs and absent in decort-sdk handlers.
func getMissingDecortUrls(jsonUrls, decortUrls []string) []string {
result := make([]string, 0, len(jsonUrls))
for _, jsonUrl := range jsonUrls {
var found bool
for _, decortUrl := range decortUrls {
if jsonUrl == decortUrl {
found = true
break
}
}
if !found {
result = append(result, jsonUrl)
}
}
return result
}
// readUrlFromDir reads all url addresses from given directory and its subdirectories and subfiles and returns array of urls found. Capacity will
func readUrlFromDir(dirName string, capacity int) []string {
result := make([]string, 0, capacity)
items, _ := os.ReadDir(dirName)
for _, item := range items {
itemName := dirName + "/" + item.Name()
if item.IsDir() {
subitems, _ := os.ReadDir(itemName)
for _, subitem := range subitems {
subName := itemName + "/" + subitem.Name()
files, _ := os.ReadDir(subName)
if item.IsDir() {
for _, file := range files {
fileName := dirName + "/" + item.Name() + "/" + subitem.Name() + "/" + file.Name()
if !file.IsDir() {
url, err := readUrlFromFile(fileName)
if err != nil {
continue
}
result = append(result, url...)
}
}
}
if !subitem.IsDir() {
url, err := readUrlFromFile(subName)
if err != nil {
continue
}
result = append(result, url...)
}
}
} else {
url, err := readUrlFromFile(itemName)
if err != nil {
continue
}
result = append(result, url...)
}
}
return result
}
// readUrlFromFile reads url address of format url := "/cloudapi/vins/audits" or url := "/cloudbroker/vins/audits" from file with name fileName.
func readUrlFromFile(fileName string) ([]string, error) {
var result []string
file, err := os.Open(fileName)
if err != nil {
return nil, err
}
defer file.Close()
scanner := bufio.NewScanner(file)
for scanner.Scan() {
if strings.Contains(scanner.Text(), `"/cloudapi/`) {
indexStart := strings.Index(scanner.Text(), "/cloudapi/")
result = append(result, strings.TrimRight(scanner.Text()[indexStart:], `"`))
}
if strings.Contains(scanner.Text(), `"/cloudbroker/`) {
indexStart := strings.Index(scanner.Text(), "/cloudbroker/")
result = append(result, strings.TrimRight(scanner.Text()[indexStart:], `"`))
}
}
if len(result) == 0 {
return nil, fmt.Errorf("file %s doesn't contain any url", fileName)
}
return result, nil
}