main v1.12.5
asteam 3 weeks ago
parent befff7acd9
commit 84a090f9e8

@ -1,58 +1,34 @@
## Version 1.12.4 ## Version 1.12.5
Методы `Audits` в cloudapi/compute, cloudbroker/compute, cloudapi/account, cloudbroker/account, cloudapi/vins, cloudbroker/vins, cloudapi/rg и cloudbroker/rg стали deprecated и в следующих версиях будут удалены, вместо них необходимо использовать метод `List` в cloudapi/audit и cloudbroker/audit с соответствующими фильтрами Методы `Audits` в cloudapi/compute, cloudbroker/compute, cloudapi/account, cloudbroker/account, cloudapi/vins, cloudbroker/vins, cloudapi/rg и cloudbroker/rg стали deprecated и в следующих версиях будут удалены, вместо них необходимо использовать метод `List` в cloudapi/audit и cloudbroker/audit с соответствующими фильтрами
### Добавлено ### Добавлено
#### audit
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-621 | Метод `List` в структура запроса `ListRequest` в cloudapi/audit |
| BGOS-621 | Опциональные поля `RGID`, `ComputeID`, `AccountID`, `VINSID`, `ServiceID`, `K8SID`, `FLIPGroupID`, `LBID`, `SEPID`, `NodeID`, `ExcludeAuditLines` в структуру запроса `ListRequest` в cloudbroker/audit |
#### compute #### compute
| Идентификатор<br>задачи | Описание | | Идентификатор<br>задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-613 | Поля `UpdatedTime`, `DeletedBy`, `DeviceName`, `CreatedBy` в структуру ответа `ItemComputeDisk` в cloudapi/compute и в структуру ответа `ItemDisk` в cloudbroker/compute | | BGOS-625 | Обязательное поле `StoragePolicyID` и опциональные поля `PoolName` и `SEPID` в структуру запроса `CloneRequest` в cloudapi/compute и cloudbroker/compute |
| BGOS-613 | Поле `LoaderMetaIso` в структуру ответа `RecordCompute` и структура `LoaderMetaIso` в cloudapi/compute и в cloudbroker/compute | | BGOS-626 | Методы `CloneAbort` и `GetCloneStatus` и структуры запросов `CloneAbortRequest` и `GetCloneStatusRequest` в cloudbroker/compute |
| BGOS-616 | Опциональные поля `PCISlot` и `BusNumber` в структуры запросов `DiskAdd` и `DiskAttach` в cloudapi/compute и cloudbroker/compute | | BGOS-630 | Поле `BootImageID` в структуры ответа `ItemCompute` и `RecordCompute` в cloudapi/compute и в структуры ответа `RecordCompute` и `InfoCompute` в cloudbroker/compute |
| BGOS-619 | Методы `StartMigrationOut` и `StopMigrationOut` и структуры запросов `StartMigrationOutRequest` и `StopMigrationOutRequest` в cloudbroker/compute |
| BGOS-619 | Структура `OSUser` в структуру запроса `StopMigrationINRequest` в cloudbroker/compute |
#### image
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-614 | Поле `StoragePolicyID` в структуру ответа `ItemImage` в cloudapi/image |
| BGOS-617 | Опциональное поле `StoragePolicyID` в структуры запроса `ListRequest` в cloudapi/image и cloudbroker/image |
#### vins #### disks
| Идентификатор<br>задачи | Описание | | Идентификатор<br>задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-615 | Поле `ZoneID` в структуры ответа `RecordDHCP`, `RecordGW`, `RecordNAT`, `RecordVNFDev` в cloudapi/vins и `InfoVNF` и `VNFDev` в cloudbroker/vins | | BGOS-627 | Методы `Migrate`, `MigrateAbort` и `GetMigrateStatus`, структуры запросов `MigrateRequest`, `CloneMigrateRequest` и `GetMigrateStatusRequest` и структура ответа `MigrateStatus` в cloudbroker/disks |
| BGOS-615 | Поля `SecGroups`, `EnableSecGroups` в структуру ответа `ItemVNFInterface` в cloudapi/vins и `ItemInterface` в cloudbroker/vins |
### Исправлено ### Исправлено
#### compute #### compute
| Идентификатор<br>задачи | Описание | | Идентификатор<br>задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-619 | Ошибка работы фильтра `SortBy` в методе `MigrateStorageList` в cloudbroker/compute | | BGOS-623 | Тип поля `EnableSecGroups` с `bool` на `interface{}` в структуре запроса `ChangeSecGroupsRequest` в cloudapi/compute и в cloudbroker/compute |
| BGOS-625 | Возвращаемое значение в функции `Clone` с `uint64` на `string` в cloudapi/compute и cloudbroker/compute |
#### storage policy | BGOS-629 | Возвращаемое значение метода `CreateTemplate` изменено с `uint64` на `string` в cloudapi/compute и в cloudbroker/compute |
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-620 | Поле `AccountID` в структуре запроса `ListRequest` стало опциональным в cloudapi/stpolicy |
### Удалено ### Удалено
#### audit #### compute
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-621 | Поле `Tags` в структуре ответа `ItemAudit` в cloudbroker/audit |
#### disks
| Идентификатор<br>задачи | Описание | | Идентификатор<br>задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-618 | Поле `IOPS` из структуры запроса `CreateRequest` в cloudapi/disks и в cloudbroker/disks | | BGOS-629 | Методы `CreateTemplateAsync` в cloudapi/compute и в cloudbroker/compute |

