v1.16.4
This commit is contained in:
dayterr
2026-09-18 16:49:20 +03:00
parent b39021820a
commit bf932e5ef9
161 changed files with 2375 additions and 227 deletions

View File

@@ -1,4 +1,4 @@
## Version 1.16.3 ## Version 1.16.4
### Deprecated ### Deprecated
@@ -18,31 +18,98 @@
| `rg/AccessRevoke` | :heavy_check_mark: | :heavy_check_mark: | | `rg/AccessRevoke` | :heavy_check_mark: | :heavy_check_mark: |
| `sep/ConfigFieldEdit` | :x: | :heavy_check_mark: | | `sep/ConfigFieldEdit` | :x: | :heavy_check_mark: |
### Добавлено ### Добавлено
#### extnet #### apiaccess
| Идентификатор задачи | Описание | | Идентификатор задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-1034 | Методы `AsyncCreate`, `AsyncDeviceDeploy` и `AsyncSetHAMode` в cloudbroker/extnet | | BGOS-1055 | Структура `SDNEndpoints` и опциональное поле `SDN` в структуру `APIsEndpoints` в cloudbroker/apiaccess |
| BGOS-1055 | Опциональные поля `Audit`, `DPDKNet`, `SecurityGroup`, `SEP`, `StoragePolicy`, `Trunk`, `VFPool`, `VMFolder`, `Zone` в структуру `CloudAPIEndpoints` в cloudbroker/apiaccess |
| BGOS-1055 | Опциональные поля `Backup`, `DPDKNet`, `SecurityGroup`, `StoragePolicy`, `Trunk`, `VFPool`, `VMFolder`, `Zone` в структуру `CloudBrokerEndpoints` в cloudbroker/apiaccess |
| BGOS-1055 | Опциональные поля `Cache`, `InfoWellknown` в структуру `SystemEndpoints` в cloudbroker/apiaccess |
#### compute
#### locations
| Идентификатор задачи | Описание | | Идентификатор задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-1032 | Вычисляемое поле `VMFoldersEnabled` в структуру ответа `ItemLocation` в cloudapi/locations | | BGOS-1043 | Опциональное поле `AsyncMode` в структуру запроса `SnapshotEvictDiskRequest` в cloudbroker/compute |
| BGOS-1044 | Методы `AsyncAffinityRuleAdd` и `AsyncAntiAffinityRuleAdd` в cloudapi/compute и cloudbroker/compute |
| BGOS-1054 | Опциональные поля `FolderID` и `IncludeDescendants` в структуру запроса `ListRequest` в cloudapi/compute |
| BGOS-1054 | Опциональные поля `FolderID` и `IncludeDescendants` в структуру запроса `ListRequest` в cloudbroker/compute |
| BGOS-1046 | Опциональное поле `Migrate` в структуры запросов `AffinityRuleAddRequest` и `AntiAffinityRuleAddRequest` в cloudapi/compute |
| BGOS-1046 | Опциональное поле `Migrate` в структуры запросов `AffinityRuleAddRequest` и `AntiAffinityRuleAddRequest` в cloudbroker/compute |
#### vins #### session
| Идентификатор задачи | Описание | | Идентификатор задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-1033 | Методы `AsyncCreateInAccount`, `AsyncCreateInRG`, `AsyncEnable`, `AsyncVNFDevRedeploy` и `AsyncVNFDevRestart` в cloudapi/vins | | BGOS-1048 | Опциональное поле `IncludeArchive` в структуру запроса `ListRequest` в cloudbroker/session |
| BGOS-1033 | Методы `AsyncCreateInAccount`, `AsyncCreateInRG`, `AsyncEnable`, `AsyncVNFDevRedeploy`, `AsyncVNFDevRestart` и `AsyncVNFDevStart` в cloudbroker/vins |
| BGOS-1033 | Структура запроса `DisableRequest` и метод `Disable` в cloudapi/vins |
| BGOS-1033 | Структура запроса `EnableRequest` и метод `Enable` в cloudapi/vins |
### Исправлено #### stpolicy
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1047 | Вычисляемое поле `ReplicationProfileID` в структуры ответа `InfoStoragePolicy` и `ItemStoragePolicy` в cloudapi/stpolicy и в cloudbroker/stpolicy |
| BGOS-1047 | Вычисляемое поле `ReplicationProfileID` в структуру ответа `InfoStoragePolicyWithID` в cloudbroker/stpolicy |
| BGOS-1047 | Методы `GetReplicationProfile`, `ListReplicationProfile`, структуры запроса `GetReplicationProfileRequest`, `ListReplicationProfileRequest` и структуры ответа `InfoReplicationProfile`, `ListReplicationProfiles`, `ItemReplicationProfile`, `ListSchedules`, `Schedule`, `Calendar` в cloudapi/stpolicy и в cloudbroker/stpolicy |
| BGOS-1047 | Метод `CreateReplicationProfile`, структуры запроса `CreateReplicationProfileRequest`, `SchedulesRequest`, `CalendarRequest` в cloudbroker/stpolicy |
| BGOS-1047 | Метод `UpdateReplicationProfile`, структуры запроса `UpdateReplicationProfileRequest`, `ConfigRequest` в cloudbroker/stpolicy |
| BGOS-1047 | Метод `DeleteReplicationProfile` и структура запроса `DeleteReplicationProfileRequest` в cloudbroker/stpolicy |
| BGOS-1047 | Методы `AddAccessReplicationProfile`, `RevokeAccessReplicationProfile` и структуры запроса `AddAccessReplicationProfileRequest`, `RevokeAccessReplicationProfileRequest` в cloudbroker/stpolicy |
#### vmfolder
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1049 | Группа апи методов vmfolder в cloudapi и cloudbroker |
### Изменено
#### backup
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1045 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структурах запроса `CreateDiskBackupRequest`, `CreateDisksBackupRequest`, `DeleteDiskBackupRequest`, `RestoreDiskFromBackupRequest` и `RestoreDisksFromBackupRequest` в cloudbroker/backup |
#### compute
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1043 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структурах запроса `AbortSharedSnapshotMergeRequest`, `CDEjectRequest`, `CDInsertRequest`, `ChangeIPRequest`, `ChangeLinkStateRequest`, `ChangeMTURequest`, `ChangeQoSPoliciesRequest`, `ChangeSecGroupsRequest`, `CloneRequest`, `CreateTemplateRequest`, `CreateTemplateFromBlankRequest`, `DeleteRequest`, `DisableRequest`, `DiskAddRequest`, `DiskAttachRequest`, `DiskDelRequest`, `DiskDetachRequest`, `DiskQOSRequest`, `DiskResizeRequest`, `DiskSwitchToReplicationRequest`, `GuestAgentDisableRequest`, `GuestAgentEnableRequest`, `GuestAgentExecuteRequest`, `GuestAgentFeatureUpdateRequest`, `MigrateToZoneRequest`, `MoveToRGRequest`, `NetAttachRequest`, `NetDetachRequest`, `PauseRequest`, `PFWAddRequest`, `PFWDelRequest`, `PinToNodeRequest`, `PowerCycleRequest`, `RebootRequest`, `RedeployRequest`, `ResetRequest`, `ResizeRequest`, `RestoreRequest`, `ResumeRequest`, `SnapshotCreateRequest`, `SnapshotDeleteRequest`, `SnapshotRollbackRequest`, `StartRequest` и `StopRequest` в cloudapi/compute |
| BGOS-1043 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структурах запроса `AbortSharedSnapshotMergeRequest`, `CDEjectRequest`, `CDInsertRequest`, `ChangeIPRequest`, `ChangeLinkStateRequest`, `ChangeMTURequest`, `ChangeQoSPoliciesRequest`, `ChangeSecGroupsRequest`, `CloneRequest`, `CreateTemplateRequest`, `CreateTemplateFromBlankRequest`, `DeleteRequest`, `DisableRequest`, `DiskAddRequest`, `DiskAttachRequest`, `DiskDelRequest`, `DiskDetachRequest`, `DiskQOSRequest`, `DiskResizeRequest`, `DiskSwitchToReplicationRequest`, `GuestAgentDisableRequest`, `GuestAgentEnableRequest`, `GuestAgentExecuteRequest`, `GuestAgentFeatureUpdateRequest`, `MassDeleteRequest`, `MassRebootRequest`, `MassStartRequest`, `MassStopRequest`, `MigrateAbortRequest`, `MigrateStorageAbortRequest`, `MigrateStorageCleanUpRequest`, `MigrateToZoneRequest`, `MoveToRGRequest`, `NetAttachRequest`, `NetDetachRequest`, `NetQOSRequest`, `PauseRequest`, `PFWAddRequest`, `PFWDelRequest`, `PinToNodeRequest`, `PowerCycleRequest`, `RaiseDownRequest`, `RebootRequest`, `RedeployRequest`, `ResetRequest`, `ResizeRequest`, `RestoreRequest`, `ResumeRequest`, `SnapshotCreateRequest`, `SnapshotDeleteRequest`, `SnapshotRollbackRequest`, `StartRequest` и `StopRequest` в cloudbroker/compute |
| BGOS-1043 | Опциональное поле `SyncMode` на `AsyncMode` в структуре запроса `MigrateRequest` в cloudbroker/compute |
| BGOS-1043 | Опциональное поле `Sync` на `Async` в структуре запроса `MigrateStorageRequest` в cloudbroker/compute |
#### disks
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1045 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структуре запроса `FromPlatformDiskRequest` в cloudapi/disks и в cloudbroker/disks |
#### image
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1045 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структуре запроса `CreateRequest` в cloudapi/image и в cloudbroker/image |
| BGOS-1045 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структуре запроса `CreateCDROMImageRequest` в cloudbroker/image |
#### kvmx86 #### kvmx86
| Идентификатор задачи | Описание | | Идентификатор задачи | Описание |
| --- | --- | | --- | --- |
| BGOS-1040 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структуре запроса `CreateRequest` в cloudapi/kvmx86 и cloudbroker/kvmx86 | | BGOS-1045 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структуре запроса `MassCreateRequest` в cloudbroker/kvmx86 |
#### node
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1045 | JSON-тэг опционального поля `AsyncMode` с `asyncMode` на `async_mode` в структуре запроса `EnableRequest` в cloudbroker/node |
### Исправлено
#### apiaccess
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1055 | Ошибка при вызове метода `Update` в cloudbroker/apiaccess |
| BGOS-1055 | Исправлен тип ответа метода `DescUpdate` в cloudbroker/apiaccess |
#### Удалено
#### apiaccess
| Идентификатор задачи | Описание |
| --- | --- |
| BGOS-1055 | Структура `LibCloudEndpoints` и опциональное поле `LibCloud` из структуры `APIsEndpoints` в cloudbroker/apiaccess |
| BGOS-1055 | Опциональные поля `CloudSpace`, `ComputeCI`, `DPDK`, `Machine`, `Openshift`, `OpenshiftCI`, `PortForwarding`, `Sizes` из структуры `CloudAPIEndpoints` в cloudbroker/apiaccess |
| BGOS-1055 | Опциональные поля `CloudSpace`, `ComputeCI`, `Desnode`, `Diagnostics`, `DPDK`, `IaaS`, `Machine`, `Openshift`, `OpenshiftCI`, `Ovsnode`, `QOS` из структуры `CloudBrokerEndpoints` в cloudbroker/apiaccess |
| BGOS-1055 | Опциональные поля `AgentController`, `Alerts`, `ErrorConditionHandler`, `Job`, `Log`, `Logo` из структуры `SystemEndpoints` в cloudbroker/apiaccess |

