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{},