@ -24,7 +24,7 @@ type ChangeSecGroupsRequest struct {
// Flag indicating whether security groups are enabled for this interface // Flag indicating whether security groups are enabled for this interface
// Required: false // Required: false
EnableSecGroups bool `url:"enable_secgroups,omitempty" json:"enable_secgroups,omitempty"` EnableSecGroups interface{} `url:"enable_secgroups,omitempty" json:"enable_secgroups,omitempty" validate:"omitempty,isBool"`
} }
// ChangeSecGroups changes security groups for compute // ChangeSecGroups changes security groups for compute

@ -3,8 +3,8 @@ package compute
import ( import (
"context" "context"
"net/http" "net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
@ -18,6 +18,10 @@ type CloneRequest struct {
// Required: true // Required: true
Name string `url:"name" json:"name" validate:"required"` Name string `url:"name" json:"name" validate:"required"`
// ID of the Storage Policy
// Required: true
StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"`
// Timestamp of the parent's snapshot to create clone from // Timestamp of the parent's snapshot to create clone from
// Required: false // Required: false
SnapshotTimestamp uint64 `url:"snapshotTimestamp,omitempty" json:"snapshotTimestamp,omitempty"` SnapshotTimestamp uint64 `url:"snapshotTimestamp,omitempty" json:"snapshotTimestamp,omitempty"`
@ -30,26 +34,29 @@ type CloneRequest struct {
// Default: false // Default: false
// Required: false // Required: false
Force bool `url:"force" json:"force"` Force bool `url:"force" json:"force"`
// The name of the pool to migrate disks to
// Required: false
PoolName string `url:"pool_name" json:"pool_name"`
// The ID of the SEP to migrate disks to
// Required: false
SEPID uint64 `url:"sep_id" json:"sep_id"`
} }
// Clone clones compute instance // Clone clones compute instance
func (c Compute) Clone(ctx context.Context, req CloneRequest) (uint64, error) { func (c Compute) Clone(ctx context.Context, req CloneRequest) (string, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err)) return "", validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudapi/compute/clone" url := "/cloudapi/compute/clone"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) res, err := c.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return 0, err
}
result, err := strconv.ParseUint(string(res), 10, 64)
if err != nil { if err != nil {
return 0, err return "", err
} }
return result, nil return string(res), nil
} }

