diff --git a/CHANGELOG.md b/CHANGELOG.md index 4c9f234..03b9f9e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,7 +1,6 @@ -## Version 1.13.8 +## Version 1.14.0 Методы `Audits` в cloudapi/compute, cloudbroker/compute, cloudapi/account, cloudbroker/account, cloudapi/vins, cloudbroker/vins, cloudapi/rg и cloudbroker/rg стали deprecated и в следующих версиях будут удалены, вместо них необходимо использовать метод `List` в cloudapi/audit и cloudbroker/audit с соответствующими фильтрами -Метод `ListNodes` в cloudbroker/image стал deprecated и в следующих версиях будет удалён Методы `AccessGrant`, `AccessGrantToPool`, `AccessRevoke`, `AccessRevokeToPool` в cloudbroker/sep стали deprecated и в следующих версиях будут удалены Методы `ComputeCISet`, `ComputeCIUnset`, `GetAudits` в cloudbroker/compute и `GetAudits` в cloudapi/compute стали deprecated и будут удалены в следующих версиях Методы `ComputeCISet`, `ComputeCIUnset` в cloudbroker/image стали deprecated и будут удалены в следующих версиях @@ -10,7 +9,41 @@ ### Добавлено +#### account +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-772 | Вычисляемое поле `UpdatedBy` в структуры ответа `RecordAccount` в cloudapi/account и `InfoAccount` в cloudbroker/account | + +#### compute +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-767 | Метод `CheckComputePlacement`, структура запроса `CheckComputePlacementRequest` и структуры ответа `CheckComputePlacementResult`, `CheckComputePlacementItem`,`CheckComputePlacementError` в cloudbroker/compute | +| BGOS-771 | Вычисляемое поле `BlockSize` в структуры ответа `ItemDisk` в cloudbroker/compute и в `ItemComputeDisk` в cloudapi/compute | + +#### disks +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-770 | Опциональное поле `BlockSize` в структуру запроса `UpdateRequest` в cloudbroker/disks | +| BGOS-770 | Вычисляемое поле `BlockSize` в структуры ответа `ItemDisk`, `ItemDiskUnattached` и `RecordDisk` в cloudapi/disks и в структуры ответа `InfoDisk` и `RecordDisk` в cloudbroker/disks | + +#### node +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-769 | Опциональное поле `ZoneID` в структуру запроса `ListRequest` в cloudbroker/node | + +#### SDN external networks +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-694 | Опциональные поля `OperationStatus` и `HypervisorStatus` в структуру запроса `ListRequest` в sdn/external_networks | + +#### SDN network object groups +| Идентификатор
задачи | Описание | +| --- | --- | +| BGOS-749 | Методы `AttachL2ConnectionPorts`, `DetachL2ConnectionPorts` и структуры запросов `AttachL2ConnectionPortsRequest`, `L2PortBindings`, `DetachL2PortBindings`, `DetachL2ConnectionPortsRequest` в sdn/netobjgroups | + +### Удалено + #### kvmx86 | Идентификатор
задачи | Описание | | --- | --- | -| BGOS-763 | Опциональное поле `BLKDiscard` в структуре `DataDisk` в структурах запроса `CreateRequest`, `CreateBlankRequest` и `MassCreateRequest` в cloudbroker/kvmx86 | +| BGOS-773 | Опциональные поля `IS` и `IPAType` из структур запроса `CreateRequest` в cloudapi/kvmx86 и в cloudbroker/kvmx86 | diff --git a/README.md b/README.md index f52096b..c51cf2c 100644 --- a/README.md +++ b/README.md @@ -18,6 +18,7 @@ Decort SDK - это библиотека, написанная на языке G - Версия 1.11.х Decort-SDK соответствует 4.3.0 версии платформы - Версия 1.12.х Decort-SDK соответствует 4.4.0 версии платформы - Версия 1.13.х Decort-SDK соответствует 4.5.0 версии платформы + - Версия 1.14.х Decort-SDK соответствует 4.6.0 версии платформы ## Оглавление diff --git a/internal/constants/constants.go b/internal/constants/constants.go index 4f9dee5..c21520f 100644 --- a/internal/constants/constants.go +++ b/internal/constants/constants.go @@ -28,6 +28,7 @@ var FileName = map[string]string{ var K8sValues = []string{"labels", "taints", "annotations, additionalSANs"} var VersionMap = map[string]string{ + "4.6.0": "-", "4.5.0": "-", "4.4.0": "-", "4.3.0": "-", diff --git a/pkg/cloudapi/account/models.go b/pkg/cloudapi/account/models.go index 529578c..357cbc1 100644 --- a/pkg/cloudapi/account/models.go +++ b/pkg/cloudapi/account/models.go @@ -299,6 +299,9 @@ type RecordAccount struct { // UniqPools UniqPools []interface{} `json:"uniqPools"` + // Updated By + UpdatedBy string `json:"updatedBy"` + // Updated time UpdatedTime uint64 `json:"updatedTime"` diff --git a/pkg/cloudapi/compute/models.go b/pkg/cloudapi/compute/models.go index d1fb397..5442273 100644 --- a/pkg/cloudapi/compute/models.go +++ b/pkg/cloudapi/compute/models.go @@ -792,6 +792,9 @@ type ItemComputeDisk struct { // BLK Discard BLKDiscard bool `json:"blkdiscard"` + // Block Size + BlockSize string `json:"block_size"` + // Boot partition BootPartition uint64 `json:"bootPartition"` diff --git a/pkg/cloudapi/disks/filter_test.go b/pkg/cloudapi/disks/filter_test.go index 9e46355..947912b 100644 --- a/pkg/cloudapi/disks/filter_test.go +++ b/pkg/cloudapi/disks/filter_test.go @@ -360,7 +360,6 @@ func TestListSearchDisks_SortByCreatedTime(t *testing.T) { var unattachedDisks = ListDisksUnattached{ Data: []ItemDiskUnattached{ { - CKey: "", Meta: []interface{}{ "cloudbroker", "disk", @@ -412,7 +411,6 @@ var unattachedDisks = ListDisksUnattached{ VMID: 0, }, { - CKey: "", Meta: []interface{}{ "cloudbroker", "disk", diff --git a/pkg/cloudapi/disks/models.go b/pkg/cloudapi/disks/models.go index d75f1d9..cd8fe09 100644 --- a/pkg/cloudapi/disks/models.go +++ b/pkg/cloudapi/disks/models.go @@ -14,6 +14,9 @@ type ItemDisk struct { // BLK Discard BLKDiscard bool `json:"blkdiscard"` + // Block size of disk + BlockSize string `json:"block_size"` + // Computes Computes map[string]string `json:"computes"` @@ -163,6 +166,9 @@ type ItemDiskUnattached struct { // BLK Discard BLKDiscard bool `json:"blkdiscard"` + // Block size of disk + BlockSize string `json:"block_size"` + // Boot Partition BootPartition uint64 `json:"bootPartition"` @@ -387,6 +393,9 @@ type RecordDisk struct { // BLK Discard BLKDiscard bool `json:"blkdiscard"` + // Block size of disk + BlockSize string `json:"block_size"` + // Computes Computes map[string]string `json:"computes"` diff --git a/pkg/cloudapi/kvmx86/create.go b/pkg/cloudapi/kvmx86/create.go index 10b0dfd..043ac69 100644 --- a/pkg/cloudapi/kvmx86/create.go +++ b/pkg/cloudapi/kvmx86/create.go @@ -183,14 +183,6 @@ type CreateRequest struct { // Required: false Start bool `url:"start" json:"start"` - // System name - // Required: false - IS string `url:"IS,omitempty" json:"IS,omitempty"` - - // Compute purpose - // Required: false - IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"` - // Custom fields for compute. Must be a dict // Required: false CustomFields string `url:"customFields,omitempty" json:"customFields,omitempty"` diff --git a/pkg/cloudbroker/account/models.go b/pkg/cloudbroker/account/models.go index 024ed9a..850cc76 100644 --- a/pkg/cloudbroker/account/models.go +++ b/pkg/cloudbroker/account/models.go @@ -215,6 +215,9 @@ type InfoAccount struct { // UniqPools UniqPools []string `json:"uniqPools"` + // Updated By + UpdatedBy string `json:"updatedBy"` + // UpdatedTime UpdatedTime uint64 `json:"updatedTime"` diff --git a/pkg/cloudbroker/compute/check_compute_placement.go b/pkg/cloudbroker/compute/check_compute_placement.go new file mode 100644 index 0000000..1fa0689 --- /dev/null +++ b/pkg/cloudbroker/compute/check_compute_placement.go @@ -0,0 +1,47 @@ +package compute + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// CheckComputePlacementRequest struct for check compute placement +type CheckComputePlacementRequest struct { + // IDs of compute instances to check + // Required: true + ComputeIDs []uint64 `url:"compute_ids" json:"compute_ids" validate:"required"` + + // Filter by CPU and RAM when checking placement + // Required: false + // Default: true + FilterByCPURAM interface{} `url:"filter_by_cpu_ram,omitempty" json:"filter_by_cpu_ram,omitempty" validate:"omitempty,isBool"` +} + +// CheckComputePlacement checks compute placement and returns structured result +func (c Compute) CheckComputePlacement(ctx context.Context, req CheckComputePlacementRequest) (CheckComputePlacementResult, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/cloudbroker/compute/check_compute_placement" + + if req.FilterByCPURAM == nil { + req.FilterByCPURAM = true + } + + res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) + if err != nil { + return nil, err + } + + result := make(CheckComputePlacementResult) + if err := json.Unmarshal(res, &result); err != nil { + return nil, err + } + + return result, nil +} diff --git a/pkg/cloudbroker/compute/models.go b/pkg/cloudbroker/compute/models.go index f79c37b..030a824 100644 --- a/pkg/cloudbroker/compute/models.go +++ b/pkg/cloudbroker/compute/models.go @@ -394,6 +394,9 @@ type ItemDisk struct { // BLK Discard BLKDiscard bool `json:"blkdiscard"` + // Block Size + BlockSize string `json:"block_size"` + // Boot partition BootPartition uint64 `json:"bootPartition"` @@ -1493,3 +1496,20 @@ type CloneStatus struct { // Progress percent ProgressPercent int `json:"progress_percent"` } + +type CheckComputePlacementError struct { + // Code + Code int64 `json:"code"` + + // Message + Message string `json:"message"` +} + +type CheckComputePlacementItem struct { + // Nide IDs + NodeIDs []uint64 `json:"node_ids"` + // error + Error CheckComputePlacementError `json:"error,omitempty"` +} + +type CheckComputePlacementResult map[string]CheckComputePlacementItem diff --git a/pkg/cloudbroker/disks/models.go b/pkg/cloudbroker/disks/models.go index 2c34248..fbfe439 100644 --- a/pkg/cloudbroker/disks/models.go +++ b/pkg/cloudbroker/disks/models.go @@ -56,6 +56,9 @@ type InfoDisk struct { // BLK Discard BLKDiscard bool `json:"blkdiscard"` + // Block size of disk + BlockSize string `json:"block_size"` + // Boot partition BootPartition uint64 `json:"bootPartition"` @@ -218,6 +221,9 @@ type ItemReplication struct { // Detailed indormation about disk type RecordDisk struct { + // Block size of disk + BlockSize string `json:"block_size"` + //Created by CreatedBy string `json:"createdBy"` diff --git a/pkg/cloudbroker/disks/update.go b/pkg/cloudbroker/disks/update.go index 10a6a98..a329501 100644 --- a/pkg/cloudbroker/disks/update.go +++ b/pkg/cloudbroker/disks/update.go @@ -21,6 +21,10 @@ type UpdateRequest struct { // BLK Discard // Required: false BLKDiscard interface{} `url:"blkdiscard,omitempty" json:"blkdiscard,omitempty" validate:"omitempty,isBool"` + + // Block size of disk + // Required: false + BlockSize string `url:"block_size,omitempty" json:"block_size,omitempty"` } // Update updates disk diff --git a/pkg/cloudbroker/kvmx86/create.go b/pkg/cloudbroker/kvmx86/create.go index e82e6c7..a02f0ba 100644 --- a/pkg/cloudbroker/kvmx86/create.go +++ b/pkg/cloudbroker/kvmx86/create.go @@ -193,14 +193,6 @@ type CreateRequest struct { // Required: false NodeID uint64 `url:"node_id,omitempty" json:"node_id,omitempty"` - // System name - // Required: false - IS string `url:"IS,omitempty" json:"IS,omitempty"` - - // Compute purpose - // Required: false - IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"` - // Custom fields for Compute. Must be dict // Required: false CustomField string `url:"customFields,omitempty" json:"customFields,omitempty"` diff --git a/pkg/cloudbroker/node/list.go b/pkg/cloudbroker/node/list.go index 3cca38c..245d48d 100644 --- a/pkg/cloudbroker/node/list.go +++ b/pkg/cloudbroker/node/list.go @@ -49,6 +49,10 @@ type ListRequest struct { // Page size // Required: false Size uint64 `url:"size,omitempty" json:"size,omitempty"` + + // Find by zone ID + // Required: false + ZoneID uint64 `url:"zone_id,omitempty" json:"zone_id,omitempty"` } // List gets list of all nodes as a ListNodes struct diff --git a/pkg/sdn/extnet/list.go b/pkg/sdn/extnet/list.go index 591c37b..663c4cc 100644 --- a/pkg/sdn/extnet/list.go +++ b/pkg/sdn/extnet/list.go @@ -62,10 +62,18 @@ type ListRequest struct { // Required: false CreatedFrom string `url:"created_from,omitempty" json:"created_from,omitempty"` - // Filter lby create date to + // Filter by create date to // Required: false CreatedTo string `url:"created_to,omitempty" json:"created_to,omitempty"` + // Filter by operation status + // Required: false + OperationStatus string `url:"operation_status,omitempty" json:"operation_status,omitempty"` + + // Filter by hypervisor status + // Required: false + HypervisorStatus string `url:"hypervisor_status,omitempty" json:"hypervisor_status,omitempty"` + // Page number for pagination // Required: false Page uint64 `url:"page,omitempty" json:"page,omitempty"` diff --git a/pkg/sdn/netobjgroups/attach_l2_connection_ports.go b/pkg/sdn/netobjgroups/attach_l2_connection_ports.go new file mode 100644 index 0000000..111ef76 --- /dev/null +++ b/pkg/sdn/netobjgroups/attach_l2_connection_ports.go @@ -0,0 +1,62 @@ +package netobjgroups + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants" + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// AttachL2ConnectionPortsRequest struct to attach l2 ports to a network object group +type AttachL2ConnectionPortsRequest struct { + // ID of a network object group + // Required: true + ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"` + + // ID of an access group + // Required: true + AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"` + + // Version ID + // Required: true + VersionID uint64 `url:"version_id" json:"version_id" validate:"required"` + + // Port Bindings + // Required: true + PortBindings []L2PortBindings `url:"port_bindings" json:"port_bindings" validate:"required,dive"` +} +type L2PortBindings struct { + // ID of a logical port + // Required: true + PortID string `url:"port_id" json:"port_id" validate:"required"` + + // Version of a logical port + // Required: true + PortVersion int64 `url:"port_version" json:"port_version" validate:"required"` +} + +// AttachLogicalPorts attaches l2 ports to a network object group +func (nog NetworkObjectGroups) AttachL2ConnectionPorts(ctx context.Context, req AttachL2ConnectionPortsRequest) (*RecordVersion, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/sdn/network_object_group/attach_l2_connection_ports" + + res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req) + if err != nil { + return nil, err + } + + info := RecordVersion{} + + err = json.Unmarshal(res, &info) + if err != nil { + return nil, err + } + + return &info, nil +} diff --git a/pkg/sdn/netobjgroups/detach_l2_connection_ports.go b/pkg/sdn/netobjgroups/detach_l2_connection_ports.go new file mode 100644 index 0000000..866be47 --- /dev/null +++ b/pkg/sdn/netobjgroups/detach_l2_connection_ports.go @@ -0,0 +1,62 @@ +package netobjgroups + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants" + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// DetachL2ConnectionPortsRequest struct to detach an l2 port from a network object group +type DetachL2ConnectionPortsRequest struct { + // ID of a network object group + // Required: true + ObjectGroupID string `url:"object_group_id" json:"object_group_id" validate:"required"` + + // ID of an access group + // Required: true + AccessGroupID string `url:"access_group_id" json:"access_group_id" validate:"required"` + + // Version ID + // Required: true + VersionID uint64 `url:"version_id" json:"version_id" validate:"required"` + + // Port Bindings + // Required: true + PortBindings []DetachL2PortBindings `url:"port_bindings" json:"port_bindings" validate:"required,dive"` +} +type DetachL2PortBindings struct { + // ID of a logical port + // Required: true + PortID string `url:"port_id" json:"port_id" validate:"required"` + + // Version of a logical port + // Required: true + PortVersion int64 `url:"port_version" json:"port_version" validate:"required"` +} + +// DetachL2ConnectionPorts detaches logical ports from a network object group +func (nog NetworkObjectGroups) DetachL2ConnectionPorts(ctx context.Context, req DetachL2ConnectionPortsRequest) (*RecordVersion, error) { + err := validators.ValidateRequest(req) + if err != nil { + return nil, validators.ValidationErrors(validators.GetErrors(err)) + } + + url := "/sdn/network_object_group/detach_l2_connection_ports" + + res, err := nog.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req) + if err != nil { + return nil, err + } + + info := RecordVersion{} + + err = json.Unmarshal(res, &info) + if err != nil { + return nil, err + } + + return &info, nil +} diff --git a/tests/platform_upgrade/platform_tests_start.sh b/tests/platform_upgrade/platform_tests_start.sh new file mode 100644 index 0000000..c9801bf --- /dev/null +++ b/tests/platform_upgrade/platform_tests_start.sh @@ -0,0 +1,7 @@ +go test -v -run TestGetListCloudAPI > TestGetListCloudAPI.txt +go test -v -run TestGetListCloudbroker > TestGetListCloudbroker.txt +go test -v -run TestGetListSDNAPI > TestGetListSDNAPI.txt +go test -v -run TestRequestsCloudAPI > TestRequestsCloudAPI.txt +go test -v -run TestRequestsCloudbroker > TestRequestsCloudbroker.txt +go test -v -run TestRequestsSDN > TestRequestsSDN.txt +go test -v -run TestGetAllPaths > TestGetAllPaths.txt diff --git a/tests/platform_upgrade/request_map.go b/tests/platform_upgrade/request_map.go index 3d758c3..c8f4978 100644 --- a/tests/platform_upgrade/request_map.go +++ b/tests/platform_upgrade/request_map.go @@ -570,6 +570,7 @@ func getRequestsMapCloudbroker() map[string]interface{} { "/restmachine/cloudbroker/compute/cdInsert": compute_cb.CDInsertRequest{}, "/restmachine/cloudbroker/compute/changeLinkState": compute_cb.ChangeLinkStateRequest{}, "/restmachine/cloudbroker/compute/change_mtu": compute_cb.ChangeMTURequest{}, + "/restmachine/cloudbroker/compute/check_compute_placement": compute_cb.CheckComputePlacementRequest{}, "/restmachine/cloudbroker/compute/change_security_groups": compute_cb.ChangeSecGroupsRequest{}, "/restmachine/cloudbroker/compute/clone": compute_cb.CloneRequest{}, "/restmachine/cloudbroker/compute/clone_abort": compute_cb.CloneAbortRequest{}, @@ -1165,6 +1166,8 @@ func getRequestsMapSDN() map[string]interface{} { "/restmachine/sdn/network_object_group/get": netobjgroups.GetRequest{}, "/restmachine/sdn/network_object_group/list": netobjgroups.ListRequest{}, "/restmachine/sdn/network_object_group/update": netobjgroups.UpdateRequest{}, + "/restmachine/sdn/network_object_group/attach_l2_connection_ports": netobjgroups.AttachL2ConnectionPortsRequest{}, + "/restmachine/sdn/network_object_group/detach_l2_connection_ports": netobjgroups.DetachL2ConnectionPortsRequest{}, // segments "/restmachine/sdn/segment/create": segments.CreateRequest{},