View File

@@ -135,6 +135,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `Trunk` - получение информации о транковых портах; - `Trunk` - получение информации о транковых портах;
- `VFPool` - управление пулом виртуальных сетевых функций; - `VFPool` - управление пулом виртуальных сетевых функций;
- `VINS` - управление виртуальными изолированными сетями; - `VINS` - управление виртуальными изолированными сетями;
- `VMFolder` – управление директориями ВМ;
- `VGPU` - управление виртуальными графическими процессорами; - `VGPU` - управление виртуальными графическими процессорами;
- `Zone` - управление зонами. - `Zone` - управление зонами.
@@ -175,7 +176,8 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `User` - управление пользователями (индивидуально); - `User` - управление пользователями (индивидуально);
- `VGPU` - управление виртуальными графическими процессорами; - `VGPU` - управление виртуальными графическими процессорами;
- `VFPool` - управление пулом виртуальных сетевых функций; - `VFPool` - управление пулом виртуальных сетевых функций;
- `VINS` - управление виртуальными изолированными сетями. - `VINS` - управление виртуальными изолированными сетями;
- `VMFolder` – управление директориями ВМ;
- `Zone` - управление зонами. - `Zone` - управление зонами.
### SDN ### SDN
@@ -352,6 +354,7 @@ func main() {
- `pkg/cloudapi/vfpool` - для `VFPool` - `pkg/cloudapi/vfpool` - для `VFPool`
- `pkg/cloudapi/vins` - для `VINS` - `pkg/cloudapi/vins` - для `VINS`
- `pkg/cloudapi/vgpu` - для `VGPU` - `pkg/cloudapi/vgpu` - для `VGPU`
- `pkg/cloudapi/vmfolder` - для `VMFolder`
- `pkg/cloudapi/zone` - для `Zone` - `pkg/cloudapi/zone` - для `Zone`
- **cloudbroker**: - **cloudbroker**:
- `pkg/cloudbroker/account` - для `Account` - `pkg/cloudbroker/account` - для `Account`
@@ -387,6 +390,7 @@ func main() {
- `pkg/cloudbroker/vgpu` - для `VGPU` - `pkg/cloudbroker/vgpu` - для `VGPU`
- `pkg/cloudbroker/vfpool` - для `VFPool` - `pkg/cloudbroker/vfpool` - для `VFPool`
- `pkg/cloudbroker/vins` - для `VINS` - `pkg/cloudbroker/vins` - для `VINS`
- `pkg/cloudbroker/vmfolder` - для `VMFolder`
- `pkg/cloudbroker/zone` - для `Zone` - `pkg/cloudbroker/zone` - для `Zone`
- **sdn**: - **sdn**:
- `pkg/sdn/acsgroups` - для `Access groups` - `pkg/sdn/acsgroups` - для `Access groups`

View File

@@ -20,7 +20,7 @@ type AbortSharedSnapshotMergeRequest struct {
type wrapperAbortSharedSnapshotMergeRequest struct { type wrapperAbortSharedSnapshotMergeRequest struct {
AbortSharedSnapshotMergeRequest AbortSharedSnapshotMergeRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode" json:"async_mode"`
} }
// AbortSharedSnapshotMerge shared snapshots merge abort // AbortSharedSnapshotMerge shared snapshots merge abort

View File

@@ -2,6 +2,7 @@ package compute
import ( import (
"context" "context"
"encoding/json"
"net/http" "net/http"
"strconv" "strconv"
@@ -40,6 +41,17 @@ type AffinityRuleAddRequest struct {
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: true // Required: true
Value string `url:"value" json:"value" validate:"required"` Value string `url:"value" json:"value" validate:"required"`
// Migrate compute according to the rule
// Default: false
// Required: false
Migrate bool `url:"migrate" json:"migrate"`
}
type wrapperAffinityRuleAddRequest struct {
AffinityRuleAddRequest
AsyncMode bool `url:"async_mode"`
} }
// AffinityRuleAdd add affinity rule // AffinityRuleAdd add affinity rule
@@ -51,7 +63,12 @@ func (c Compute) AffinityRuleAdd(ctx context.Context, req AffinityRuleAddRequest
url := "/cloudapi/compute/affinityRuleAdd" url := "/cloudapi/compute/affinityRuleAdd"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) aReq := wrapperAffinityRuleAddRequest{
AffinityRuleAddRequest: req,
AsyncMode: false,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil { if err != nil {
return false, err return false, err
} }
@@ -63,3 +80,32 @@ func (c Compute) AffinityRuleAdd(ctx context.Context, req AffinityRuleAddRequest
return result, nil return result, nil
} }
// AsyncAffinityRuleAdd add affinity rule in async mode
func (c Compute) AsyncAffinityRuleAdd(ctx context.Context, req AffinityRuleAddRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/compute/affinityRuleAdd"
aReq := wrapperAffinityRuleAddRequest{
AffinityRuleAddRequest: req,
AsyncMode: true,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil {
return "", err
}
var resp string
err = json.Unmarshal(res, &resp)
if err != nil {
return "", err
}
return resp, nil
}

View File

@@ -2,6 +2,7 @@ package compute
import ( import (
"context" "context"
"encoding/json"
"net/http" "net/http"
"strconv" "strconv"
@@ -40,6 +41,17 @@ type AntiAffinityRuleAddRequest struct {
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: true // Required: true
Value string `url:"value" json:"value" validate:"required"` Value string `url:"value" json:"value" validate:"required"`
// Migrate compute according to the rule
// Default: false
// Required: false
Migrate bool `url:"migrate" json:"migrate"`
}
type wrapperAntiAffinityRuleAddRequest struct {
AntiAffinityRuleAddRequest
AsyncMode bool `url:"async_mode"`
} }
// AntiAffinityRuleAdd add anti affinity rule // AntiAffinityRuleAdd add anti affinity rule
@@ -51,7 +63,12 @@ func (c Compute) AntiAffinityRuleAdd(ctx context.Context, req AntiAffinityRuleAd
url := "/cloudapi/compute/antiAffinityRuleAdd" url := "/cloudapi/compute/antiAffinityRuleAdd"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) aReq := wrapperAntiAffinityRuleAddRequest{
AntiAffinityRuleAddRequest: req,
AsyncMode: false,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil { if err != nil {
return false, err return false, err
} }
@@ -63,3 +80,32 @@ func (c Compute) AntiAffinityRuleAdd(ctx context.Context, req AntiAffinityRuleAd
return result, nil return result, nil
} }
// AsyncAntiAffinityRuleAdd add anti affinity rule in async mode
func (c Compute) AsyncAntiAffinityRuleAdd(ctx context.Context, req AntiAffinityRuleAddRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/compute/antiAffinityRuleAdd"
aReq := wrapperAntiAffinityRuleAddRequest{
AntiAffinityRuleAddRequest: req,
AsyncMode: true,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil {
return "", err
}
var resp string
err = json.Unmarshal(res, &resp)
if err != nil {
return "", err
}
return resp, nil
}

View File

@@ -18,7 +18,7 @@ type CDEjectRequest struct {
type wrapperCDEjectRequest struct { type wrapperCDEjectRequest struct {
CDEjectRequest CDEjectRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode" json:"async_mode"`
} }
// CDEject eject CD image to compute's CD-ROM // CDEject eject CD image to compute's CD-ROM

View File

@@ -22,7 +22,7 @@ type CDInsertRequest struct {
type wrapperCDInsertRequest struct { type wrapperCDInsertRequest struct {
CDInsertRequest CDInsertRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode" json:"async_mode"`
} }
// CDInsert insert new CD image to compute's CD-ROM // CDInsert insert new CD image to compute's CD-ROM

View File

@@ -34,7 +34,7 @@ type ChangeIPRequest struct {
type wrapperChangeIPRequest struct { type wrapperChangeIPRequest struct {
ChangeIPRequest ChangeIPRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeIP change reserved IP for compute instance // ChangeIP change reserved IP for compute instance

View File

@@ -27,7 +27,7 @@ type ChangeLinkStateRequest struct {
type wrapperChangeLinkStateRequest struct { type wrapperChangeLinkStateRequest struct {
ChangeLinkStateRequest ChangeLinkStateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeLinkState changes the status link virtual of compute // ChangeLinkState changes the status link virtual of compute

View File

@@ -26,7 +26,7 @@ type ChangeMTURequest struct {
type wrapperChangeMTURequest struct { type wrapperChangeMTURequest struct {
ChangeMTURequest ChangeMTURequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeMTU change MTU for compute instance // ChangeMTU change MTU for compute instance

View File

@@ -26,7 +26,7 @@ type ChangeQoSPoliciesRequest struct {
type wrapperChangeQoSPoliciesRequest struct { type wrapperChangeQoSPoliciesRequest struct {
ChangeQoSPoliciesRequest ChangeQoSPoliciesRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeQoSPolicies change qos policies for compute // ChangeQoSPolicies change qos policies for compute

View File

@@ -30,7 +30,7 @@ type ChangeSecGroupsRequest struct {
type wrapperChangeSecGroupsRequest struct { type wrapperChangeSecGroupsRequest struct {
ChangeSecGroupsRequest ChangeSecGroupsRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeSecGroups changes security groups for compute // ChangeSecGroups changes security groups for compute

View File

@@ -47,7 +47,7 @@ type CloneRequest struct {
type wrapperCloneRequest struct { type wrapperCloneRequest struct {
CloneRequest CloneRequest
AsyncMode bool `url:"asyncMode" json:"asyncMode"` AsyncMode bool `url:"async_mode" json:"async_mode"`
} }
// Clone clones compute instance // Clone clones compute instance

View File

@@ -22,7 +22,7 @@ type CreateTemplateRequest struct {
type wrapperCreateTemplateRequest struct { type wrapperCreateTemplateRequest struct {
CreateTemplateRequest CreateTemplateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CreateTemplate create template from compute instance // CreateTemplate create template from compute instance

View File

@@ -55,7 +55,7 @@ type CreateTemplateFromBlankRequest struct {
type wrapperCreateTemplateFromBlankRequest struct { type wrapperCreateTemplateFromBlankRequest struct {
CreateTemplateFromBlankRequest CreateTemplateFromBlankRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CreateTemplateFromBlank creates template from boot disk of current compute in sync mode. // CreateTemplateFromBlank creates template from boot disk of current compute in sync mode.

View File

@@ -26,7 +26,7 @@ type DeleteRequest struct {
type wrapperDeleteRequest struct { type wrapperDeleteRequest struct {
DeleteRequest DeleteRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Delete deletes compute // Delete deletes compute

View File

@@ -18,7 +18,7 @@ type DisableRequest struct {
type wrapperDisableRequest struct { type wrapperDisableRequest struct {
DisableRequest DisableRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Disable disables compute // Disable disables compute

View File

@@ -60,7 +60,7 @@ type DiskAddRequest struct {
type wrapperDiskAddRequest struct { type wrapperDiskAddRequest struct {
DiskAddRequest DiskAddRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskAdd creates new disk and attach to compute // DiskAdd creates new disk and attach to compute

View File

@@ -34,7 +34,7 @@ type DiskAttachRequest struct {
type wrapperDiskAttachRequest struct { type wrapperDiskAttachRequest struct {
DiskAttachRequest DiskAttachRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskAttach attach disk to compute // DiskAttach attach disk to compute

View File

@@ -26,7 +26,7 @@ type DiskDelRequest struct {
type wrapperDiskDelRequest struct { type wrapperDiskDelRequest struct {
DiskDelRequest DiskDelRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskDel delete disk and detach from compute // DiskDel delete disk and detach from compute

View File

@@ -22,7 +22,7 @@ type DiskDetachRequest struct {
type wrapperDiskDetachRequest struct { type wrapperDiskDetachRequest struct {
DiskDetachRequest DiskDetachRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskDetach detach disk from compute // DiskDetach detach disk from compute

View File

@@ -26,7 +26,7 @@ type DiskQOSRequest struct {
type wrapperDiskQOSRequest struct { type wrapperDiskQOSRequest struct {
DiskQOSRequest DiskQOSRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskQOS change QoS of the disk // DiskQOS change QoS of the disk

View File

@@ -26,7 +26,7 @@ type DiskResizeRequest struct {
type wrapperDiskResizeRequest struct { type wrapperDiskResizeRequest struct {
DiskResizeRequest DiskResizeRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskResize change disk size // DiskResize change disk size

View File

@@ -26,7 +26,7 @@ type DiskSwitchToReplicationRequest struct {
type wrapperDiskSwitchToReplicationRequest struct { type wrapperDiskSwitchToReplicationRequest struct {
DiskSwitchToReplicationRequest DiskSwitchToReplicationRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskSwitchToReplication switches disk to it's replication // DiskSwitchToReplication switches disk to it's replication

View File

@@ -18,7 +18,7 @@ type GuestAgentDisableRequest struct {
type wrapperGuestAgentDisableRequest struct { type wrapperGuestAgentDisableRequest struct {
GuestAgentDisableRequest GuestAgentDisableRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Disable guest agent at a specific compute // Disable guest agent at a specific compute

View File

@@ -18,7 +18,7 @@ type GuestAgentEnableRequest struct {
type wrapperGuestAgentEnableRequest struct { type wrapperGuestAgentEnableRequest struct {
GuestAgentEnableRequest GuestAgentEnableRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Enable guest agent at a specific compute // Enable guest agent at a specific compute

View File

@@ -26,7 +26,7 @@ type GuestAgentExecuteRequest struct {
type wrapperGuestAgentExecuteRequest struct { type wrapperGuestAgentExecuteRequest struct {
GuestAgentExecuteRequest GuestAgentExecuteRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Execute guest agent command // Execute guest agent command

View File

@@ -18,7 +18,7 @@ type GuestAgentFeatureUpdateRequest struct {
type wrapperGuestAgentFeatureUpdateRequest struct { type wrapperGuestAgentFeatureUpdateRequest struct {
GuestAgentFeatureUpdateRequest GuestAgentFeatureUpdateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Feature update guest agent // Feature update guest agent

View File

@@ -63,6 +63,14 @@ type ListRequest struct {
// Required: false // Required: false
ZoneID uint64 `url:"zone_id,omitempty" json:"zone_id,omitempty"` ZoneID uint64 `url:"zone_id,omitempty" json:"zone_id,omitempty"`
// Find by VM folder ID
// Required: false
FolderID uint64 `url:"folder_id,omitempty" json:"folder_id,omitempty"`
// Include computes from descendant folders.
// Required: false
IncludeDescendants interface{} `url:"include_descendants,omitempty" json:"include_descendants,omitempty" validate:"omitempty,isBool"`
// Page number // Page number
// Required: false // Required: false
Page uint64 `url:"page,omitempty" json:"page,omitempty"` Page uint64 `url:"page,omitempty" json:"page,omitempty"`

View File

@@ -22,7 +22,7 @@ type MigrateToZoneRequest struct {
type wrapperMigrateToZoneRequest struct { type wrapperMigrateToZoneRequest struct {
MigrateToZoneRequest MigrateToZoneRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// MoveToRG moves compute instance to new resource group // MoveToRG moves compute instance to new resource group

View File

@@ -37,7 +37,7 @@ type MoveToRGRequest struct {
type wrapperMoveToRGRequest struct { type wrapperMoveToRGRequest struct {
MoveToRGRequest MoveToRGRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// MoveToRG moves compute instance to new resource group // MoveToRG moves compute instance to new resource group

View File

@@ -96,7 +96,7 @@ type NetAttachRequest struct {
type wrapperNetAttachRequest struct { type wrapperNetAttachRequest struct {
NetAttachRequest NetAttachRequest
AsyncMode bool `url:"asyncMode" json:"asyncMode"` AsyncMode bool `url:"async_mode" json:"async_mode"`
} }
// NetAttach attaches network to compute and gets info about network // NetAttach attaches network to compute and gets info about network

View File

@@ -26,7 +26,7 @@ type NetDetachRequest struct {
type wrapperNetDetachRequest struct { type wrapperNetDetachRequest struct {
NetDetachRequest NetDetachRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// NetDetach detaches network from compute // NetDetach detaches network from compute

View File

@@ -18,7 +18,7 @@ type PauseRequest struct {
type wrapperPauseRequest struct { type wrapperPauseRequest struct {
PauseRequest PauseRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Pause pause compute // Pause pause compute

View File

@@ -36,7 +36,7 @@ type PFWAddRequest struct {
type wrapperPFWAddRequest struct { type wrapperPFWAddRequest struct {
PFWAddRequest PFWAddRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// PFWAdd add port forward rule // PFWAdd add port forward rule

View File

@@ -39,7 +39,7 @@ type PFWDelRequest struct {
type wrapperPFWDelRequest struct { type wrapperPFWDelRequest struct {
PFWDelRequest PFWDelRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// PFWDel deletes port forward rule // PFWDel deletes port forward rule

View File

@@ -23,7 +23,7 @@ type PinToNodeRequest struct {
type wrapperPinToNodeRequest struct { type wrapperPinToNodeRequest struct {
PinToNodeRequest PinToNodeRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// PinToNode pin compute to current node // PinToNode pin compute to current node

View File

@@ -18,7 +18,7 @@ type PowerCycleRequest struct {
type wrapperPowerCycleRequest struct { type wrapperPowerCycleRequest struct {
PowerCycleRequest PowerCycleRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// PowerCycle makes force stop and start compute // PowerCycle makes force stop and start compute

View File

@@ -18,7 +18,7 @@ type RebootRequest struct {
type wrapperRebootRequest struct { type wrapperRebootRequest struct {
RebootRequest RebootRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Reboot reboots compute // Reboot reboots compute

View File

@@ -47,7 +47,7 @@ type RedeployRequest struct {
type wrapperRedeployRequest struct { type wrapperRedeployRequest struct {
RedeployRequest RedeployRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Redeploy redeploys compute // Redeploy redeploys compute

View File

@@ -18,7 +18,7 @@ type ResetRequest struct {
type wrapperResetRequest struct { type wrapperResetRequest struct {
ResetRequest ResetRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Reset resets compute // Reset resets compute

View File

@@ -46,7 +46,7 @@ func (r ResizeRequest) GetRAM() map[string]uint64 {
type wrapperResizeRequest struct { type wrapperResizeRequest struct {
ResizeRequest ResizeRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Resize resizes compute instance // Resize resizes compute instance

View File

@@ -18,7 +18,7 @@ type RestoreRequest struct {
type wrapperRestoreRequest struct { type wrapperRestoreRequest struct {
RestoreRequest RestoreRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Restore restores compute from recycle bin // Restore restores compute from recycle bin

View File

@@ -18,7 +18,7 @@ type ResumeRequest struct {
type wrapperResumeRequest struct { type wrapperResumeRequest struct {
ResumeRequest ResumeRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Resume resume Compute from paused state // Resume resume Compute from paused state

View File

@@ -29,7 +29,7 @@ type SnapshotCreateRequest struct {
type wrapperSnapshotCreateRequest struct { type wrapperSnapshotCreateRequest struct {
SnapshotCreateRequest SnapshotCreateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// SnapshotCreate creates compute snapshot // SnapshotCreate creates compute snapshot

View File

@@ -21,7 +21,7 @@ type SnapshotDeleteRequest struct {
type wrapperSnapshotDeleteRequeststruct struct { type wrapperSnapshotDeleteRequeststruct struct {
SnapshotDeleteRequest SnapshotDeleteRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// SnapshotDelete deletes specified compute snapshot // SnapshotDelete deletes specified compute snapshot

View File

@@ -26,7 +26,7 @@ type SnapshotRollbackRequest struct {
type wrapperSnapshotRollbackRequest struct { type wrapperSnapshotRollbackRequest struct {
SnapshotRollbackRequest SnapshotRollbackRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// SnapshotRollback rollbacks specified compute snapshot // SnapshotRollback rollbacks specified compute snapshot

View File

@@ -22,7 +22,7 @@ type StartRequest struct {
type wrapperStartRequest struct { type wrapperStartRequest struct {
StartRequest StartRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Start starts compute // Start starts compute

View File

@@ -22,7 +22,7 @@ type StopRequest struct {
type wrapperStopRequest struct { type wrapperStopRequest struct {
StopRequest StopRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Stop stops compute // Stop stops compute

View File

@@ -54,7 +54,7 @@ type FromPlatformDiskRequest struct {
type wrapperFromPlatformDiskRequest struct { type wrapperFromPlatformDiskRequest struct {
FromPlatformDiskRequest FromPlatformDiskRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// FromPlatformDisk creates template from platform disk in sync mode. // FromPlatformDisk creates template from platform disk in sync mode.

View File

@@ -77,7 +77,7 @@ type CreateRequest struct {
type asyncWrapperCreateRequest struct { type asyncWrapperCreateRequest struct {
CreateRequest CreateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Create creates image from a media identified by URL // Create creates image from a media identified by URL

View File

@@ -0,0 +1,46 @@
package stpolicy
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetReplicationProfileRequest struct to get replication profile
type GetReplicationProfileRequest struct {
// ID of replication profile
// Required: true
ProfileID uint64 `url:"profile_id" json:"profile_id" validate:"required"`
}
// GetReplicationProfile gets replication profile as an InfoReplicationProfile struct
func (sp StPolicy) GetReplicationProfile(ctx context.Context, req GetReplicationProfileRequest) (*InfoReplicationProfile, error) {
res, err := sp.GetReplicationProfileRaw(ctx, req)
if err != nil {
return nil, err
}
info := InfoReplicationProfile{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetReplicationProfileRaw gets replication profile as an array of bytes
func (sp StPolicy) GetReplicationProfileRaw(ctx context.Context, req GetReplicationProfileRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/storage_policy/get_replication_profile"
res, err := sp.client.DecortApiCall(ctx, http.MethodGet, url, req)
return res, err
}

View File

@@ -0,0 +1,65 @@
package stpolicy
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ListReplicationProfileRequest struct to get list of replication profiles
type ListReplicationProfileRequest struct {
// Page number
// Required: false
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
// Page size
// Required: false
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
// Search by replication profile ID
// Required: false
ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"`
// Search by replication profile name
// Required: false
Name string `url:"name,omitempty" json:"name,omitempty"`
// Search by replication type
// Required: false
ReplicationType string `url:"replication_type,omitempty" json:"replication_type,omitempty"`
// Sort by one of supported fields, format ±<field>
// Required: false
SortBy string `url:"sort_by,omitempty" json:"sort_by,omitempty"`
}
// ListReplicationProfile gets list of replication profiles as a ListReplicationProfiles struct
func (sp StPolicy) ListReplicationProfile(ctx context.Context, req ListReplicationProfileRequest) (*ListReplicationProfiles, error) {
res, err := sp.ListReplicationProfileRaw(ctx, req)
if err != nil {
return nil, err
}
list := ListReplicationProfiles{}
err = json.Unmarshal(res, &list)
if err != nil {
return nil, err
}
return &list, nil
}
// ListReplicationProfileRaw gets list of replication profiles as an array of bytes
func (sp StPolicy) ListReplicationProfileRaw(ctx context.Context, req ListReplicationProfileRequest) ([]byte, error) {
if err := validators.ValidateRequest(req); err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/storage_policy/list_replication_profile"
res, err := sp.client.DecortApiCall(ctx, http.MethodGet, url, req)
return res, err
}

View File

@@ -27,9 +27,12 @@ type ItemStoragePolicy struct {
// Status of the storage policy // Status of the storage policy
Status string `json:"status"` Status string `json:"status"`
// Max IOPS for the sotrage policy // Max IOPS for the storage policy
LimitIOPS uint64 `json:"limit_iops"` LimitIOPS uint64 `json:"limit_iops"`
// ID of the replication profile
ReplicationProfileID uint64 `json:"replication_profile_id"`
// Storage policy ID // Storage policy ID
StoragePolicyID uint64 `json:"storage_policy_id"` StoragePolicyID uint64 `json:"storage_policy_id"`
@@ -56,9 +59,12 @@ type InfoStoragePolicy struct {
// Status of the storage policy // Status of the storage policy
Status string `json:"status"` Status string `json:"status"`
// Max IOPS for the sotrage policy // Max IOPS for the storage policy
LimitIOPS uint64 `json:"limit_iops"` LimitIOPS uint64 `json:"limit_iops"`
// ID of the replication profile
ReplicationProfileID uint64 `json:"replication_profile_id"`
// ID of the storage policy // ID of the storage policy
StoragePolicyID uint64 `json:"storage_policy_id"` StoragePolicyID uint64 `json:"storage_policy_id"`
@@ -89,3 +95,72 @@ type Usage struct {
// List of resource groups // List of resource groups
Resgroups []uint64 `json:"resgroups"` Resgroups []uint64 `json:"resgroups"`
} }
type ListReplicationProfiles struct {
// List
Data []ItemReplicationProfile `json:"data"`
// Entry Count
EntryCount uint64 `json:"entryCount"`
}
type ItemReplicationProfile struct {
// ID of the replication profile
ID uint64 `json:"id"`
// GUID
GUID uint64 `json:"guid"`
// Name of the replication profile
Name string `json:"name"`
// Replication types
ReplicationType []string `json:"replication_type"`
// Max copy rate
MAXCopyRate uint64 `json:"max_copy_rate"`
// List of schedules
Schedules ListSchedules `json:"schedules"`
}
type InfoReplicationProfile struct {
// ID of the replication profile
ID uint64 `json:"id"`
// GUID
GUID uint64 `json:"guid"`
// Name of the replication profile
Name string `json:"name"`
// Replication types
ReplicationType []string `json:"replication_type"`
// Max copy rate
MAXCopyRate uint64 `json:"max_copy_rate"`
// List of schedules
Schedules ListSchedules `json:"schedules"`
}
type ListSchedules []Schedule
type Schedule struct {
// Type of the schedule
Type string `json:"type"`
// Name of the schedule
Name string `json:"name"`
// Min interval
MINInterval uint64 `json:"min_interval"`
// Calendar of the schedule
Calendar Calendar `json:"calendar"`
}
type Calendar struct {
// Weekly schedule
Weekly map[string][]string `json:"weekly"`
}

10
pkg/cloudapi/vmfolder.go Normal file
View File

@@ -0,0 +1,10 @@
package cloudapi
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vmfolder"
)
// Accessing the VMFolder method group
func (ca *CloudAPI) VMFolder() *vmfolder.VMFolder {
return vmfolder.New(ca.client)
}

View File

@@ -0,0 +1,47 @@
package vmfolder
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// AddACLAccessRequest adds ACL access to a vm folder
type AddACLAccessRequest struct {
// ID of a folder
// Required: true
FolderID uint64 `url:"folder_id" json:"folder_id" validate:"required"`
// User or group name to grant access
// Required: true
User string `url:"user" json:"user" validate:"required"`
// ID of a folder
// Required: true
Right string `url:"right" json:"right" validate:"required"`
}
// AddACLAccess adds ACL access to a vm folder
func (v VMFolder) AddACLAccess(ctx context.Context, req AddACLAccessRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/add_acl_access"
res, err := v.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
}

View File

@@ -0,0 +1,42 @@
package vmfolder
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ComputesMoveRequest struct to move computes to a vm folder
type ComputesMoveRequest struct {
// IDs of computes to move
// Required: true
ComputeIDs []uint64 `url:"compute_ids" json:"compute_ids" validate:"required"`
// Target vm folder ID
// Required: true
FolderID uint64 `url:"folder_id" json:"folder_id" validate:"required"`
}
// ComputesMove moves computes to a vm folder
func (v VMFolder) ComputesMove(ctx context.Context, req ComputesMoveRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/computes_move"
res, err := v.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
}

View File

@@ -0,0 +1,47 @@
package vmfolder
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// CreateRequest struct to create a vm folder
type CreateRequest struct {
// Resource Group ID
// Required: true
RGID uint64 `url:"rg_id" json:"rg_id" validate:"required"`
// Name
// Required: true
Name string `url:"name" json:"name" validate:"required"`
// Parent ID
// Required: false
ParentID uint64 `url:"parent_id,omitempty" json:"parent_id,omitempty"`
}
// Create creates a vm folder
func (v VMFolder) Create(ctx context.Context, req CreateRequest) (uint64, error) {
err := validators.ValidateRequest(req)
if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/create"
res, err := v.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 {
return 0, err
}
return result, nil
}

View File

@@ -0,0 +1,43 @@
package vmfolder
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// DeleteACLAccessRequest deletes ACL access from a vm folder
type DelACLAccessRequest struct {
// ID of a folder
// Required: true
FolderID uint64 `url:"folder_id" json:"folder_id" validate:"required"`
// User or group name to revoke access from
// Required: true
User string `url:"user" json:"user" validate:"required"`
}
// DeleteACLAccess deletes ACL access from a vm foler
func (v VMFolder) DeleteACLAccess(ctx context.Context, req DelACLAccessRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/del_acl_access"
res, err := v.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
}

View File

@@ -0,0 +1,38 @@
package vmfolder
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// DeleteRequest struct to delete a VM folder
type DeleteRequest struct {
// ID of a folder to delete
// Required: true
FolderID uint64 `url:"folder_id" json:"folder_id" validate:"required"`
}
// Delete deletes a vm folder
func (v VMFolder) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/delete"
res, err := v.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
}

View File

@@ -0,0 +1,46 @@
package vmfolder
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetRequest struct to get detailed information about a vm folder
type GetRequest struct {
// ID of a folder
// Required: true
FolderID uint64 `url:"folder_id" json:"folder_id" validate:"required"`
}
// Get gets current configuration of the vm folder as a RecordVMFolder struct
func (v VMFolder) Get(ctx context.Context, req GetRequest) (*RecordVMFolder, error) {
res, err := v.GetRaw(ctx, req)
if err != nil {
return nil, err
}
info := RecordVMFolder{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets current configuration of the vm folder as an array of bytes
func (v VMFolder) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/get"
res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,55 @@
package vmfolder
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// ListRequest struct to get list of vm folders
type ListRequest struct {
// Resource group ID
// Required: true
RGID uint64 `url:"rg_id" json:"rg_id" validate:"required"`
// Page number
// Required: false
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
// Page size
// Required: false
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
}
// List gets list of all vm folders in a resource group as a ListVMFolder struct
func (v VMFolder) List(ctx context.Context, req ListRequest) (*ListVMFolder, error) {
res, err := v.ListRaw(ctx, req)
if err != nil {
return nil, err
}
list := ListVMFolder{}
err = json.Unmarshal(res, &list)
if err != nil {
return nil, err
}
return &list, nil
}
// ListRaw gets list of all vm folders in a resource group as an array of bytes
func (v VMFolder) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
if err := validators.ValidateRequest(req); err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/list"
res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,79 @@
package vmfolder
// Detailed information about a folder
type RecordVMFolder struct {
// ID
ID uint64 `json:"id"`
// RG ID
RGID uint64 `json:"rg_id"`
// GID
GID uint64 `json:"gid"`
// Name of a folder
Name string `json:"name"`
// ACL
ACL []ACL `json:"acl"`
// Time of creation
CreatedTime uint64 `json:"created_time"`
// Parent ID
ParentID uint64 `json:"parent_id"`
// Status of a folder
Status string `json:"status"`
// Compute IDs
ComputeIDs []uint64 `json:"compute_ids"`
}
// ACL
type ACL struct {
// Explicit
Explicit bool `json:"explicit"`
// Right
Right string `json:"right"`
// Status
Status string `json:"status"`
// Type
Type string `json:"type"`
// User group ID
UserGroupID string `json:"userGroupId"`
}
// List of vm folders
type ListVMFolder struct {
// Entry count
EntryCount uint64 `json:"entryCount"`
// Data
Data []ItemVMFolder `json:"data"`
}
// Detailed information about a folder item
type ItemVMFolder struct {
// Folder ID
ID uint64 `json:"id"`
// Parent ID
ParentID uint64 `json:"parent_id"`
// Name
Name string `json:"name"`
// ACL
ACL []ACL `json:"acl"`
// Status
Status string `json:"status"`
// VM count
VMCount uint64 `json:"vm_count"`
}

View File

@@ -0,0 +1,42 @@
package vmfolder
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// MoveRequest to move a vm folder to a compute
type MoveRequest struct {
// VM Folder ID
// Required: true
FolderID uint64 `url:"folder_id" json:"folder_id"`
// New parent folder ID
// Required: true
NewParentID uint64 `url:"new_parent_id" json:"new_parent_id"`
}
// Move moves a vm folder to a compute
func (v VMFolder) Move(ctx context.Context, req MoveRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/move"
res, err := v.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
}

View File

@@ -0,0 +1,42 @@
package vmfolder
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// RenameRequest struct to rename a VM folder
type RenameRequest struct {
// ID of a folder to rename
// Required: true
FolderID uint64 `url:"folder_id" json:"folder_id" validate:"required"`
// A new name
// Required: true
Name string `url:"name" json:"name" validate:"required"`
}
// Rename renames a vm folder
func (v VMFolder) Rename(ctx context.Context, req RenameRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/vmfolder/rename"
res, err := v.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
}

View File

@@ -0,0 +1,17 @@
package vmfolder
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
)
// Structure for creating request to VMFolder
type VMFolder struct {
client interfaces.Caller
}
// Builder for VMFolder endpoints
func New(client interfaces.Caller) *VMFolder {
return &VMFolder{
client,
}
}

View File

@@ -2,8 +2,8 @@ package apiaccess
import ( import (
"context" "context"
"encoding/json"
"net/http" "net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
@@ -20,23 +20,25 @@ type DescUpdateRequest struct {
} }
// DescUpdate sets a new text description of the apiaccess group. // DescUpdate sets a new text description of the apiaccess group.
func (a APIAccess) DescUpdate(ctx context.Context, req DescUpdateRequest) (bool, error) { func (a APIAccess) DescUpdate(ctx context.Context, req DescUpdateRequest) (*ItemAPIAccess, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err)) return nil, validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudbroker/apiaccess/descUpdate" url := "/cloudbroker/apiaccess/descUpdate"
res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req) res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil { if err != nil {
return false, err return nil, err
} }
result, err := strconv.ParseBool(string(res)) info := ItemAPIAccess{}
err = json.Unmarshal(res, &info)
if err != nil { if err != nil {
return false, err return nil, err
} }
return result, nil return &info, nil
} }

View File

@@ -1,5 +1,7 @@
package apiaccess package apiaccess
import "encoding/json"
type ItemAPIAccess struct { type ItemAPIAccess struct {
// APIs // APIs
APIs APIsEndpoints `json:"apis"` APIs APIsEndpoints `json:"apis"`
@@ -88,21 +90,50 @@ type APIsEndpoints struct {
// CloudBroker endpoints // CloudBroker endpoints
CloudBroker CloudBrokerEndpoints `json:"cloudbroker,omitempty"` CloudBroker CloudBrokerEndpoints `json:"cloudbroker,omitempty"`
// LibCloud endpoints // SDN endpoints
LibCloud LibCloudEndpoints `json:"libcloud,omitempty"` SDN SDNEndpoints `json:"sdn,omitempty"`
// System endpoints // System endpoints
System SystemEndpoints `json:"system,omitempty"` System SystemEndpoints `json:"system,omitempty"`
} }
// MarshalJSON omits empty namespaces, so that "{}" is not sent in requests.
func (a APIsEndpoints) MarshalJSON() ([]byte, error) {
namespaces := []struct {
key string
value interface{}
}{
{"cloudapi", a.CloudAPI},
{"cloudbroker", a.CloudBroker},
{"sdn", a.SDN},
{"system", a.System},
}
result := make(map[string]json.RawMessage, len(namespaces))
for _, ns := range namespaces {
data, err := json.Marshal(ns.value)
if err != nil {
return nil, err
}
if string(data) == "{}" {
continue
}
result[ns.key] = data
}
return json.Marshal(result)
}
type CloudAPIEndpoints struct { type CloudAPIEndpoints struct {
Account []string `json:"account,omitempty"` Account []string `json:"account,omitempty"`
Audit []string `json:"audit,omitempty"`
BService []string `json:"bservice,omitempty"` BService []string `json:"bservice,omitempty"`
CloudSpace []string `json:"cloudspace,omitempty"`
Compute []string `json:"compute,omitempty"` Compute []string `json:"compute,omitempty"`
ComputeCI []string `json:"computeci,omitempty"`
Disks []string `json:"disks,omitempty"` Disks []string `json:"disks,omitempty"`
DPDK []string `json:"dpdk,omitempty"` DPDKNet []string `json:"dpdknet,omitempty"`
ExtNet []string `json:"extnet,omitempty"` ExtNet []string `json:"extnet,omitempty"`
FLIPGroup []string `json:"flipgroup,omitempty"` FLIPGroup []string `json:"flipgroup,omitempty"`
GPU []string `json:"gpu,omitempty"` GPU []string `json:"gpu,omitempty"`
@@ -112,18 +143,20 @@ type CloudAPIEndpoints struct {
KVMX86 []string `json:"kvmx86,omitempty"` KVMX86 []string `json:"kvmx86,omitempty"`
LB []string `json:"lb,omitempty"` LB []string `json:"lb,omitempty"`
Loactions []string `json:"locations,omitempty"` Loactions []string `json:"locations,omitempty"`
Machine []string `json:"machine,omitempty"`
Openshift []string `json:"openshift,omitempty"`
OpenshiftCI []string `json:"openshiftci,omitempty"`
PCIDevice []string `json:"pcidevice,omitempty"` PCIDevice []string `json:"pcidevice,omitempty"`
PortForwarding []string `json:"portforwarding,omitempty"`
Prometheus []string `json:"prometheus,omitempty"` Prometheus []string `json:"prometheus,omitempty"`
RG []string `json:"rg,omitempty"` RG []string `json:"rg,omitempty"`
Sizes []string `json:"sizes,omitempty"` SecurityGroup []string `json:"security_group,omitempty"`
SEP []string `json:"sep,omitempty"`
StoragePolicy []string `json:"storage_policy,omitempty"`
Tasks []string `json:"tasks,omitempty"` Tasks []string `json:"tasks,omitempty"`
Trunk []string `json:"trunk,omitempty"`
User []string `json:"user,omitempty"` User []string `json:"user,omitempty"`
VFPool []string `json:"vfpool,omitempty"`
VGPU []string `json:"vgpu,omitempty"` VGPU []string `json:"vgpu,omitempty"`
VINS []string `json:"vins,omitempty"` VINS []string `json:"vins,omitempty"`
VMFolder []string `json:"vmfolder,omitempty"`
Zone []string `json:"zone,omitempty"`
All bool `json:"ALL,omitempty"` All bool `json:"ALL,omitempty"`
} }
@@ -133,72 +166,83 @@ type CloudBrokerEndpoints struct {
Audit interface{} `json:"audit,omitempty"` Audit interface{} `json:"audit,omitempty"`
AuditBeat []string `json:"auditbeat,omitempty"` AuditBeat []string `json:"auditbeat,omitempty"`
AuditCollector []string `json:"auditcollector,omitempty"` AuditCollector []string `json:"auditcollector,omitempty"`
Backup []string `json:"backup,omitempty"`
BackupCreator []string `json:"backupcreator,omitempty"` BackupCreator []string `json:"backupcreator,omitempty"`
BService []string `json:"bservice,omitempty"` BService []string `json:"bservice,omitempty"`
CloudSpace []string `json:"cloudspace,omitempty"`
Compute []string `json:"compute,omitempty"` Compute []string `json:"compute,omitempty"`
ComputeCI []string `json:"computeci,omitempty"`
Desnode []string `json:"desnode,omitempty"`
Diagnostics []string `json:"diagnostics,omitempty"`
Disks []string `json:"disks,omitempty"` Disks []string `json:"disks,omitempty"`
DPDK []string `json:"dpdk,omitempty"` DPDKNet []string `json:"dpdknet,omitempty"`
Eco []string `json:"eco,omitempty"` Eco []string `json:"eco,omitempty"`
ExtNet []string `json:"extnet,omitempty"` ExtNet []string `json:"extnet,omitempty"`
FlIPgroup []string `json:"flipgroup,omitempty"` FlIPgroup []string `json:"flipgroup,omitempty"`
Grid []string `json:"grid,omitempty"` Grid []string `json:"grid,omitempty"`
Group []string `json:"group,omitempty"` Group []string `json:"group,omitempty"`
Health []string `json:"health,omitempty"` Health []string `json:"health,omitempty"`
IaaS []string `json:"iaas,omitempty"`
Image []string `json:"image,omitempty"` Image []string `json:"image,omitempty"`
Job interface{} `json:"job,omitempty"` Job interface{} `json:"job,omitempty"`
K8CI []string `json:"k8ci,omitempty"` K8CI []string `json:"k8ci,omitempty"`
K8S []string `json:"k8s,omitempty"` K8S []string `json:"k8s,omitempty"`
KVMX86 []string `json:"kvmx86,omitempty"` KVMX86 []string `json:"kvmx86,omitempty"`
LB []string `json:"lb,omitempty"` LB []string `json:"lb,omitempty"`
Machine []string `json:"machine,omitempty"`
Metering []string `json:"metering,omitempty"` Metering []string `json:"metering,omitempty"`
Milestones []string `json:"milestones,omitempty"` Milestones []string `json:"milestones,omitempty"`
Openshift []string `json:"openshift,omitempty"` Node []string `json:"node,omitempty"`
OpenshiftCI []string `json:"openshiftci,omitempty"`
Ovsnode []string `json:"ovsnode,omitempty"`
PCIDevice []string `json:"pcidevice,omitempty"` PCIDevice []string `json:"pcidevice,omitempty"`
PGPU []string `json:"pgpu,omitempty"` PGPU []string `json:"pgpu,omitempty"`
Prometheus []string `json:"prometheus,omitempty"` Prometheus []string `json:"prometheus,omitempty"`
QOS []string `json:"qos,omitempty"`
Resmon interface{} `json:"resmon,omitempty"` Resmon interface{} `json:"resmon,omitempty"`
RG []string `json:"rg,omitempty"` RG []string `json:"rg,omitempty"`
SecurityGroup []string `json:"security_group,omitempty"`
Sep []string `json:"sep,omitempty"` Sep []string `json:"sep,omitempty"`
Node []string `json:"node,omitempty"` StoragePolicy []string `json:"storage_policy,omitempty"`
Tasks []string `json:"tasks,omitempty"` Tasks []string `json:"tasks,omitempty"`
TLock []string `json:"tlock,omitempty"` TLock []string `json:"tlock,omitempty"`
Trunk []string `json:"trunk,omitempty"`
User []string `json:"user,omitempty"` User []string `json:"user,omitempty"`
VFPool []string `json:"vfpool,omitempty"`
VGPU []string `json:"vgpu,omitempty"` VGPU []string `json:"vgpu,omitempty"`
VINS []string `json:"vins,omitempty"` VINS []string `json:"vins,omitempty"`
VMFolder []string `json:"vmfolder,omitempty"`
VNFDev []string `json:"vnfdev,omitempty"` VNFDev []string `json:"vnfdev,omitempty"`
ZeroAccess []string `json:"zeroaccess,omitempty"` ZeroAccess []string `json:"zeroaccess,omitempty"`
Zone []string `json:"zone,omitempty"`
All bool `json:"ALL,omitempty"` All bool `json:"ALL,omitempty"`
} }
type LibCloudEndpoints struct { type SDNEndpoints struct {
Libvirt []string `json:"libvirt,omitempty"` AccessGroup []string `json:"access_group,omitempty"`
AddressPool []string `json:"address_pool,omitempty"`
DefaultSecurityPolicy []string `json:"default_security_policy,omitempty"`
ExternalNetwork []string `json:"external_network,omitempty"`
FloatingIP []string `json:"floating_ip,omitempty"`
Hypervisor []string `json:"hypervisor,omitempty"`
L2ExternalNetwork []string `json:"l2_external_network,omitempty"`
LogicalPort []string `json:"logical_port,omitempty"`
NetworkObjectGroup []string `json:"network_object_group,omitempty"`
Router []string `json:"router,omitempty"`
RouterGatewayPort []string `json:"router/gateway_port,omitempty"`
RouterPolicies []string `json:"router/policies,omitempty"`
RouterRouterPort []string `json:"router/router_port,omitempty"`
RouterStaticRoute []string `json:"router/static_route,omitempty"`
SecurityPolicy []string `json:"security_policy,omitempty"`
SecurityPolicyRule []string `json:"security_policy/rule,omitempty"`
SecurityRule []string `json:"security_rule,omitempty"`
Segment []string `json:"segment,omitempty"`
Version []string `json:"version,omitempty"`
All bool `json:"ALL,omitempty"` All bool `json:"ALL,omitempty"`
} }
type SystemEndpoints struct { type SystemEndpoints struct {
AgentController []string `json:"agentcontroller,omitempty"`
Alerts []string `json:"alerts,omitempty"`
Audits []string `json:"audits,omitempty"` Audits []string `json:"audits,omitempty"`
Cache []string `json:"cache,omitempty"`
ContentManager []string `json:"contentmanager,omitempty"` ContentManager []string `json:"contentmanager,omitempty"`
DocGenerator []string `json:"docgenerator,omitempty"` DocGenerator []string `json:"docgenerator,omitempty"`
EmailSender []string `json:"emailsender,omitempty"` EmailSender []string `json:"emailsender,omitempty"`
ErrorConditionHandler []string `json:"errorconditionhandler,omitempty"`
GridManager []string `json:"gridmanager,omitempty"` GridManager []string `json:"gridmanager,omitempty"`
Health []string `json:"health,omitempty"` Health []string `json:"health,omitempty"`
Info []string `json:"info,omitempty"` Info []string `json:"info,omitempty"`
InfoWellknown []string `json:"info/wellknown,omitempty"`
InfoMGR []string `json:"infomgr,omitempty"` InfoMGR []string `json:"infomgr,omitempty"`
Job []string `json:"job,omitempty"`
Log []string `json:"log,omitempty"`
Logo []string `json:"logo,omitempty"`
Oauth []string `json:"oauth,omitempty"` Oauth []string `json:"oauth,omitempty"`
Task []string `json:"task,omitempty"` Task []string `json:"task,omitempty"`
UserManager []string `json:"usermanager,omitempty"` UserManager []string `json:"usermanager,omitempty"`

View File

@@ -4,7 +4,6 @@ import (
"context" "context"
"encoding/json" "encoding/json"
"net/http" "net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
@@ -27,10 +26,10 @@ type wrapperUpdateRequest struct {
} }
// Update updates apis of apiaccess group. // Update updates apis of apiaccess group.
func (a APIAccess) Update(ctx context.Context, req UpdateRequest) (bool, error) { func (a APIAccess) Update(ctx context.Context, req UpdateRequest) (*ItemAPIAccess, error) {
err := validators.ValidateRequest(req) err := validators.ValidateRequest(req)
if err != nil { if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err)) return nil, validators.ValidationErrors(validators.GetErrors(err))
} }
url := "/cloudbroker/apiaccess/update" url := "/cloudbroker/apiaccess/update"
@@ -41,20 +40,22 @@ func (a APIAccess) Update(ctx context.Context, req UpdateRequest) (bool, error)
apiJSON, err := json.Marshal(&req.APIs) apiJSON, err := json.Marshal(&req.APIs)
if err != nil { if err != nil {
return false, err return nil, err
} }
reqWrapped.APIString = string(apiJSON) reqWrapped.APIString = string(apiJSON)
res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped)
if err != nil { if err != nil {
return false, err return nil, err
} }
result, err := strconv.ParseBool(string(res)) info := ItemAPIAccess{}
err = json.Unmarshal(res, &info)
if err != nil { if err != nil {
return false, err return nil, err
} }
return result, nil return &info, nil
} }

View File

@@ -31,7 +31,7 @@ type CreateDiskBackupRequest struct {
type wrapperCreateDiskBackupRequest struct { type wrapperCreateDiskBackupRequest struct {
CreateDiskBackupRequest CreateDiskBackupRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CreateDiskBackup creates disk backup // CreateDiskBackup creates disk backup

View File

@@ -33,7 +33,7 @@ type CreateDisksBackupRequest struct {
type wrapperCreateDisksBackupRequest struct { type wrapperCreateDisksBackupRequest struct {
CreateDisksBackupRequest CreateDisksBackupRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CreateDisksBackup creates disks backup // CreateDisksBackup creates disks backup

View File

@@ -21,7 +21,7 @@ type DeleteDiskBackupRequest struct {
type wrapperDeleteDiskBackupRequest struct { type wrapperDeleteDiskBackupRequest struct {
DeleteDiskBackupRequest DeleteDiskBackupRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DeleteDiskBackup deletes disk backup // DeleteDiskBackup deletes disk backup

View File

@@ -30,7 +30,7 @@ type RestoreDiskFromBackupRequest struct {
type wrapperRestoreDiskFromBackupRequest struct { type wrapperRestoreDiskFromBackupRequest struct {
RestoreDiskFromBackupRequest RestoreDiskFromBackupRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// RestoreDiskFromBackup restores disk from backup // RestoreDiskFromBackup restores disk from backup

View File

@@ -35,7 +35,7 @@ type RestoreDisksFromBackupRequest struct {
type wrapperRestoreDisksFromBackupRequest struct { type wrapperRestoreDisksFromBackupRequest struct {
RestoreDisksFromBackupRequest RestoreDisksFromBackupRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// RestoreDisksFromBackup restores disks from backup // RestoreDisksFromBackup restores disks from backup

View File

@@ -20,7 +20,7 @@ type AbortSharedSnapshotMergeRequest struct {
type wrapperAbortSharedSnapshotMergeRequest struct { type wrapperAbortSharedSnapshotMergeRequest struct {
AbortSharedSnapshotMergeRequest AbortSharedSnapshotMergeRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// AbortSharedSnapshotMerge shared snapshots merge abort // AbortSharedSnapshotMerge shared snapshots merge abort

View File

@@ -2,6 +2,7 @@ package compute
import ( import (
"context" "context"
"encoding/json"
"net/http" "net/http"
"strconv" "strconv"
@@ -42,6 +43,17 @@ type AffinityRuleAddRequest struct {
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: true // Required: true
Value string `url:"value" json:"value" validate:"required"` Value string `url:"value" json:"value" validate:"required"`
// Migrate compute according to the rule
// Default: false
// Required: false
Migrate bool `url:"migrate" json:"migrate"`
}
type wrapperAffinityRuleAddRequest struct {
AffinityRuleAddRequest
AsyncMode bool `url:"async_mode"`
} }
// AffinityRuleAdd adds affinity rule // AffinityRuleAdd adds affinity rule
@@ -53,7 +65,12 @@ func (c Compute) AffinityRuleAdd(ctx context.Context, req AffinityRuleAddRequest
url := "/cloudbroker/compute/affinityRuleAdd" url := "/cloudbroker/compute/affinityRuleAdd"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) aReq := wrapperAffinityRuleAddRequest{
AffinityRuleAddRequest: req,
AsyncMode: false,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil { if err != nil {
return false, err return false, err
} }
@@ -65,3 +82,32 @@ func (c Compute) AffinityRuleAdd(ctx context.Context, req AffinityRuleAddRequest
return result, nil return result, nil
} }
// AsyncAffinityRuleAdd add affinity rule in async mode
func (c Compute) AsyncAffinityRuleAdd(ctx context.Context, req AffinityRuleAddRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/compute/affinityRuleAdd"
aReq := wrapperAffinityRuleAddRequest{
AffinityRuleAddRequest: req,
AsyncMode: true,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil {
return "", err
}
var resp string
err = json.Unmarshal(res, &resp)
if err != nil {
return "", err
}
return resp, nil
}

View File

@@ -2,6 +2,7 @@ package compute
import ( import (
"context" "context"
"encoding/json"
"net/http" "net/http"
"strconv" "strconv"
@@ -40,6 +41,17 @@ type AntiAffinityRuleAddRequest struct {
// Value that must match the key to be taken into account when analyzing this rule // Value that must match the key to be taken into account when analyzing this rule
// Required: true // Required: true
Value string `url:"value" json:"value" validate:"required"` Value string `url:"value" json:"value" validate:"required"`
// Migrate compute according to the rule
// Default: false
// Required: false
Migrate bool `url:"migrate" json:"migrate"`
}
type wrapperAntiAffinityRuleAddRequest struct {
AntiAffinityRuleAddRequest
AsyncMode bool `url:"async_mode"`
} }
// AntiAffinityRuleAdd adds anti affinity rule // AntiAffinityRuleAdd adds anti affinity rule
@@ -51,7 +63,12 @@ func (c Compute) AntiAffinityRuleAdd(ctx context.Context, req AntiAffinityRuleAd
url := "/cloudbroker/compute/antiAffinityRuleAdd" url := "/cloudbroker/compute/antiAffinityRuleAdd"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req) aReq := wrapperAntiAffinityRuleAddRequest{
AntiAffinityRuleAddRequest: req,
AsyncMode: false,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil { if err != nil {
return false, err return false, err
} }
@@ -63,3 +80,32 @@ func (c Compute) AntiAffinityRuleAdd(ctx context.Context, req AntiAffinityRuleAd
return result, nil return result, nil
} }
// AsyncAntiAffinityRuleAdd add anti affinity rule in async mode
func (c Compute) AsyncAntiAffinityRuleAdd(ctx context.Context, req AntiAffinityRuleAddRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/compute/antiAffinityRuleAdd"
aReq := wrapperAntiAffinityRuleAddRequest{
AntiAffinityRuleAddRequest: req,
AsyncMode: true,
}
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, aReq)
if err != nil {
return "", err
}
var resp string
err = json.Unmarshal(res, &resp)
if err != nil {
return "", err
}
return resp, nil
}

View File

@@ -18,7 +18,7 @@ type CDEjectRequest struct {
type wrapperCDEjectRequest struct { type wrapperCDEjectRequest struct {
CDEjectRequest CDEjectRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CDEject ejects CD image to compute's CD-ROM // CDEject ejects CD image to compute's CD-ROM

View File

@@ -21,7 +21,7 @@ type CDInsertRequest struct {
type wrapperCDInsertRequest struct { type wrapperCDInsertRequest struct {
CDInsertRequest CDInsertRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CDInsert inserts new CD image to compute's CD-ROM // CDInsert inserts new CD image to compute's CD-ROM

View File

@@ -34,7 +34,7 @@ type ChangeIPRequest struct {
type wrapperChangeIPRequest struct { type wrapperChangeIPRequest struct {
ChangeIPRequest ChangeIPRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeIP change reserved IP for compute instance // ChangeIP change reserved IP for compute instance

View File

@@ -27,7 +27,7 @@ type ChangeLinkStateRequest struct {
type wrapperChangeLinkStateRequest struct { type wrapperChangeLinkStateRequest struct {
ChangeLinkStateRequest ChangeLinkStateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeLinkState changes the status link virtual of compute // ChangeLinkState changes the status link virtual of compute

View File

@@ -26,7 +26,7 @@ type ChangeMTURequest struct {
type wrapperChangeMTURequest struct { type wrapperChangeMTURequest struct {
ChangeMTURequest ChangeMTURequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeMTU change MTU for compute instance // ChangeMTU change MTU for compute instance

View File

@@ -26,7 +26,7 @@ type ChangeQoSPoliciesRequest struct {
type wrapperChangeQoSPoliciesRequest struct { type wrapperChangeQoSPoliciesRequest struct {
ChangeQoSPoliciesRequest ChangeQoSPoliciesRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeQoSPolicies change qos policies for compute // ChangeQoSPolicies change qos policies for compute

View File

@@ -30,7 +30,7 @@ type ChangeSecGroupsRequest struct {
type wrapperChangeSecGroupsRequest struct { type wrapperChangeSecGroupsRequest struct {
ChangeSecGroupsRequest ChangeSecGroupsRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// ChangeSecGroups changes security groups for compute // ChangeSecGroups changes security groups for compute

View File

@@ -47,7 +47,7 @@ type CloneRequest struct {
type wrapperCloneRequest struct { type wrapperCloneRequest struct {
CloneRequest CloneRequest
AsyncMode bool `url:"asyncMode" json:"asyncMode"` AsyncMode bool `url:"async_mode" json:"async_mode"`
} }
// Clone clones compute instance // Clone clones compute instance

View File

@@ -22,7 +22,7 @@ type CreateTemplateRequest struct {
type wrapperCreateTemplateRequest struct { type wrapperCreateTemplateRequest struct {
CreateTemplateRequest CreateTemplateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CreateTemplate create template from compute instance // CreateTemplate create template from compute instance

View File

@@ -55,7 +55,7 @@ type CreateTemplateFromBlankRequest struct {
type wrapperCreateTemplateFromBlankRequest struct { type wrapperCreateTemplateFromBlankRequest struct {
CreateTemplateFromBlankRequest CreateTemplateFromBlankRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// CreateTemplateFromBlank creates template from boot disk of current compute in sync mode. // CreateTemplateFromBlank creates template from boot disk of current compute in sync mode.

View File

@@ -26,7 +26,7 @@ type DeleteRequest struct {
type wrapperDeleteRequest struct { type wrapperDeleteRequest struct {
DeleteRequest DeleteRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Delete deletes compute // Delete deletes compute

View File

@@ -18,7 +18,7 @@ type DisableRequest struct {
type wrapperDisableRequest struct { type wrapperDisableRequest struct {
DisableRequest DisableRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Disable disables compute // Disable disables compute

View File

@@ -68,7 +68,7 @@ type DiskAddRequest struct {
type wrapperDiskAddRequest struct { type wrapperDiskAddRequest struct {
DiskAddRequest DiskAddRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskAdd creates new disk and attach to compute // DiskAdd creates new disk and attach to compute

View File

@@ -34,7 +34,7 @@ type DiskAttachRequest struct {
type wrapperDiskAttachRequest struct { type wrapperDiskAttachRequest struct {
DiskAttachRequest DiskAttachRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskAttach attach disk to compute // DiskAttach attach disk to compute

View File

@@ -26,7 +26,7 @@ type DiskDelRequest struct {
type wrapperDiskDelRequest struct { type wrapperDiskDelRequest struct {
DiskDelRequest DiskDelRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskDel deletes disk and detaches it from compute // DiskDel deletes disk and detaches it from compute

View File

@@ -22,7 +22,7 @@ type DiskDetachRequest struct {
type wrapperDiskDetachRequest struct { type wrapperDiskDetachRequest struct {
DiskDetachRequest DiskDetachRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskDetach detaches disk from compute // DiskDetach detaches disk from compute

View File

@@ -26,7 +26,7 @@ type DiskQOSRequest struct {
type wrapperDiskQOSRequest struct { type wrapperDiskQOSRequest struct {
DiskQOSRequest DiskQOSRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskQOS changes QOS of the disk // DiskQOS changes QOS of the disk

View File

@@ -26,7 +26,7 @@ type DiskResizeRequest struct {
type wrapperDiskResizeRequest struct { type wrapperDiskResizeRequest struct {
DiskResizeRequest DiskResizeRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskResize changes disk size // DiskResize changes disk size

View File

@@ -26,7 +26,7 @@ type DiskSwitchToReplicationRequest struct {
type wrapperDiskSwitchToReplicationRequest struct { type wrapperDiskSwitchToReplicationRequest struct {
DiskSwitchToReplicationRequest DiskSwitchToReplicationRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// DiskSwitchToReplication switches disk to it's replication // DiskSwitchToReplication switches disk to it's replication

View File

@@ -18,7 +18,7 @@ type GuestAgentDisableRequest struct {
type wrapperGuestAgentDisableRequest struct { type wrapperGuestAgentDisableRequest struct {
GuestAgentDisableRequest GuestAgentDisableRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Disable guest agent at a specific compute // Disable guest agent at a specific compute

View File

@@ -18,7 +18,7 @@ type GuestAgentEnableRequest struct {
type wrapperGuestAgentEnableRequest struct { type wrapperGuestAgentEnableRequest struct {
GuestAgentEnableRequest GuestAgentEnableRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Enable guest agent at a specific compute // Enable guest agent at a specific compute

View File

@@ -26,7 +26,7 @@ type GuestAgentExecuteRequest struct {
type wrapperGuestAgentExecuteRequest struct { type wrapperGuestAgentExecuteRequest struct {
GuestAgentExecuteRequest GuestAgentExecuteRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Execute guest agent command // Execute guest agent command

View File

@@ -18,7 +18,7 @@ type GuestAgentFeatureUpdateRequest struct {
type wrapperGuestAgentFeatureUpdateRequest struct { type wrapperGuestAgentFeatureUpdateRequest struct {
GuestAgentFeatureUpdateRequest GuestAgentFeatureUpdateRequest
AsyncMode bool `url:"asyncMode"` AsyncMode bool `url:"async_mode"`
} }
// Feature update guest agent // Feature update guest agent

Some files were not shown because too many files have changed in this diff Show More