@ -0,0 +1,39 @@
package compute
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// CloneAbortRequest struct to abort a compute clone
type CloneAbortRequest struct {
// ID of compute instance
// Required: true
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
}
// CloneAbort aborts a compute clone
func (c Compute) CloneAbort(ctx context.Context, req CloneAbortRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/compute/clone_abort"
res, err := c.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

@ -0,0 +1,40 @@
package compute
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetCloneStatusRequest struct to get information about compute clone status
type GetCloneStatusRequest struct {
// ID of compute instance
// Required: true
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
}
// GetCloneStatus gets information about compute clone status as a RecordCloneStatus struct
func (c Compute) GetCloneStatus(ctx context.Context, req GetCloneStatusRequest) ([]RecordCloneStatus, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/compute/clone_status"
res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
if err != nil {
return nil, err
}
cloneStatus := make([]RecordCloneStatus, 0)
err = json.Unmarshal(res, &cloneStatus)
if err != nil {
return nil, err
}
return cloneStatus, nil
}

@ -3,7 +3,6 @@ package compute
import ( import (
"context" "context"
"net/http" "net/http"
"strconv"
"strings" "strings"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
@ -27,47 +26,15 @@ type wrapperCreateTemplateRequest struct {
} }
// CreateTemplate create template from compute instance // CreateTemplate create template from compute instance
func (c Compute) CreateTemplate(ctx context.Context, req CreateTemplateRequest) (uint64, error) { func (c Compute) CreateTemplate(ctx context.Context, req CreateTemplateRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err))
}
reqWrapped := wrapperCreateTemplateRequest{
CreateTemplateRequest: req,
AsyncMode: false,
}
url := "/cloudapi/compute/createTemplate"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped)
if err != nil {
return 0, err
}
result, err := strconv.ParseUint(string(res), 10, 64)
if err != nil {
return 0, err
}
return result, nil
}
// CreateTemplateAsync create template from compute instance
func (c Compute) CreateTemplateAsync(ctx context.Context, req CreateTemplateRequest) (string, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err)) return "", validators.ValidationErrors(validators.GetErrors(err))
} }
reqWrapped := wrapperCreateTemplateRequest{
CreateTemplateRequest: req,
AsyncMode: true,
}
url := "/cloudapi/compute/createTemplate" url := "/cloudapi/compute/createTemplate"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil { if err != nil {
return "", err return "", err
} }

@ -311,6 +311,9 @@ type RecordCompute struct {
// Architecture // Architecture
Architecture string `json:"arch"` Architecture string `json:"arch"`
// Boot image ID
BootImageID uint64 `json:"boot_image_id"`
// Boot order // Boot order
BootOrder []string `json:"bootOrder"` BootOrder []string `json:"bootOrder"`
@ -1013,6 +1016,9 @@ type ItemCompute struct {
// Architecture // Architecture
Architecture string `json:"arch"` Architecture string `json:"arch"`
// Boot image ID
BootImageID uint64 `json:"boot_image_id"`
// Boot order // Boot order
BootOrder []string `json:"bootOrder"` BootOrder []string `json:"bootOrder"`
@ -1322,3 +1328,31 @@ type ListPCIDevices struct {
// Entry count // Entry count
EntryCount uint64 `json:"entryCount"` EntryCount uint64 `json:"entryCount"`
} }
type RecordCloneStatus struct {
// Disk ID
DiskID int `json:"disk_id"`
// Clone Status
Status CloneStatus `json:"status"`
}
type CloneStatus struct {
// Type
Type int `json:"type"`
// Copy speed
Bandwidth int `json:"bandwidth"`
// Current progress
Cur int `json:"cur"`
// Total size
End int `json:"end"`
// Operation status
Ready bool `json:"ready"`
// Progress percent
ProgressPercent int `json:"progress_percent"`
}

@ -24,7 +24,7 @@ type ChangeSecGroupsRequest struct {
// Flag indicating whether security groups are enabled for this interface // Flag indicating whether security groups are enabled for this interface
// Required: false // Required: false
EnableSecGroups bool `url:"enable_secgroups,omitempty" json:"enable_secgroups,omitempty"` EnableSecGroups interface{} `url:"enable_secgroups,omitempty" json:"enable_secgroups,omitempty" validate:"omitempty,isBool"`
} }
// ChangeSecGroups changes security groups for compute // ChangeSecGroups changes security groups for compute

@ -3,8 +3,8 @@ package compute
import ( import (
"context" "context"
"net/http" "net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
@ -18,6 +18,10 @@ type CloneRequest struct {
// Required: true // Required: true
Name string `url:"name" json:"name" validate:"required"` Name string `url:"name" json:"name" validate:"required"`
// ID of the Storage Policy
// Required: true
StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"`
// Timestamp of the parent's snapshot to create clone from // Timestamp of the parent's snapshot to create clone from
// Required: false // Required: false
SnapshotTimestamp uint64 `url:"snapshotTimestamp" json:"snapshotTimestamp"` SnapshotTimestamp uint64 `url:"snapshotTimestamp" json:"snapshotTimestamp"`
@ -30,26 +34,29 @@ type CloneRequest struct {
// Default: false // Default: false
// Required: false // Required: false
Force bool `url:"force" json:"force"` Force bool `url:"force" json:"force"`
// The name of the pool to migrate disks to
// Required: false
PoolName string `url:"pool_name" json:"pool_name"`
// The ID of the SEP to migrate disks to
// Required: false
SEPID uint64 `url:"sep_id" json:"sep_id"`
} }
// Clone clones compute instance // Clone clones compute instance
func (c Compute) Clone(ctx context.Context, req CloneRequest) (uint64, error) { func (c Compute) Clone(ctx context.Context, req CloneRequest) (string, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err)) return "", validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudbroker/compute/clone" url := "/cloudbroker/compute/clone"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) res, err := c.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return 0, err
}
result, err := strconv.ParseUint(string(res), 10, 64)
if err != nil { if err != nil {
return 0, err return "", err
} }
return result, nil return string(res), nil
} }

