From e04dc42d2b37345fd76dfcb40fbc959d6b4e5310 Mon Sep 17 00:00:00 2001 From: Alexey Fetisov Date: Fri, 27 Dec 2024 11:35:22 +0300 Subject: [PATCH] v1.10.0 --- .gitignore | 1 + CHANGELOG.md | 58 +++++++- README.md | 1 + internal/validators/custom.go | 1 - pkg/cloudapi/compute/get_log.go | 2 +- pkg/cloudapi/compute/models.go | 9 ++ pkg/cloudapi/compute/pin_to_stack.go | 15 +- pkg/cloudapi/compute/update.go | 5 + pkg/cloudapi/disks/resize.go | 25 ---- pkg/cloudapi/extnet/get_reserved_ip.go | 50 +++++++ pkg/cloudapi/extnet/models.go | 20 +++ pkg/cloudapi/vins/models.go | 16 +-- pkg/cloudapi/vins/static_route_add.go | 4 - pkg/cloudbroker/compute/list.go | 4 + pkg/cloudbroker/compute/models.go | 9 ++ pkg/cloudbroker/compute/pin_to_stack.go | 5 + pkg/cloudbroker/compute/update.go | 5 + pkg/cloudbroker/disks/resize.go | 25 ---- pkg/cloudbroker/extnet/add_reserved_ip.go | 50 +++++++ pkg/cloudbroker/extnet/del_reserved_ip.go | 50 +++++++ pkg/cloudbroker/extnet/get_reserved_ip.go | 50 +++++++ pkg/cloudbroker/extnet/models.go | 20 +++ pkg/cloudbroker/grid/get_diagnosis.go | 3 +- pkg/cloudbroker/image/models.go | 6 + pkg/cloudbroker/node/models.go | 12 ++ pkg/cloudbroker/node/set_vfs_number.go | 4 + pkg/cloudbroker/sep/update_capacity_limit.go | 38 ----- pkg/cloudbroker/vgpu/list.go | 4 + pkg/cloudbroker/vins/models.go | 15 +- pkg/cloudbroker/vins/static_route_add.go | 4 - tests/platform_upgrade/cloud_test.go | 38 ++++- tests/platform_upgrade/request_map.go | 134 ++++++++++-------- .../test_get_list_cloudAPI.log | 31 ---- .../test_get_list_cloudbroker.log | 34 ----- .../test_requests_cloudAPI.log | 14 -- .../test_requests_cloudbroker.log | 1 - tests/platform_upgrade/utils_urls.go | 27 ++++ 37 files changed, 516 insertions(+), 274 deletions(-) create mode 100644 pkg/cloudapi/extnet/get_reserved_ip.go create mode 100644 pkg/cloudbroker/extnet/add_reserved_ip.go create mode 100644 pkg/cloudbroker/extnet/del_reserved_ip.go create mode 100644 pkg/cloudbroker/extnet/get_reserved_ip.go delete mode 100644 pkg/cloudbroker/sep/update_capacity_limit.go delete mode 100644 tests/platform_upgrade/test_get_list_cloudAPI.log delete mode 100644 tests/platform_upgrade/test_get_list_cloudbroker.log delete mode 100644 tests/platform_upgrade/test_requests_cloudAPI.log delete mode 100644 tests/platform_upgrade/test_requests_cloudbroker.log diff --git a/.gitignore b/.gitignore index 54c2405..d5a7a4b 100644 --- a/.gitignore +++ b/.gitignore @@ -6,4 +6,5 @@ cmd/ tests/platform_upgrade/.env tests/platform_upgrade/input.json tests/platform_upgrade/*.txt +tests/platform_upgrade/*.log *.env diff --git a/CHANGELOG.md b/CHANGELOG.md index c745b8a..fe24df3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,14 +1,64 @@ -## Version 1.9.2 +## Version 1.10.0 ### Добавлено -#### kvmvm +#### compute | Идентификатор
задачи | Описание | | --- | --- | -| BGOS-196 | Опциональное поле `MTU` в структуре `CreateRequest/Interface` в cloudapi/kvmvm и cloudbroker/kvmvm | +| BGOS-204 | Вычисляемое поле `VNCPassword` в моделях `RecordCompute` в cloudapi/compute и cloudbroker/compute | +| BGOS-204 | Опциональное поле `CDImageID` в структуре `ListRequest` в cloudbroker/compute | +| BGOS-211 | Вычисляемое поле `AutoStart` в моделях `RecordCompute, ItemCompute, InfoCompute` в cloudapi/compute и cloudbroker/compute | +| BGOS-211 | Опциональное поле `AutoStart` в структурах `PinToStackRequest, UpdateRequest` в cloudapi/compute и cloudbroker/compute | + +#### extnet +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-204 | Вычисляемое поле `AccountID` в модели `ItemReservation` в cloudapi/extnet и cloudbroker/extnet | +| BGOS-205 | Методы API `cloudbroker/extnet/addReservedIp, cloudbroker/extnet/getReservedIp, cloudapi/extnet/getReservedIp, cloudbroker/extnet/delReservedIp` в cloudapi/extnet и cloudbroker/extnet | + +#### image +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-214 | Вычисляемое поле `SnapshotID` в модели `RecordImage, ItemImage` в cloudbroker/image | + +#### node +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-204 | Обязательное поле `Spoofchk` в структуре `SetVFsNumberRequest` в cloudbroker/node | +| BGOS-213 | Вычисляемое поле `NetAddr` в модели `RecordNode` в cloudbroker/node | + +#### vgpu +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-204 | Опциональное поле `NID` в структуре `ListRequest` в cloudbroker/vgpu | + +#### vins +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-204 | Вычисляемое поле `VNCPassword` в модели `RecordVNFDev` в cloudapi/vins и cloudbroker/vins | +| BGOS-204 | Вычисляемое поле `AccoundID` в модели `ItemReservation` в cloudapi/vins | ### Удалено +#### disks +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-206 | Метод `Resize` в cloudapi/disks и cloudbroker/disks | + +#### sep +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-206 | Метод `UpdateCapacityLimit` cloudbroker/sep | + +#### vins +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-204 | Вычисляемые поля `ClientType,Description,DomainName,Hostname` в модели `ItemReservation` в cloudapi/vins и cloudbroker/vins | +| BGOS-204 | Вычисляемое поле `СomputeIds` в структуре `StaticRouteAddRequest` в cloudapi/vins и cloudbroker/vins | + +### Исправлено + +#### compute | Идентификатор
задачи | Описание | | --- | --- | -| BGOS-197 | Readme-файл `README_EN.md` | \ No newline at end of file +| BATF-215 | Изменены возвращаемые параметры метода `PinToStack` на `bool,error` в cloudapi/compute | \ No newline at end of file diff --git a/README.md b/README.md index 45dc0e1..1ab007b 100644 --- a/README.md +++ b/README.md @@ -14,6 +14,7 @@ Decort SDK - это библиотека, написанная на языке G - Версия 1.7.х Decort-SDK соответствует 3.8.9 версии платформы - Версия 1.8.х Decort-SDK соответствует 4.0.0 версии платформы - Версия 1.9.х Decort-SDK соответствует 4.1.0 версии платформы + - Версия 1.10.х Decort-SDK соответствует 4.2.0 версии платформы ## Оглавление diff --git a/internal/validators/custom.go b/internal/validators/custom.go index 4e2141c..fd3187c 100644 --- a/internal/validators/custom.go +++ b/internal/validators/custom.go @@ -374,7 +374,6 @@ func urlValidartor(fl validator.FieldLevel) bool { func chipsetValidator(fe validator.FieldLevel) bool { fieldValue := fe.Field().String() - fieldValue = strings.ToLower(fieldValue) return IsInSlice(fieldValue, chipsetValues) } diff --git a/pkg/cloudapi/compute/get_log.go b/pkg/cloudapi/compute/get_log.go index 485d8f9..2fe57e2 100644 --- a/pkg/cloudapi/compute/get_log.go +++ b/pkg/cloudapi/compute/get_log.go @@ -42,7 +42,7 @@ func (c Compute) GetLogGet(ctx context.Context, req GetLogRequest) (string, erro return "", validators.ValidationErrors(validators.GetErrors(err)) } - url := "/cloudapi//compute/getLog" + url := "/cloudapi/compute/getLog" res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req) if err != nil { diff --git a/pkg/cloudapi/compute/models.go b/pkg/cloudapi/compute/models.go index 3272bfe..a4dad63 100644 --- a/pkg/cloudapi/compute/models.go +++ b/pkg/cloudapi/compute/models.go @@ -299,6 +299,9 @@ type RecordCompute struct { // List anti affinity rules AntiAffinityRules ListRules `json:"antiAffinityRules"` + // Auto start when node restarted + AutoStart bool `json:"autoStart"` + // Architecture Architecture string `json:"arch"` @@ -484,6 +487,9 @@ type RecordCompute struct { // Virtual image name VirtualImageName string `json:"virtualImageName"` + + // VNC password + VNCPassword string `json:"vncPasswd"` } // Information about libvirt settings @@ -866,6 +872,9 @@ type ItemCompute struct { // List anti affinity rules AntiAffinityRules ListRules `json:"antiAffinityRules"` + // Auto start when node restarted + AutoStart bool `json:"autoStart"` + // Architecture Architecture string `json:"arch"` diff --git a/pkg/cloudapi/compute/pin_to_stack.go b/pkg/cloudapi/compute/pin_to_stack.go index 176cc3c..42ad7a0 100644 --- a/pkg/cloudapi/compute/pin_to_stack.go +++ b/pkg/cloudapi/compute/pin_to_stack.go @@ -13,25 +13,30 @@ type PinToStackRequest struct { // ID of the compute instance // Required: true ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` + + // Auto start when node restarted + // Required: false + // Default: false + AutoStart bool `url:"autoStart" json:"autoStart"` } // PinToStack pin compute to current stack -func (c Compute) PinToStack(ctx context.Context, req PinToStackRequest) (uint64, error) { +func (c Compute) PinToStack(ctx context.Context, req PinToStackRequest) (bool, error) { err := validators.ValidateRequest(req) if err != nil { - return 0, validators.ValidationErrors(validators.GetErrors(err)) + return false, validators.ValidationErrors(validators.GetErrors(err)) } url := "/cloudapi/compute/pinToStack" res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { - return 0, err + return false, err } - result, err := strconv.ParseUint(string(res), 10, 64) + result, err := strconv.ParseBool(string(res)) if err != nil { - return 0, err + return false, err } return result, nil diff --git a/pkg/cloudapi/compute/update.go b/pkg/cloudapi/compute/update.go index aca9b29..6f50f1c 100644 --- a/pkg/cloudapi/compute/update.go +++ b/pkg/cloudapi/compute/update.go @@ -43,6 +43,11 @@ type UpdateRequest struct { // Required: false // Default: false HPBacked bool `url:"hpBacked" json:"hpBacked"` + + // Auto start when node restarted + // Required: false + // Default: false + AutoStart bool `url:"autoStart" json:"autoStart"` } // Update updates some properties of the compute diff --git a/pkg/cloudapi/disks/resize.go b/pkg/cloudapi/disks/resize.go index b317c4c..5d538fe 100644 --- a/pkg/cloudapi/disks/resize.go +++ b/pkg/cloudapi/disks/resize.go @@ -19,31 +19,6 @@ type ResizeRequest struct { Size uint64 `url:"size" json:"size" validate:"required"` } -// Resize resizes disk -// Returns 200 if disk is resized online, else will return 202, -// in that case please stop and start your machine after changing the disk size, for your changes to be reflected. -// This method will not be used for disks, assigned to computes. Only unassigned disks and disks, assigned with "old" virtual machines. -func (d Disks) Resize(ctx context.Context, req ResizeRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - return false, validators.ValidationErrors(validators.GetErrors(err)) - } - - url := "/cloudapi/disks/resize" - - res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return false, err - } - - result, err := strconv.ParseBool(string(res)) - if err != nil { - return false, err - } - - return result, nil -} - // Resize2 resize disk // Returns 200 if disk is resized online, else will return 202, // in that case please stop and start your machine after changing the disk size, for your changes to be reflected. diff --git a/pkg/cloudapi/extnet/get_reserved_ip.go b/pkg/cloudapi/extnet/get_reserved_ip.go new file mode 100644 index 0000000..2cea1a3 --- /dev/null +++ b/pkg/cloudapi/extnet/get_reserved_ip.go @@ -0,0 +1,50 @@ +package extnet + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// GetRequest struct to get information about reserved address or address poll +type GetReservedIP struct { + // AccountID of the account whose reservation information we want to receive + // Required: true + AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` + + // Field for specifying the ID of extnet whose reservation information we want to receive + // Required: false + ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"` +} + +// GetReservedIP gets information about reserved address or address poll as a slice of RecordReservedIP struct +func (e ExtNet) GetReservedIP(ctx context.Context, req GetReservedIP) ([]RecordReservedIP, error) { + res, err := e.GetReservedIPRaw(ctx, req) + if err != nil { + return nil, err + } + + reservedIP := make([]RecordReservedIP, 0) + + err = json.Unmarshal(res, &reservedIP) + if err != nil { + return nil, err + } + + return reservedIP, nil +} + +// GetRaw gets detailed information about external network as an array of bytes +func (e ExtNet) GetReservedIPRaw(ctx context.Context, req GetReservedIP) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudapi/extnet/getReservedIp" + + res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudapi/extnet/models.go b/pkg/cloudapi/extnet/models.go index 257e2b9..cb52015 100644 --- a/pkg/cloudapi/extnet/models.go +++ b/pkg/cloudapi/extnet/models.go @@ -87,6 +87,9 @@ type QOS struct { // Main information about reservations type ItemReservation struct { + // Account ID + AccountID uint64 `json:"account_id"` + // ClientType ClientType string `json:"clientType"` @@ -226,3 +229,20 @@ type RecordExtNet struct { // VNFs VNFs VNFs `json:"vnfs"` } + +// Detailed information about reserved address or address pool +type RecordReservedIP struct { + ExtnetID int `json:"extnet_id"` + Reservations []Reservations `json:"reservations"` +} + +type Reservations struct { + AccountID int `json:"account_id"` + ClientType string `json:"clientType"` + DomainName string `json:"domainname"` + Hostname string `json:"hostname"` + IP string `json:"ip"` + Mac string `json:"mac"` + Type string `json:"type"` + VMID int `json:"vmId"` +} diff --git a/pkg/cloudapi/vins/models.go b/pkg/cloudapi/vins/models.go index 7c97216..1f54c3a 100644 --- a/pkg/cloudapi/vins/models.go +++ b/pkg/cloudapi/vins/models.go @@ -208,6 +208,9 @@ type RecordVNFDev struct { // List of VINS IDs VINS []uint64 `json:"vins"` + + // VNC password + VNCPassword string `json:"vncPasswd"` } // VNF config @@ -793,17 +796,8 @@ type ListNATRules struct { // Main information about reservation type ItemReservation struct { - // Client type - ClientType string `json:"clientType"` - - // Description - Description string `json:"desc"` - - // Domain name - DomainName string `json:"domainname"` - - // Hostname - Hostname string `json:"hostname"` + // Account ID + AccountID uint64 `json:"account_id"` // IP IP string `json:"ip"` diff --git a/pkg/cloudapi/vins/static_route_add.go b/pkg/cloudapi/vins/static_route_add.go index 67876aa..86b832b 100644 --- a/pkg/cloudapi/vins/static_route_add.go +++ b/pkg/cloudapi/vins/static_route_add.go @@ -25,10 +25,6 @@ type StaticRouteAddRequest struct { // Next hop host, IP address from ViNS ID free IP pool // Required: true Gateway string `url:"gateway" json:"gateway" validate:"required"` - - // List of Compute IDs which have access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` } // StaticRouteAdd adds new static route to ViNS diff --git a/pkg/cloudbroker/compute/list.go b/pkg/cloudbroker/compute/list.go index b243cf7..bc481b5 100644 --- a/pkg/cloudbroker/compute/list.go +++ b/pkg/cloudbroker/compute/list.go @@ -50,6 +50,10 @@ type ListRequest struct { // Required: false ImageID uint64 `url:"imageId,omitempty" json:"imageId,omitempty"` + // Find by CD image ID + // Required: false + CDImageID uint64 `url:"cdImageId,omitempty" json:"cdImageId,omitempty"` + // Find by external network name // Required: false ExtNetName string `url:"extNetName,omitempty" json:"extNetName,omitempty"` diff --git a/pkg/cloudbroker/compute/models.go b/pkg/cloudbroker/compute/models.go index 0d6a2c7..a59627b 100644 --- a/pkg/cloudbroker/compute/models.go +++ b/pkg/cloudbroker/compute/models.go @@ -624,6 +624,9 @@ type InfoCompute struct { // Anti affinity rules AntiAffinityRules ListRules `json:"antiAffinityRules"` + // Auto start when node restarted + AutoStart bool `json:"autoStart"` + // Architecture Arch string `json:"arch"` @@ -846,6 +849,9 @@ type RecordCompute struct { // Anti affinity rules AntiAffinityRules ListRules `json:"antiAffinityRules"` + // Auto start when node restarted + AutoStart bool `json:"autoStart"` + // Architecture Arch string `json:"arch"` @@ -1043,6 +1049,9 @@ type RecordCompute struct { // VirtualImageName VirtualImageName string `json:"virtualImageName"` + + // VNC password + VNCPassword string `json:"vncPasswd"` } // Information about of disk IDs diff --git a/pkg/cloudbroker/compute/pin_to_stack.go b/pkg/cloudbroker/compute/pin_to_stack.go index 2b89ea3..d3e13a6 100644 --- a/pkg/cloudbroker/compute/pin_to_stack.go +++ b/pkg/cloudbroker/compute/pin_to_stack.go @@ -21,6 +21,11 @@ type PinToStackRequest struct { // Try to migrate or not if compute in running states // Required: false Force bool `url:"force" json:"force"` + + // Auto start when node restarted + // Required: false + // Default: false + AutoStart bool `url:"autoStart" json:"autoStart"` } // PinToStack pins compute to current stack diff --git a/pkg/cloudbroker/compute/update.go b/pkg/cloudbroker/compute/update.go index 8c659c1..88cbf3a 100644 --- a/pkg/cloudbroker/compute/update.go +++ b/pkg/cloudbroker/compute/update.go @@ -43,6 +43,11 @@ type UpdateRequest struct { // Required: false // Default: false HPBacked bool `url:"hpBacked" json:"hpBacked"` + + // Auto start when node restarted + // Required: false + // Default: false + AutoStart bool `url:"autoStart" json:"autoStart"` } // Update updates some properties of the compute diff --git a/pkg/cloudbroker/disks/resize.go b/pkg/cloudbroker/disks/resize.go index 07e4b08..dc5622d 100644 --- a/pkg/cloudbroker/disks/resize.go +++ b/pkg/cloudbroker/disks/resize.go @@ -19,31 +19,6 @@ type ResizeRequest struct { Size uint64 `url:"size" json:"size" validate:"required"` } -// Resize resizes disk -// Returns 200 if disk is resized online, else will return 202, -// in that case please stop and start your machine after changing the disk size, for your changes to be reflected. -// This method will not be used for disks, assigned to computes. Only unassigned disks and disks, assigned with "old" virtual machines. -func (d Disks) Resize(ctx context.Context, req ResizeRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - return false, validators.ValidationErrors(validators.GetErrors(err)) - } - - url := "/cloudbroker/disks/resize" - - res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return false, err - } - - result, err := strconv.ParseBool(string(res)) - if err != nil { - return false, err - } - - return result, nil -} - // Resize2 resize disk // Returns 200 if disk is resized online, else will return 202, // in that case please stop and start your machine after changing the disk size, for your changes to be reflected. diff --git a/pkg/cloudbroker/extnet/add_reserved_ip.go b/pkg/cloudbroker/extnet/add_reserved_ip.go new file mode 100644 index 0000000..015143f --- /dev/null +++ b/pkg/cloudbroker/extnet/add_reserved_ip.go @@ -0,0 +1,50 @@ +package extnet + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// AddReserveIPRequest struct to reserved address or address poll +type AddReserveIPRequest struct { + // AccountID to which a reserved address or address pool is added + // Required: true + AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` + + // ExtNetID from which the address or address pool is reserved + // Required: true + ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` + + // Field for specifying the number of reserved addresses + // Required: false + IPCount uint64 `url:"ipCount,omitempty" json:"ipCount,omitempty"` + + // List of IPs for specifying the desired address + // Required: false + IPs []string `url:"ips,omitempty" json:"ips,omitempty"` +} + +// AddReserveIP reserves address or address poll to external network for account ID +func (e ExtNet) AddReserveIP(ctx context.Context, req AddReserveIPRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/extnet/addReservedIp" + + res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req) + if err != nil { + return false, err + } + + result, err := strconv.ParseBool(string(res)) + if err != nil { + return false, err + } + + return result, nil +} diff --git a/pkg/cloudbroker/extnet/del_reserved_ip.go b/pkg/cloudbroker/extnet/del_reserved_ip.go new file mode 100644 index 0000000..61cdb4e --- /dev/null +++ b/pkg/cloudbroker/extnet/del_reserved_ip.go @@ -0,0 +1,50 @@ +package extnet + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// DelReserveIPRequest struct to delete reserved address or address poll +type DelReserveIPRequest struct { + // AccountID to which a reserved address or address pool is added + // Required: true + AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` + + // ExtNetID from which the address or address pool is reserved + // Required: true + ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` + + // Field for specifying the number of reserved addresses + // Required: false + IPCount uint64 `url:"ipCount,omitempty" json:"ipCount,omitempty"` + + // List of IPs for specifying the desired address + // Required: false + IPs []string `url:"ips,omitempty" json:"ips,omitempty"` +} + +// DelReserveIP deletes reserved address or address poll to external network for account ID +func (e ExtNet) DelReserveIP(ctx context.Context, req DelReserveIPRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + return false, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/extnet/delReservedIp" + + res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req) + if err != nil { + return false, err + } + + result, err := strconv.ParseBool(string(res)) + if err != nil { + return false, err + } + + return result, nil +} diff --git a/pkg/cloudbroker/extnet/get_reserved_ip.go b/pkg/cloudbroker/extnet/get_reserved_ip.go new file mode 100644 index 0000000..30ed2b2 --- /dev/null +++ b/pkg/cloudbroker/extnet/get_reserved_ip.go @@ -0,0 +1,50 @@ +package extnet + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// GetRequest struct to get information about reserved address or address poll +type GetReservedIP struct { + // AccountID of the account whose reservation information we want to receive + // Required: true + AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` + + // Field for specifying the ID of extnet whose reservation information we want to receive + // Required: false + ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"` +} + +// GetReservedIP gets information about reserved address or address poll as a slice of RecordReservedIP struct +func (e ExtNet) GetReservedIP(ctx context.Context, req GetReservedIP) ([]RecordReservedIP, error) { + res, err := e.GetReservedIPRaw(ctx, req) + if err != nil { + return nil, err + } + + reservedIP := make([]RecordReservedIP, 0) + + err = json.Unmarshal(res, &reservedIP) + if err != nil { + return nil, err + } + + return reservedIP, nil +} + +// GetRaw gets detailed information about external network as an array of bytes +func (e ExtNet) GetReservedIPRaw(ctx context.Context, req GetReservedIP) ([]byte, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/extnet/getReservedIp" + + res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req) + return res, err +} diff --git a/pkg/cloudbroker/extnet/models.go b/pkg/cloudbroker/extnet/models.go index fb34768..56885b9 100644 --- a/pkg/cloudbroker/extnet/models.go +++ b/pkg/cloudbroker/extnet/models.go @@ -17,6 +17,9 @@ type QOS struct { // Main information about reservations type ItemReservation struct { + // Account ID + AccountID uint64 `json:"account_id"` + // Client type ClientType string `json:"clientType"` @@ -238,3 +241,20 @@ type ItemRoutes struct { //Destination network mask in 255.255.255.255 format Netmask string `json:"netmask"` } + +// Detailed information about reserved address or address pool +type RecordReservedIP struct { + ExtnetID int `json:"extnet_id"` + Reservations []Reservations `json:"reservations"` +} + +type Reservations struct { + AccountID int `json:"account_id"` + ClientType string `json:"clientType"` + DomainName string `json:"domainname"` + Hostname string `json:"hostname"` + IP string `json:"ip"` + Mac string `json:"mac"` + Type string `json:"type"` + VMID int `json:"vmId"` +} diff --git a/pkg/cloudbroker/grid/get_diagnosis.go b/pkg/cloudbroker/grid/get_diagnosis.go index 540f2dd..f37f1a8 100644 --- a/pkg/cloudbroker/grid/get_diagnosis.go +++ b/pkg/cloudbroker/grid/get_diagnosis.go @@ -2,7 +2,6 @@ package grid import ( "context" - "fmt" "net/http" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" @@ -39,7 +38,7 @@ func (g Grid) GetDiagnosisGET(ctx context.Context, req GetDiagnosisRequest) (str return "", validators.ValidationErrors(validators.GetErrors(err)) } - url := fmt.Sprintf("/cloudbroker/grid/getDiagnosis/?gid=%d", req.GID) + url := "/cloudbroker/grid/getDiagnosis" res, err := g.client.DecortApiCall(ctx, http.MethodGet, url, req) if err != nil { diff --git a/pkg/cloudbroker/image/models.go b/pkg/cloudbroker/image/models.go index 6e72dfa..22e0a39 100644 --- a/pkg/cloudbroker/image/models.go +++ b/pkg/cloudbroker/image/models.go @@ -104,6 +104,9 @@ type RecordImage struct { // Size Size uint64 `json:"size"` + // SnapshotId + SnapshotID string `json:"snapshotId"` + // Status Status string `json:"status"` @@ -227,6 +230,9 @@ type ItemImage struct { // Size Size uint64 `json:"size"` + // SnapshotId + SnapshotID string `json:"snapshotId"` + // Status Status string `json:"status"` diff --git a/pkg/cloudbroker/node/models.go b/pkg/cloudbroker/node/models.go index 6c16450..d599e85 100644 --- a/pkg/cloudbroker/node/models.go +++ b/pkg/cloudbroker/node/models.go @@ -29,6 +29,9 @@ type RecordNode struct { // NeedReboot NeedReboot bool `json:"needReboot"` + // Netaddr + NetAddr NetAddr `json:"netaddr"` + // Nic Info NicInfo ListNicInfo `json:"nicInfo"` @@ -314,3 +317,12 @@ type ListNodes struct { // Entry count EntryCount uint64 `json:"entryCount"` } + +// Net address +type NetAddr struct { + // Name + Name string `json:"name"` + + // IP list backplane1 node + IP []string `json:"ip"` +} diff --git a/pkg/cloudbroker/node/set_vfs_number.go b/pkg/cloudbroker/node/set_vfs_number.go index 2e5b312..6f0b25c 100644 --- a/pkg/cloudbroker/node/set_vfs_number.go +++ b/pkg/cloudbroker/node/set_vfs_number.go @@ -24,6 +24,10 @@ type SetVFsNumberRequest struct { // Trust // Required: true Trust bool `url:"trust" json:"trust" validate:"required"` + + // Enable spoof checking + // Required: true + Spoofchk bool `url:"spoofchk" json:"spoofchk" validate:"required"` } // SetVFsNumber sets number of VFs for individual NIC on node diff --git a/pkg/cloudbroker/sep/update_capacity_limit.go b/pkg/cloudbroker/sep/update_capacity_limit.go deleted file mode 100644 index c49678c..0000000 --- a/pkg/cloudbroker/sep/update_capacity_limit.go +++ /dev/null @@ -1,38 +0,0 @@ -package sep - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// UpdateCapacityLimitRequest struct to update capacity limits -type UpdateCapacityLimitRequest struct { - // Storage endpoint provider ID - // Required: true - SEPID uint64 `url:"sep_id" json:"sep_id" validate:"required"` -} - -// UpdateCapacityLimit updates SEP capacity limit -func (s SEP) UpdateCapacityLimit(ctx context.Context, req UpdateCapacityLimitRequest) (uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - return 0, validators.ValidationErrors(validators.GetErrors(err)) - } - - url := "/cloudbroker/sep/updateCapacityLimit" - - res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return 0, err - } - - result, err := strconv.ParseUint(string(res), 10, 64) - if err != nil { - return 0, err - } - - return result, nil -} diff --git a/pkg/cloudbroker/vgpu/list.go b/pkg/cloudbroker/vgpu/list.go index 0ffa116..b051641 100644 --- a/pkg/cloudbroker/vgpu/list.go +++ b/pkg/cloudbroker/vgpu/list.go @@ -30,6 +30,10 @@ type ListRequest struct { // Required: false RGID uint64 `url:"rgId,omitempty" json:"rgId,omitempty"` + // Find by id node + // Required: false + NID uint64 `url:"nid,omitempty" json:"nid,omitempty"` + // Find by account id // Required: false AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"` diff --git a/pkg/cloudbroker/vins/models.go b/pkg/cloudbroker/vins/models.go index 3654170..5675c3f 100644 --- a/pkg/cloudbroker/vins/models.go +++ b/pkg/cloudbroker/vins/models.go @@ -235,22 +235,13 @@ type VNFDev struct { //List of VINS IDs VINS []uint64 `json:"vins"` + + // VNC password + VNCPassword string `json:"vncPasswd"` } // Main information about reservation type ItemReservation struct { - // Client type - ClientType string `json:"clientType"` - - // Description - Description string `json:"desc"` - - // Domain name - DomainName string `json:"domainname"` - - // Hostname - Hostname string `json:"hostname"` - // IP IP string `json:"ip"` diff --git a/pkg/cloudbroker/vins/static_route_add.go b/pkg/cloudbroker/vins/static_route_add.go index 61e7080..4934d50 100644 --- a/pkg/cloudbroker/vins/static_route_add.go +++ b/pkg/cloudbroker/vins/static_route_add.go @@ -25,10 +25,6 @@ type StaticRouteAddRequest struct { // Next hop host, IP address from ViNS ID free IP pool // Required: true Gateway string `url:"gateway" json:"gateway" validate:"required"` - - // List of Compute IDs which have access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` } // StaticRouteAdd adds new static route to ViNS diff --git a/tests/platform_upgrade/cloud_test.go b/tests/platform_upgrade/cloud_test.go index 59eb344..0cec216 100644 --- a/tests/platform_upgrade/cloud_test.go +++ b/tests/platform_upgrade/cloud_test.go @@ -20,6 +20,7 @@ import ( "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" + node_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/node" account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account" audit_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit" @@ -563,6 +564,26 @@ func TestGetListCloudbroker(t *testing.T) { t.Errorf("Can not test LB get because LB list is empty") } + // Node + // List + bytes, err = client.CloudBroker().Node().ListRaw(context.Background(), node_cb.ListRequest{}) + if err != nil { + t.Error(err) + } + testLogs = append(testLogs, getResult("Node list", bytes, node_cb.ListNodes{}, t)) + // Get + listNode, _ := client.CloudBroker().Node().List(context.Background(), node_cb.ListRequest{}) + if len(listLB.Data) > 0 { + id := listNode.Data[0].ID + bytes, err = client.CloudBroker().Node().GetRaw(context.Background(), node_cb.GetRequest{NID: id}) + if err != nil { + t.Error(err) + } + testLogs = append(testLogs, getResult("Node get", bytes, node_cb.RecordNode{}, t)) + } else { + t.Errorf("Can not test Node get because LB list is empty") + } + // Pcidevice // List bytes, err = client.CloudBroker().PCIDevice().ListRaw(context.Background(), pcidevice_cb.ListRequest{}) @@ -684,10 +705,19 @@ func TestGetAllPaths(t *testing.T) { 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 { + missingUrls := getMissingDecortUrls(jsonUrls, decortUrls) + if len(missingUrls) > 0 { + errorText := fmt.Sprintf("Below API handlers (%d in total) need to be added to decort-sdk:\n", len(missingUrls)) + for _, r := range missingUrls { + errorText += fmt.Sprintln(r) + } + t.Errorf(errorText) + } + + deprecatedUrls := getDeprecatedDecortUrls(jsonUrls, decortUrls) + if len(deprecatedUrls) > 0 { + errorText := fmt.Sprintf("Below API handlers (%d in total) need to be delete to decort-sdk:\n", len(deprecatedUrls)) + for _, r := range deprecatedUrls { errorText += fmt.Sprintln(r) } t.Errorf(errorText) diff --git a/tests/platform_upgrade/request_map.go b/tests/platform_upgrade/request_map.go index d84732b..7f0749a 100644 --- a/tests/platform_upgrade/request_map.go +++ b/tests/platform_upgrade/request_map.go @@ -2,9 +2,11 @@ package test import ( "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account" + "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/audit" "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/dpdknet" "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" @@ -27,6 +29,7 @@ import ( 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" + dpdknet_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet" 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" @@ -78,6 +81,9 @@ func getRequestsMapCloudAPI() map[string]interface{} { "/restmachine/cloudapi/account/update": account.UpdateRequest{}, "/restmachine/cloudapi/account/updateUser": account.UpdateUserRequest{}, + //audit + "/restmachine/cloudapi/audit/get": audit.GetRequest{}, + //bservice "/restmachine/cloudapi/bservice/create": bservice.CreateRequest{}, "/restmachine/cloudapi/bservice/delete": bservice.DeleteRequest{}, @@ -107,7 +113,6 @@ func getRequestsMapCloudAPI() map[string]interface{} { "/restmachine/cloudapi/bservice/stop": bservice.StopRequest{}, // compute - "/restmachine/cloudapi/compute/affinityGroupCheckStart": compute.AffinityGroupCheckStartRequest{}, "/restmachine/cloudapi/compute/affinityLabelRemove": compute.AffinityLabelRemoveRequest{}, "/restmachine/cloudapi/compute/affinityLabelSet": compute.AffinityLabelSetRequest{}, "/restmachine/cloudapi/compute/affinityRelations": compute.AffinityRelationsRequest{}, @@ -203,7 +208,6 @@ func getRequestsMapCloudAPI() map[string]interface{} { "/restmachine/cloudapi/disks/replicationStatus": disks.ReplicationStatusRequest{}, "/restmachine/cloudapi/disks/replicationStop": disks.ReplicationStopRequest{}, "/restmachine/cloudapi/disks/replicationSuspend": disks.ReplicationSuspendRequest{}, - "/restmachine/cloudapi/disks/resize": disks.ResizeRequest{}, "/restmachine/cloudapi/disks/resize2": disks.ResizeRequest{}, "/restmachine/cloudapi/disks/restore": disks.RestoreRequest{}, "/restmachine/cloudapi/disks/search": disks.SearchRequest{}, @@ -212,11 +216,16 @@ func getRequestsMapCloudAPI() map[string]interface{} { "/restmachine/cloudapi/disks/snapshotRollback": disks.SnapshotRollbackRequest{}, "/restmachine/cloudapi/disks/unshare": disks.UnshareRequest{}, + //dpdknet + "/restmachine/cloudapi/dpdknet/get": dpdknet.GetRequest{}, + "/restmachine/cloudapi/dpdknet/list": dpdknet.ListRequest{}, + // extnet - "/restmachine/cloudapi/extnet/get": extnet.GetRequest{}, - "/restmachine/cloudapi/extnet/getDefault": EmptyStruct{}, - "/restmachine/cloudapi/extnet/list": extnet.ListRequest{}, - "/restmachine/cloudapi/extnet/listComputes": extnet.ListComputesRequest{}, + "/restmachine/cloudapi/extnet/get": extnet.GetRequest{}, + "/restmachine/cloudapi/extnet/getDefault": EmptyStruct{}, + "/restmachine/cloudapi/extnet/getReservedIp": extnet.GetReservedIP{}, + "/restmachine/cloudapi/extnet/list": extnet.ListRequest{}, + "/restmachine/cloudapi/extnet/listComputes": extnet.ListComputesRequest{}, // flipgroup "/restmachine/cloudapi/flipgroup/computeAdd": flipgroup.ComputeAddRequest{}, @@ -353,34 +362,32 @@ func getRequestsMapCloudAPI() map[string]interface{} { "/restmachine/cloudapi/vfpool/list": vfpool.ListRequest{}, // vins - "/restmachine/cloudapi/vins/audits": vins.AuditsRequest{}, - "/restmachine/cloudapi/vins/createInAccount": vins.CreateInAccountRequest{}, - "/restmachine/cloudapi/vins/createInRG": vins.CreateInRGRequest{}, - "/restmachine/cloudapi/vins/delete": vins.DeleteRequest{}, - "/restmachine/cloudapi/vins/disable": vins.DisableEnableRequest{}, - "/restmachine/cloudapi/vins/dnsApply": vins.DNSApplyRequest{}, - "/restmachine/cloudapi/vins/enable": vins.DisableEnableRequest{}, - "/restmachine/cloudapi/vins/extNetConnect": vins.ExtNetConnectRequest{}, - "/restmachine/cloudapi/vins/extNetDisconnect": vins.ExtNetDisconnectRequest{}, - "/restmachine/cloudapi/vins/extNetList": vins.ExtNetListRequest{}, - "/restmachine/cloudapi/vins/get": vins.GetRequest{}, - "/restmachine/cloudapi/vins/ipList": vins.IPListRequest{}, - "/restmachine/cloudapi/vins/ipRelease": vins.IPReleaseRequest{}, - "/restmachine/cloudapi/vins/ipReserve": vins.IPReserveRequest{}, - "/restmachine/cloudapi/vins/list": vins.ListRequest{}, - "/restmachine/cloudapi/vins/listDeleted": vins.ListDeletedRequest{}, - "/restmachine/cloudapi/vins/natRuleAdd": vins.NATRuleAddRequest{}, - "/restmachine/cloudapi/vins/natRuleDel": vins.NATRuleDelRequest{}, - "/restmachine/cloudapi/vins/natRuleList": vins.NATRuleListRequest{}, - "/restmachine/cloudapi/vins/restore": vins.RestoreRequest{}, - "/restmachine/cloudapi/vins/search": vins.SearchRequest{}, - "/restmachine/cloudapi/vins/staticRouteAccessGrant": vins.StaticRouteAccessGrantRequest{}, - "/restmachine/cloudapi/vins/staticRouteAccessRevoke": vins.StaticRouteAccessRevokeRequest{}, - "/restmachine/cloudapi/vins/staticRouteAdd": vins.StaticRouteAddRequest{}, - "/restmachine/cloudapi/vins/staticRouteDel": vins.StaticRouteDelRequest{}, - "/restmachine/cloudapi/vins/staticRouteList": vins.StaticRouteListRequest{}, - "/restmachine/cloudapi/vins/vnfdevRedeploy": vins.VNFDevRedeployRequest{}, - "/restmachine/cloudapi/vins/vnfdevRestart": vins.VNFDevRestartRequest{}, + "/restmachine/cloudapi/vins/audits": vins.AuditsRequest{}, + "/restmachine/cloudapi/vins/createInAccount": vins.CreateInAccountRequest{}, + "/restmachine/cloudapi/vins/createInRG": vins.CreateInRGRequest{}, + "/restmachine/cloudapi/vins/delete": vins.DeleteRequest{}, + "/restmachine/cloudapi/vins/disable": vins.DisableEnableRequest{}, + "/restmachine/cloudapi/vins/dnsApply": vins.DNSApplyRequest{}, + "/restmachine/cloudapi/vins/enable": vins.DisableEnableRequest{}, + "/restmachine/cloudapi/vins/extNetConnect": vins.ExtNetConnectRequest{}, + "/restmachine/cloudapi/vins/extNetDisconnect": vins.ExtNetDisconnectRequest{}, + "/restmachine/cloudapi/vins/extNetList": vins.ExtNetListRequest{}, + "/restmachine/cloudapi/vins/get": vins.GetRequest{}, + "/restmachine/cloudapi/vins/ipList": vins.IPListRequest{}, + "/restmachine/cloudapi/vins/ipRelease": vins.IPReleaseRequest{}, + "/restmachine/cloudapi/vins/ipReserve": vins.IPReserveRequest{}, + "/restmachine/cloudapi/vins/list": vins.ListRequest{}, + "/restmachine/cloudapi/vins/listDeleted": vins.ListDeletedRequest{}, + "/restmachine/cloudapi/vins/natRuleAdd": vins.NATRuleAddRequest{}, + "/restmachine/cloudapi/vins/natRuleDel": vins.NATRuleDelRequest{}, + "/restmachine/cloudapi/vins/natRuleList": vins.NATRuleListRequest{}, + "/restmachine/cloudapi/vins/restore": vins.RestoreRequest{}, + "/restmachine/cloudapi/vins/search": vins.SearchRequest{}, + "/restmachine/cloudapi/vins/staticRouteAdd": vins.StaticRouteAddRequest{}, + "/restmachine/cloudapi/vins/staticRouteDel": vins.StaticRouteDelRequest{}, + "/restmachine/cloudapi/vins/staticRouteList": vins.StaticRouteListRequest{}, + "/restmachine/cloudapi/vins/vnfdevRedeploy": vins.VNFDevRedeployRequest{}, + "/restmachine/cloudapi/vins/vnfdevRestart": vins.VNFDevRestartRequest{}, } } @@ -576,12 +583,23 @@ func getRequestsMapCloudbroker() map[string]interface{} { "/restmachine/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{}, "/restmachine/cloudbroker/disks/unshare": disks_cb.UnshareRequest{}, + // dpdknet + "/restmachine/cloudbroker/dpdknet/get": dpdknet_cb.GetRequest{}, + "/restmachine/cloudbroker/dpdknet/list": dpdknet_cb.ListRequest{}, + "/restmachine/cloudbroker/dpdknet/disable": dpdknet_cb.DisableRequest{}, + "/restmachine/cloudbroker/dpdknet/enable": dpdknet_cb.EnableRequest{}, + "/restmachine/cloudbroker/dpdknet/create": dpdknet_cb.CreateRequest{}, + "/restmachine/cloudbroker/dpdknet/update": dpdknet_cb.UpdateRequest{}, + "/restmachine/cloudbroker/dpdknet/delete": dpdknet_cb.DeleteRequest{}, + // extnet "/restmachine/cloudbroker/extnet/accessAdd": extnet_cb.AccessAddRequest{}, "/restmachine/cloudbroker/extnet/accessRemove": extnet_cb.AccessRemoveRequest{}, + "/restmachine/cloudbroker/extnet/addReservedIp": extnet_cb.AddReserveIPRequest{}, "/restmachine/cloudbroker/extnet/create": extnet_cb.CreateRequest{}, "/restmachine/cloudbroker/extnet/dnsApply": extnet_cb.DNSApplyRequest{}, "/restmachine/cloudbroker/extnet/defaultQosUpdate": extnet_cb.DefaultQOSUpdateRequest{}, + "/restmachine/cloudbroker/extnet/delReservedIp": extnet_cb.DelReserveIPRequest{}, "/restmachine/cloudbroker/extnet/destroy": extnet_cb.DestroyRequest{}, "/restmachine/cloudbroker/extnet/deviceDeploy": extnet_cb.DeviceDeployRequest{}, "/restmachine/cloudbroker/extnet/deviceMigrate": extnet_cb.DeviceMigrateRequest{}, @@ -591,6 +609,7 @@ func getRequestsMapCloudbroker() map[string]interface{} { "/restmachine/cloudbroker/extnet/enable": extnet_cb.EnableRequest{}, "/restmachine/cloudbroker/extnet/get": extnet_cb.GetRequest{}, "/restmachine/cloudbroker/extnet/getDefault": EmptyStruct{}, + "/restmachine/cloudbroker/extnet/getReservedIp": extnet.GetReservedIP{}, "/restmachine/cloudbroker/extnet/ipsExclude": extnet_cb.IPsExcludeRequest{}, "/restmachine/cloudbroker/extnet/ipsExcludeRange": extnet_cb.IPsExcludeRangeRequest{}, "/restmachine/cloudbroker/extnet/ipsInclude": extnet_cb.IPsExcludeRequest{}, @@ -794,30 +813,29 @@ func getRequestsMapCloudbroker() map[string]interface{} { "/restmachine/cloudbroker/rg/usage": rg_cb.UsageRequest{}, // sep - "/restmachine/cloudbroker/sep/accessGrant": sep_cb.AccessGrantRequest{}, - "/restmachine/cloudbroker/sep/accessGrantToPool": sep_cb.AccessGrantToPoolRequest{}, - "/restmachine/cloudbroker/sep/accessRevoke": sep_cb.AccessRevokeRequest{}, - "/restmachine/cloudbroker/sep/accessRevokeToPool": sep_cb.AccessRevokeToPoolRequest{}, - "/restmachine/cloudbroker/sep/addConsumerNodes": sep_cb.AddConsumerNodesRequest{}, - "/restmachine/cloudbroker/sep/addPool": sep_cb.AddPoolRequest{}, - "/restmachine/cloudbroker/sep/addProviderNodes": sep_cb.AddProviderNodesRequest{}, - "/restmachine/cloudbroker/sep/configFieldEdit": sep_cb.ConfigFieldEditRequest{}, - "/restmachine/cloudbroker/sep/configInsert": sep_cb.ConfigInsertRequest{}, - "/restmachine/cloudbroker/sep/configValidate": sep_cb.ConfigValidateRequest{}, - "/restmachine/cloudbroker/sep/consumption": sep_cb.ConsumptionRequest{}, - "/restmachine/cloudbroker/sep/create": sep_cb.CreateRequest{}, - "/restmachine/cloudbroker/sep/decommission": sep_cb.DecommissionRequest{}, - "/restmachine/cloudbroker/sep/delConsumerNodes": sep_cb.DelConsumerNodesRequest{}, - "/restmachine/cloudbroker/sep/delete": sep_cb.DeleteRequest{}, - "/restmachine/cloudbroker/sep/delPool": sep_cb.DelPoolRequest{}, - "/restmachine/cloudbroker/sep/disable": sep_cb.DisableRequest{}, - "/restmachine/cloudbroker/sep/diskList": sep_cb.DiskListRequest{}, - "/restmachine/cloudbroker/sep/enable": sep_cb.EnableRequest{}, - "/restmachine/cloudbroker/sep/get": sep_cb.GetRequest{}, - "/restmachine/cloudbroker/sep/getConfig": sep_cb.GetConfigRequest{}, - "/restmachine/cloudbroker/sep/getPool": sep_cb.GetPoolRequest{}, - "/restmachine/cloudbroker/sep/list": sep_cb.ListRequest{}, - "/restmachine/cloudbroker/sep/updateCapacityLimit": sep_cb.UpdateCapacityLimitRequest{}, + "/restmachine/cloudbroker/sep/accessGrant": sep_cb.AccessGrantRequest{}, + "/restmachine/cloudbroker/sep/accessGrantToPool": sep_cb.AccessGrantToPoolRequest{}, + "/restmachine/cloudbroker/sep/accessRevoke": sep_cb.AccessRevokeRequest{}, + "/restmachine/cloudbroker/sep/accessRevokeToPool": sep_cb.AccessRevokeToPoolRequest{}, + "/restmachine/cloudbroker/sep/addConsumerNodes": sep_cb.AddConsumerNodesRequest{}, + "/restmachine/cloudbroker/sep/addPool": sep_cb.AddPoolRequest{}, + "/restmachine/cloudbroker/sep/addProviderNodes": sep_cb.AddProviderNodesRequest{}, + "/restmachine/cloudbroker/sep/configFieldEdit": sep_cb.ConfigFieldEditRequest{}, + "/restmachine/cloudbroker/sep/configInsert": sep_cb.ConfigInsertRequest{}, + "/restmachine/cloudbroker/sep/configValidate": sep_cb.ConfigValidateRequest{}, + "/restmachine/cloudbroker/sep/consumption": sep_cb.ConsumptionRequest{}, + "/restmachine/cloudbroker/sep/create": sep_cb.CreateRequest{}, + "/restmachine/cloudbroker/sep/decommission": sep_cb.DecommissionRequest{}, + "/restmachine/cloudbroker/sep/delConsumerNodes": sep_cb.DelConsumerNodesRequest{}, + "/restmachine/cloudbroker/sep/delete": sep_cb.DeleteRequest{}, + "/restmachine/cloudbroker/sep/delPool": sep_cb.DelPoolRequest{}, + "/restmachine/cloudbroker/sep/disable": sep_cb.DisableRequest{}, + "/restmachine/cloudbroker/sep/diskList": sep_cb.DiskListRequest{}, + "/restmachine/cloudbroker/sep/enable": sep_cb.EnableRequest{}, + "/restmachine/cloudbroker/sep/get": sep_cb.GetRequest{}, + "/restmachine/cloudbroker/sep/getConfig": sep_cb.GetConfigRequest{}, + "/restmachine/cloudbroker/sep/getPool": sep_cb.GetPoolRequest{}, + "/restmachine/cloudbroker/sep/list": sep_cb.ListRequest{}, // stack "/restmachine/cloudbroker/stack/get": stack_cb.GetRequest{}, diff --git a/tests/platform_upgrade/test_get_list_cloudAPI.log b/tests/platform_upgrade/test_get_list_cloudAPI.log deleted file mode 100644 index d69e59b..0000000 --- a/tests/platform_upgrade/test_get_list_cloudAPI.log +++ /dev/null @@ -1,31 +0,0 @@ -[ - "Account list: OK", - "Account get: OK", - "", - "Bservice get: OK", - "Compute list: \nPlatform has these fields that golang struct doesn't: [lb mgmt_target mgmt_mac mgmt_slot]\n", - "Compute get: \nPlatform has these fields that golang struct doesn't: [mgmt_target mgmt_mac mgmt_slot lb]\n", - "Disk list: OK", - "Disk get: OK", - "", - "ExtNet get: OK", - "FLIPGroup list: OK", - "", - "", - "Image get: \nPlatform has these fields that golang struct doesn't: [12]\n", - "K8CI list: OK", - "", - "K8S list: OK", - "K8S get: OK", - "LB list: \nPlatform has these fields that golang struct doesn't: [fs.inotify.max_queued_events kernel.kptr_restrict net.ipv4.tcp_congestion_control]\n", - "LB get: \nPlatform has these fields that golang struct doesn't: [kernel.kptr_restrict net.ipv4.tcp_congestion_control fs.inotify.max_queued_events]\n", - "Locations list: OK", - "RG list: OK", - "", - "Sizes list: OK", - "", - "Tasks list: \nPlatform has these fields that golang struct doesn't: [completed guid stage updateTime updatedTime auditId error log status]\n", - "Tasks get: \nPlatform has these fields that golang struct doesn't: [updatedTime completed error updateTime auditId stage status log]\n", - "", - "VINS get: OK" -] \ No newline at end of file diff --git a/tests/platform_upgrade/test_get_list_cloudbroker.log b/tests/platform_upgrade/test_get_list_cloudbroker.log deleted file mode 100644 index d9e7152..0000000 --- a/tests/platform_upgrade/test_get_list_cloudbroker.log +++ /dev/null @@ -1,34 +0,0 @@ -[ - "Account list: OK", - "Account get: OK", - "", - "Audit get: OK", - "Compute list: \nPlatform has these fields that golang struct doesn't: [disks]\n", - "Compute get: OK", - "Disk list: \nPlatform has these fields that golang struct doesn't: [machineId machineName sepType devicename]\n", - "Disk get: \nPlatform has these fields that golang struct doesn't: [devicename sepType updatedBy]\n", - "ExtNet list: OK", - "ExtNet get: OK", - "FLIPGroup list: OK", - "", - "Grid list: \nPlatform has these fields that golang struct doesn't: [1 90 380 1 90 380]\n", - "Grid get: OK", - "Image list: OK", - "Image get: OK", - "K8CI list: \nPlatform has these fields that golang struct doesn't: [createdTime]\n", - "K8CI get: OK", - "K8S list: OK", - "K8S get: OK", - "LB list: OK", - "LB get: OK", - "Pcidevice list: OK", - "RG list: OK", - "RG get: OK", - "SEP list: \nPlatform has these fields that golang struct doesn't: [protocol disk_max_size format name name_prefix pools]\n", - "SEP get: \nPlatform has these fields that golang struct doesn't: [format name name_prefix pools protocol disk_max_size]\n", - "Stack list: OK", - "Stack get: OK", - "Tasks list: \nPlatform has these fields that golang struct doesn't: [stage status error log auditId completed updateTime guid]\n", - "", - "VINS get: \nPlatform has these fields that golang struct doesn't: [computes config config config]\n" -] \ No newline at end of file diff --git a/tests/platform_upgrade/test_requests_cloudAPI.log b/tests/platform_upgrade/test_requests_cloudAPI.log deleted file mode 100644 index 9324d11..0000000 --- a/tests/platform_upgrade/test_requests_cloudAPI.log +++ /dev/null @@ -1,14 +0,0 @@ -[ - "Path /cloudapi/compute/antiAffinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]", - "Path /cloudapi/user/setData has following errors: [Field data has different required parameters on the platform and in golang structure]", - "Path /cloudapi/compute/affinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]", - "Path /cloudapi/compute/createTemplate has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]", - "Path /cloudapi/k8s/create has following errors: [Field oidcCertificate has different type parameters on the platform and in golang structure]", - "Path /cloudapi/disks/fromPlatformDisk has following errors: [Platform (14) and golang structure (13) have different amount of fields. Field drivers has different type parameters on the platform and in golang structure Platform has field asyncMode that golang structure doesn't]", - "Path /cloudapi/compute/affinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]", - "Path /cloudapi/compute/antiAffinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]", - "Path /cloudapi/compute/createTemplateFromBlank has following errors: [Platform (11) and golang structure (10) have different amount of fields. Platform has field asyncMode that golang structure doesn't]", - "Path /cloudapi/lb/create has following errors: [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]", - "Path /cloudapi/image/list has following errors: [Field size has different type parameters on the platform and in golang structure]", - "Path /cloudapi/compute/snapshotDelete has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]" -] \ No newline at end of file diff --git a/tests/platform_upgrade/test_requests_cloudbroker.log b/tests/platform_upgrade/test_requests_cloudbroker.log deleted file mode 100644 index 2c619b8..0000000 --- a/tests/platform_upgrade/test_requests_cloudbroker.log +++ /dev/null @@ -1 +0,0 @@ -["Path /cloudbroker/compute/createTemplate has following errors: [Platform (4) and golang structure (3) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/backup/createDisksBackup has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/compute/affinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/apiaccess/update has following errors: [Platform has field apis that golang structure doesn't]","Path /cloudbroker/compute/antiAffinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/compute/snapshotDelete has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/backup/restoreDiskFromBackup has following errors: [Platform (5) and golang structure (4) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/backup/createDiskBackup has following errors: [Platform (4) and golang structure (3) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/compute/createTemplateFromBlank has following errors: [Platform (11) and golang structure (10) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/account/setCpuAllocationRatio has following errors: [Field ratio has different required parameters on the platform and in golang structure]","Path /cloudbroker/disks/fromPlatformDisk has following errors: [Platform (14) and golang structure (13) have different amount of fields. Field drivers has different type parameters on the platform and in golang structure Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/lb/create has following errors: [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]","Path /cloudbroker/stack/setCpuAllocationRatio has following errors: [Field ratio has different required parameters on the platform and in golang structure]","Path /cloudbroker/backup/deleteDiskBackup has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/image/updateNodes has following errors: [Field enabledStacks has different type parameters on the platform and in golang structure]","Path /cloudbroker/stack/setMemAllocationRatio has following errors: [Field ratio has different required parameters on the platform and in golang structure]","Path /cloudbroker/compute/antiAffinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/k8s/create has following errors: [Field oidcCertificate has different type parameters on the platform and in golang structure]","Path /cloudbroker/backup/restoreDisksFromBackup has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field disks that golang structure doesn't Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/node/enable has following errors: [Platform (4) and golang structure (3) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/compute/affinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/image/list has following errors: [Field size has different type parameters on the platform and in golang structure]"] \ No newline at end of file diff --git a/tests/platform_upgrade/utils_urls.go b/tests/platform_upgrade/utils_urls.go index 853af6f..17943a2 100644 --- a/tests/platform_upgrade/utils_urls.go +++ b/tests/platform_upgrade/utils_urls.go @@ -15,10 +15,14 @@ var DEPRECATED_GROUPS = []string{ "//cloudbroker/pgpu/", "/cloudapi/gpu/", "/cloudapi/portforwarding/", + "/cloudapi/account/create", "/cloudapi/account/listVMs", "/cloudapi/account/listCS", "/cloudapi/account/getStats", "/cloudapi/vgpu/list", + "/cloudapi/compute/affinityGroupCheckStart", + "/cloudapi/vins/staticRouteAccessGrant", + "/cloudapi/vins/staticRouteAccessRevoke", "/cloudbroker/account/listVMs", "/cloudbroker/account/listCS", @@ -42,6 +46,9 @@ var DEPRECATED_GROUPS = []string{ "/cloudbroker/iaas/", "/cloudbroker/diagnostics/", "/cloudbroker/milestones/", + "/cloudbroker/compute/affinityGroupCheckStart", + "/cloudbroker/vins/staticRouteAccessGrant", + "/cloudbroker/vins/staticRouteAccessRevoke", } // getUrlsFromBytes converts bytes to array of urls strings @@ -95,6 +102,26 @@ func getMissingDecortUrls(jsonUrls, decortUrls []string) []string { return result } +// getMissingDecortUrls returns array of url strings that are present in json swagger docs and absent in decort-sdk handlers. +func getDeprecatedDecortUrls(jsonUrls, decortUrls []string) []string { + result := make([]string, 0, len(decortUrls)) + for _, decortUrl := range decortUrls { + var found bool + for _, jsonUrl := range jsonUrls { + if jsonUrl == decortUrl { + found = true + break + } + } + + if !found && validateUrlFromJson(decortUrl) { + result = append(result, decortUrl) + } + } + + 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)