@ -0,0 +1,39 @@
package compute
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// CloneAbortRequest struct to abort a compute clone
type CloneAbortRequest struct {
// ID of compute instance
// Required: true
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
}
// CloneAbort aborts a compute clone
func (c Compute) CloneAbort(ctx context.Context, req CloneAbortRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/compute/clone_abort"
res, err := c.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

@ -0,0 +1,40 @@
package compute
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetCloneStatusRequest struct to get information about compute clone status
type GetCloneStatusRequest struct {
// ID of compute instance
// Required: true
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
}
// GetCloneStatus gets information about compute clone status as a RecordCloneStatus struct
func (c Compute) GetCloneStatus(ctx context.Context, req GetCloneStatusRequest) ([]RecordCloneStatus, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/compute/clone_status"
res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
if err != nil {
return nil, err
}
cloneStatus := make([]RecordCloneStatus, 0)
err = json.Unmarshal(res, &cloneStatus)
if err != nil {
return nil, err
}
return cloneStatus, nil
}

@ -3,7 +3,6 @@ package compute
import ( import (
"context" "context"
"net/http" "net/http"
"strconv"
"strings" "strings"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
@ -20,27 +19,16 @@ type CreateTemplateRequest struct {
Name string `url:"name" json:"name" validate:"required"` Name string `url:"name" json:"name" validate:"required"`
} }
type wrapperCreateTemplateRequest struct { // CreateTemplate create template from compute instance
CreateTemplateRequest func (c Compute) CreateTemplate(ctx context.Context, req CreateTemplateRequest) (string, error) {
AsyncMode bool `url:"asyncMode"`
}
// CreateTemplateAsync create template from compute instance
func (c Compute) CreateTemplateAsync(ctx context.Context, req CreateTemplateRequest) (string, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err)) return "", validators.ValidationErrors(validators.GetErrors(err))
} }
reqWrapped := wrapperCreateTemplateRequest{
CreateTemplateRequest: req,
AsyncMode: true,
}
url := "/cloudbroker/compute/createTemplate" url := "/cloudbroker/compute/createTemplate"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil { if err != nil {
return "", err return "", err
} }
@ -49,30 +37,3 @@ func (c Compute) CreateTemplateAsync(ctx context.Context, req CreateTemplateRequ
return result, nil return result, nil
} }
// CreateTemplate create template from compute instance
func (c Compute) CreateTemplate(ctx context.Context, req CreateTemplateRequest) (uint64, error) {
err := validators.ValidateRequest(req)
if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err))
}
reqWrapped := wrapperCreateTemplateRequest{
CreateTemplateRequest: req,
AsyncMode: false,
}
url := "/cloudbroker/compute/createTemplate"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped)
if err != nil {
return 0, err
}
result, err := strconv.ParseUint(string(res), 10, 64)
if err != nil {
return 0, err
}
return result, nil
}

@ -663,6 +663,9 @@ type InfoCompute struct {
// Architecture // Architecture
Arch string `json:"arch"` Arch string `json:"arch"`
// Boot image ID
BootImageID uint64 `json:"boot_image_id"`
// Boot order // Boot order
BootOrder []string `json:"bootOrder"` BootOrder []string `json:"bootOrder"`
@ -917,6 +920,9 @@ type RecordCompute struct {
// Architecture // Architecture
Arch string `json:"arch"` Arch string `json:"arch"`
// Boot image ID
BootImageID uint64 `json:"boot_image_id"`
// Boot order // Boot order
BootOrder []string `json:"bootOrder"` BootOrder []string `json:"bootOrder"`
@ -1420,3 +1426,31 @@ type MigrateStorageItem struct {
// Target stack ID // Target stack ID
TargetStackID uint64 `json:"targetStackId"` TargetStackID uint64 `json:"targetStackId"`
} }
type RecordCloneStatus struct {
// Disk ID
DiskID int `json:"disk_id"`
// Clone Status
Status CloneStatus `json:"status"`
}
type CloneStatus struct {
// Type
Type int `json:"type"`
// Copy speed
Bandwidth int `json:"bandwidth"`
// Current progress
Cur int `json:"cur"`
// Total size
End int `json:"end"`
// Operation status
Ready bool `json:"ready"`
// Progress percent
ProgressPercent int `json:"progress_percent"`
}

@ -0,0 +1,46 @@
package disks
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Migrate struct to move disk to another sep, pool and storage policy
type MigrateRequest struct {
// ID of the disk
// Required: true
DiskID uint64 `url:"disk_id" json:"disk_id" validate:"required"`
// ID of the new SEP
// Required: true
SEPID uint64 `url:"sep_id" json:"sep_id" validate:"required"`
// New pool name
// Required: true
PoolName string `url:"pool_name" json:"pool_name" validate:"required"`
// ID if the storage policy
// Required: false
StoragePolicyID uint64 `url:"storage_policy_id,omitempty" json:"storage_policy_id,omitempty"`
}
// Move moves disk to another sep, pool and storage policy
func (c Disks) Migrate(ctx context.Context, req MigrateRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/disks/migrate"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return "", err
}
result := string(res)
return result, nil
}

@ -0,0 +1,38 @@
package disks
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// MigrateAbortRequest struct to abort migration
type MigrateAbortRequest struct {
// ID of the disk
// Required: true
DiskID uint64 `url:"disk_id" json:"disk_id" validate:"required"`
}
// MigrateAbort aborts disk migration
func (c Disks) MigrateAbort(ctx context.Context, req MigrateAbortRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/disks/migrate_abort"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

@ -0,0 +1,40 @@
package disks
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetMigrateStatusRequest struct to get information about disk migrate status
type GetMigrateStatusRequest struct {
// ID of disk
// Required: true
DiskID uint64 `url:"disk_id" json:"disk_id" validate:"required"`
}
// GetMigrateStatus gets information about disk migrate status
func (c Disks) GetMigrateStatus(ctx context.Context, req GetMigrateStatusRequest) (*MigrateStatus, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/disks/migrate_status"
res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
if err != nil {
return nil, err
}
status := MigrateStatus{}
err = json.Unmarshal(res, &status)
if err != nil {
return nil, err
}
return &status, nil
}

@ -320,3 +320,20 @@ type ListTypes struct {
// Entry count // Entry count
EntryCount uint64 `json:"entryCount"` EntryCount uint64 `json:"entryCount"`
} }
type MigrateStatus struct {
// Type
Type int `json:"type"`
// Copy speed
Bandwidth int `json:"bandwidth"`
// Current progress
Cur interface{} `json:"cur"`
// Total size
End interface{} `json:"end"`
// Progress percent
ProgressPercent int `json:"progress_percent"`
}

@ -11,7 +11,7 @@ import (
// CreateRequest struct to create image // CreateRequest struct to create image
type CreateRequest struct { type CreateRequest struct {
// Name of the rescue disk // Name of the image
// Required: true // Required: true
Name string `url:"name" json:"name" validate:"required"` Name string `url:"name" json:"name" validate:"required"`

@ -149,6 +149,8 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/compute/changeLinkState": compute.ChangeLinkStateRequest{}, "/restmachine/cloudapi/compute/changeLinkState": compute.ChangeLinkStateRequest{},
"/restmachine/cloudapi/compute/change_security_groups": compute.ChangeSecGroupsRequest{}, "/restmachine/cloudapi/compute/change_security_groups": compute.ChangeSecGroupsRequest{},
"/restmachine/cloudapi/compute/clone": compute.CloneRequest{}, "/restmachine/cloudapi/compute/clone": compute.CloneRequest{},
"/restmachine/cloudapi/compute/clone_abort": compute.CloneAbortRequest{},
"/restmachine/cloudapi/compute/clone_status": compute.GetCloneStatusRequest{},
"/restmachine/cloudapi/compute/createTemplate": compute.CreateTemplateRequest{}, "/restmachine/cloudapi/compute/createTemplate": compute.CreateTemplateRequest{},
"/restmachine/cloudapi/compute/createTemplateFromBlank": compute.CreateTemplateFromBlankRequest{}, "/restmachine/cloudapi/compute/createTemplateFromBlank": compute.CreateTemplateFromBlankRequest{},
"/restmachine/cloudapi/compute/delete": compute.DeleteRequest{}, "/restmachine/cloudapi/compute/delete": compute.DeleteRequest{},
@ -529,8 +531,8 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/backup/restoreDisksFromBackup": backup_cb.RestoreDisksFromBackupRequest{}, "/restmachine/cloudbroker/backup/restoreDisksFromBackup": backup_cb.RestoreDisksFromBackupRequest{},
// compute_cb // compute_cb
"/restmachine/cloudapi/compute/abort_shared_snapshot_merge": compute.AbortSharedSnapshotMergeRequest{}, "/restmachine/cloudbroker/compute/abort_shared_snapshot_merge": compute_cb.AbortSharedSnapshotMergeRequest{},
"/restmachine/cloudapi/compute/shared_snapshot_merge_status": compute.SharedSnapshotMergeStatusRequest{}, "/restmachine/cloudbroker/compute/shared_snapshot_merge_status": compute_cb.SharedSnapshotMergeStatusRequest{},
"/restmachine/cloudbroker/compute/affinityGroupCheckStart": compute_cb.AffinityGroupCheckStartRequest{}, "/restmachine/cloudbroker/compute/affinityGroupCheckStart": compute_cb.AffinityGroupCheckStartRequest{},
"/restmachine/cloudbroker/compute/affinityLabelRemove": compute_cb.AffinityLabelRemoveRequest{}, "/restmachine/cloudbroker/compute/affinityLabelRemove": compute_cb.AffinityLabelRemoveRequest{},
"/restmachine/cloudbroker/compute/affinityLabelSet": compute_cb.AffinityLabelSetRequest{}, "/restmachine/cloudbroker/compute/affinityLabelSet": compute_cb.AffinityLabelSetRequest{},
@ -553,6 +555,8 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/compute/change_mtu": compute_cb.ChangeMTURequest{}, "/restmachine/cloudbroker/compute/change_mtu": compute_cb.ChangeMTURequest{},
"/restmachine/cloudbroker/compute/change_security_groups": compute_cb.ChangeSecGroupsRequest{}, "/restmachine/cloudbroker/compute/change_security_groups": compute_cb.ChangeSecGroupsRequest{},
"/restmachine/cloudbroker/compute/clone": compute_cb.CloneRequest{}, "/restmachine/cloudbroker/compute/clone": compute_cb.CloneRequest{},
"/restmachine/cloudbroker/compute/clone_abort": compute_cb.CloneAbortRequest{},
"/restmachine/cloudbroker/compute/clone_status": compute_cb.GetCloneStatusRequest{},
"/restmachine/cloudbroker/compute/computeciSet": compute_cb.ComputeCISetRequest{}, "/restmachine/cloudbroker/compute/computeciSet": compute_cb.ComputeCISetRequest{},
"/restmachine/cloudbroker/compute/computeciUnset": compute_cb.ComputeCIUnsetRequest{}, "/restmachine/cloudbroker/compute/computeciUnset": compute_cb.ComputeCIUnsetRequest{},
"/restmachine/cloudbroker/compute/createTemplate": compute_cb.CreateTemplateRequest{}, "/restmachine/cloudbroker/compute/createTemplate": compute_cb.CreateTemplateRequest{},
@ -664,6 +668,9 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/disks/snapshotDelete": disks_cb.SnapshotDeleteRequest{}, "/restmachine/cloudbroker/disks/snapshotDelete": disks_cb.SnapshotDeleteRequest{},
"/restmachine/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{}, "/restmachine/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{},
"/restmachine/cloudbroker/disks/unshare": disks_cb.UnshareRequest{}, "/restmachine/cloudbroker/disks/unshare": disks_cb.UnshareRequest{},
"/restmachine/cloudbroker/disks/migrate": disks_cb.MigrateRequest{},
"/restmachine/cloudbroker/disks/migrate_abort": disks_cb.MigrateAbortRequest{},
"/restmachine/cloudbroker/disks/migrate_status": disks_cb.GetMigrateStatusRequest{},
// dpdknet // dpdknet
"/restmachine/cloudbroker/dpdknet/get": dpdknet_cb.GetRequest{}, "/restmachine/cloudbroker/dpdknet/get": dpdknet_cb.GetRequest{},

Loading…
Cancel
Save