v1.16.9
v1.16.9
This commit is contained in:
80
CHANGELOG.md
80
CHANGELOG.md
@@ -1,4 +1,4 @@
|
|||||||
## Version 1.16.8
|
## Version 1.16.9
|
||||||
|
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
@@ -33,70 +33,74 @@
|
|||||||
|
|
||||||
### Добавлено
|
### Добавлено
|
||||||
|
|
||||||
#### apiaccess
|
#### Общее
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1123 | Вычисляемое поле `BasisMPM` в структуру ответа `CloudBrokerEndpoints` в cloudbroker/apiaccess |
|
| BGOS-1146 | Значение `aerodisk` в валидаторе `sepTypeValues` |
|
||||||
|
| BGOS-1146 | Значение `AERODISK` в валидаторе `sepTypesValues` |
|
||||||
|
|
||||||
#### basismpm
|
#### audit
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1123 | Структура запроса `StartRequest` и метод `Start` в cloudbroker/basismpm |
|
| BGOS-1147 | Вычисляемое поле `VMFolderID` в структуру ответа `ItemAudit` в cloudapi/audit |
|
||||||
| BGOS-1123 | Структура запроса `StatusRequest` и метод `Status` в cloudbroker/basismpm |
|
| BGOS-1147 | Вычисляемое поле `VMFolderID` в структуры ответа `ItemAudit` и `RecordAudit` в cloudbroker/audit |
|
||||||
| BGOS-1123 | Структура запроса `StopRequest` и метод `Stop` в cloudbroker/basismpm |
|
|
||||||
| BGOS-1123 | Структура запроса `UpdateRequest` и метод `Update` в cloudbroker/basismpm |
|
|
||||||
| BGOS-1123 | Структуры ответа `MemInfo` и `RecordBasisMPM` в cloudbroker/basismpm |
|
|
||||||
|
|
||||||
|
#### compute
|
||||||
|
| Идентификатор задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BGOS-1138 | Метод `MassPinToNode` и структура запроса `MassPinToNodeRequest` в cloudbroker/compute |
|
||||||
|
|
||||||
|
#### grid
|
||||||
|
| Идентификатор задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BGOS-1148 | Вычисляемые поля `SDNWeb` и `BVPWeb` в структуры ответа `RecordGrid` и `ItemGridList` в cloudbroker/grid |
|
||||||
|
| BGOS-1148 | Структуры ответа `SDNWeb` и `BVPWeb` в cloudbroker/grid |
|
||||||
|
|
||||||
#### image
|
#### image
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1124 | Структура запроса `CreateFromDiskRequest` и методы `CreateFromDisk` и `CreateFromDiskAsync` в cloudapi/image |
|
| BGOS-1140 | Опциональные поля `AccountID` и `SEPType` в структуру запроса `ListRequest` в cloudapi/image |
|
||||||
| BGOS-1124 | Структура запроса `CreateFromDiskRequest` и методы `CreateFromDisk` и `CreateFromDiskAsync` в cloudbroker/image |
|
| BGOS-1140 | Опциональные поля `AccountID` и `SEPType` в структуру запроса `ListRequest` в cloudbroker/image |
|
||||||
|
| BGOS-1143 | Вычисляемое поле `RealSize` в структуру ответа `RecordImage` в cloudapi/image |
|
||||||
|
| BGOS-1143 | Вычисляемое поле `LinksTo` в структуру ответа `ItemImage` в cloudapi/image |
|
||||||
|
| BGOS-1143 | Вычисляемое поле `RealSize` в структуру ответа `RecordImage` в cloudbroker/image |
|
||||||
|
| BGOS-1143 | Вычисляемые поля `RealSize`, `CKey` и `Meta` в структуру ответа `ItemImage` в cloudbroker/image |
|
||||||
|
|
||||||
#### compute
|
#### locations
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1126 | Вычисляемые поля `PreviousReservesComputeResources` и `TakeOverResources` в структуру ответа `Resolution` в cloudbroker/compute |
|
| BGOS-1139 | Вычисляемые поля `SDNWeb` и `BVPWeb` в структуру ответа `ItemLocation` в cloudapi/locations |
|
||||||
| BGOS-1126 | Опциональное поле `TakeOverResources` в структуру запроса `MigrateV2ResolveRequest` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Вычисляемое поле `Message` в структуру ответа `MigrateV2ResolveRecord` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Вычисляемые поля `DisksCompleted`, `CompletedDisks`, `DisksTotal` и `CurrentDisk` в структуру ответа `ProgressDisks` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Структуры ответа `CompletedDisk` и `CurrentDisk` в cloudbroker/compute |
|
|
||||||
|
|
||||||
|
#### rg
|
||||||
#### zone
|
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1127 | Вычисляемое поле `DRSPortSeed` в структуры ответа `ItemZone` и `RecordZone` в cloudbroker/zone |
|
| BGOS-1141 | Вычисляемое поле `Policies` в структуру ответа `Reservation` в cloudbroker/rg |
|
||||||
|
| BGOS-1141 | Структуры ответа `PolicyUsage` и `ResourceConsumptionLimits` в cloudbroker/rg |
|
||||||
|
| BGOS-1141 | Вычисляемое поле `Policies` в структуры ответа `Resource`, `RecordResourceUsage` в cloudapi/rg |
|
||||||
|
| BGOS-1141 | Структуры ответа `PolicyUsage` и `ResourceConsumptionLimits` в cloudapi/rg |
|
||||||
|
|
||||||
|
#### vins
|
||||||
|
| Идентификатор задачи | Описание |
|
||||||
|
| --- | --- |
|
||||||
|
| BGOS-1142 | Вычисляемое поле `AutoAssignable` в структуру ответа `ItemReservation` в cloudapi/vins |
|
||||||
|
|
||||||
|
|
||||||
### Изменено
|
### Изменено
|
||||||
|
|
||||||
#### compute
|
#### basismpm
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1126 | Тип вычисляемого поля `UpdatedAt` с `uint64` на `float64` в структуре ответа `Observation` в cloudbroker/compute |
|
| BGOS-1144 | Тип опциональных полей `PressureThreshold`, `DeflateThreshold`, `BufferPCT`, `GuaranteedPCT`, `ShrinkThresholdPCT`, `BalloonMaxShrinkPCT` и `BalloonMaxGrowPCT` с `uint64` на `float64` в структурах запроса `StartRequest` и `UpdateRequest` в cloudbroker/basismpm |
|
||||||
| BGOS-1126 | Тип вычисляемых полей `SampledAt`, `Percent` и `BytesPerSecond` с `uint64` на `float64` в структуре ответа `Memory` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Тип вычисляемых полей `SampledAt`, `Percent` и `BytesPerSecond` с `uint64` на `float64` в структуре ответа `ProgressDisks` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Тип вычисляемых полей `SampledAt`, `Percent` и `BytesPerSecond` с `uint64` на `float64` в структуре ответа `SystemDisk` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Тип опционального поля `Storage` со `Storage` на `*Storage` в структуре запроса `MigrateV2Request` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Тип поля `Targets` с опционального на обязательный в структуре запроса `Storage` в cloudbroker/compute |
|
|
||||||
| BGOS-1126 | Тэги `url` и `json` поля `Targets` с `targets` на `targets` в структуре запроса `Storage` в cloudbroker/compute |
|
|
||||||
|
|
||||||
#### disks
|
#### rg
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1128 | Тэги `url` и `json` поля `KeepCurrentIOTune` с `keep_current_iot` на `keep_current_iotune` в структуре запроса `ChangeDiskStoragePolicyRequest` в cloudbroker/disks |
|
| BGOS-1141 | Тип вычисляемого поля `ResourceLimits` с `ResourceLimits` на `ResourceConsumptionLimits` в структуре ответа `ItemResourceConsumption` в cloudbroker/rg |
|
||||||
| BGOS-1128 | Тэги `url` и `json` поля `KeepCurrentIOTune` с `keep_current_iot` на `keep_current_iotune` в структуре запроса `ChangeDiskStoragePolicyRequest` в cloudapi/disks |
|
| BGOS-1141 | Тип вычисляемого поля `ResourceLimits` с `ResourceLimits` на `ResourceConsumptionLimits` в структуре ответа `ItemResourceConsumption` в cloudapi/rg |
|
||||||
|
|
||||||
#### client sdk
|
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-1134 | При получении от сервера ответа с HTTP-кодом ошибки клиенты `DecortClient`, `LegacyDecortClient` и `BVSDecortClient` теперь возвращают ошибку типа `HTTPError` с полями `StatusCode` и `Body`. Для проверки статусов добавлены функции `IsNotFound` и `HasStatusCode` |
|
|
||||||
|
|
||||||
### Исправлено
|
### Исправлено
|
||||||
|
|
||||||
#### client sdk
|
#### rg
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1135 | Исправлена ошибка в сообщении об ошибке при отсутствии времени истечения токена в клиенте |
|
| BGOS-1141 | JSON-тэг поля `RGID` с `rgid` на `id` в структуре ответа `ItemResourceConsumption` в cloudapi/rg |
|
||||||
|
|||||||
@@ -508,24 +508,24 @@ func migrateV2ModeValidator(fe validator.FieldLevel) bool {
|
|||||||
|
|
||||||
// pressureThresholdValidator checks if PressureThreshold is in range from 5 to 50
|
// pressureThresholdValidator checks if PressureThreshold is in range from 5 to 50
|
||||||
func pressureThresholdValidator(fe validator.FieldLevel) bool {
|
func pressureThresholdValidator(fe validator.FieldLevel) bool {
|
||||||
fieldValue := fe.Field().Uint()
|
fieldValue := fe.Field().Float()
|
||||||
return fieldValue >= uint64(pressureThresholdMin) && fieldValue <= uint64(pressureThresholdMax)
|
return fieldValue >= float64(pressureThresholdMin) && fieldValue <= float64(pressureThresholdMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
// deflateThresholdValidator checks if DeflateThreshold is in range from 10 to 70
|
// deflateThresholdValidator checks if DeflateThreshold is in range from 10 to 70
|
||||||
func deflateThresholdValidator(fe validator.FieldLevel) bool {
|
func deflateThresholdValidator(fe validator.FieldLevel) bool {
|
||||||
fieldValue := fe.Field().Uint()
|
fieldValue := fe.Field().Float()
|
||||||
return fieldValue >= uint64(deflateThresholdMin) && fieldValue <= uint64(deflateThresholdMax)
|
return fieldValue >= float64(deflateThresholdMin) && fieldValue <= float64(deflateThresholdMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
func bufferPCTValidator(fe validator.FieldLevel) bool {
|
func bufferPCTValidator(fe validator.FieldLevel) bool {
|
||||||
fieldValue := fe.Field().Uint()
|
fieldValue := fe.Field().Float()
|
||||||
return fieldValue >= uint64(bufferPCTMin) && fieldValue <= uint64(bufferPCTMax)
|
return fieldValue >= float64(bufferPCTMin) && fieldValue <= float64(bufferPCTMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
func guaranteedPCTValidator(fe validator.FieldLevel) bool {
|
func guaranteedPCTValidator(fe validator.FieldLevel) bool {
|
||||||
fieldValue := fe.Field().Uint()
|
fieldValue := fe.Field().Float()
|
||||||
return fieldValue >= uint64(guaranteedPCTMin) && fieldValue <= uint64(guaranteedPCTMax)
|
return fieldValue >= float64(guaranteedPCTMin) && fieldValue <= float64(guaranteedPCTMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
func guaranteedABSMinValidator(fe validator.FieldLevel) bool {
|
func guaranteedABSMinValidator(fe validator.FieldLevel) bool {
|
||||||
@@ -534,18 +534,18 @@ func guaranteedABSMinValidator(fe validator.FieldLevel) bool {
|
|||||||
}
|
}
|
||||||
|
|
||||||
func shrinkThresholdPCTValidator(fe validator.FieldLevel) bool {
|
func shrinkThresholdPCTValidator(fe validator.FieldLevel) bool {
|
||||||
fieldValue := fe.Field().Uint()
|
fieldValue := fe.Field().Float()
|
||||||
return fieldValue >= uint64(shrinkThresholdPCTMin) && fieldValue <= uint64(shrinkThresholdPCTMax)
|
return fieldValue >= float64(shrinkThresholdPCTMin) && fieldValue <= float64(shrinkThresholdPCTMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
func balloonMaxShrinkPCTValidator(fe validator.FieldLevel) bool {
|
func balloonMaxShrinkPCTValidator(fe validator.FieldLevel) bool {
|
||||||
fieldValue := fe.Field().Uint()
|
fieldValue := fe.Field().Float()
|
||||||
return fieldValue >= uint64(balloonMaxShrinkPCTMin) && fieldValue <= uint64(balloonMaxShrinkPCTMax)
|
return fieldValue >= float64(balloonMaxShrinkPCTMin) && fieldValue <= float64(balloonMaxShrinkPCTMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
func balloonMaxGrowPCTValidator(fe validator.FieldLevel) bool {
|
func balloonMaxGrowPCTValidator(fe validator.FieldLevel) bool {
|
||||||
fieldValue := fe.Field().Uint()
|
fieldValue := fe.Field().Float()
|
||||||
return fieldValue >= uint64(balloonMaxGrowPCTMin) && fieldValue <= uint64(balloonMaxGrowPCTMax)
|
return fieldValue >= float64(balloonMaxGrowPCTMin) && fieldValue <= float64(balloonMaxGrowPCTMax)
|
||||||
}
|
}
|
||||||
|
|
||||||
func vmChangeCooldownValidator(fe validator.FieldLevel) bool {
|
func vmChangeCooldownValidator(fe validator.FieldLevel) bool {
|
||||||
@@ -567,3 +567,8 @@ func logLevelValidator(fe validator.FieldLevel) bool {
|
|||||||
fieldValue := fe.Field().String()
|
fieldValue := fe.Field().String()
|
||||||
return IsInSlice(fieldValue, logLevelValues)
|
return IsInSlice(fieldValue, logLevelValues)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func sepTypesValidator(fe validator.FieldLevel) bool {
|
||||||
|
fieldValue := fe.Field().String()
|
||||||
|
return IsInSlice(fieldValue, sepTypesValues)
|
||||||
|
}
|
||||||
|
|||||||
@@ -367,6 +367,12 @@ func errorMessage(fe validator.FieldError) string {
|
|||||||
prefix,
|
prefix,
|
||||||
fe.Field(),
|
fe.Field(),
|
||||||
joinValues(sepTechStatusValues))
|
joinValues(sepTechStatusValues))
|
||||||
|
|
||||||
|
case "sepTypes":
|
||||||
|
return fmt.Sprintf("%s %s must be one of the following: %s",
|
||||||
|
prefix,
|
||||||
|
fe.Field(),
|
||||||
|
joinValues(sepTypesValues))
|
||||||
}
|
}
|
||||||
|
|
||||||
return fe.Error()
|
return fe.Error()
|
||||||
|
|||||||
@@ -398,5 +398,10 @@ func registerAllValidators(validate *validator.Validate) error {
|
|||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
err = validate.RegisterValidation("sepTypes", sepTypesValidator)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ var (
|
|||||||
|
|
||||||
loaderTypeValues = []string{"linux", "windows", "unknown"}
|
loaderTypeValues = []string{"linux", "windows", "unknown"}
|
||||||
|
|
||||||
sepTypeValues = []string{"hitachi", "dorado", "tatlin", "shared", "local", "des", "ustor"}
|
sepTypeValues = []string{"hitachi", "dorado", "tatlin", "shared", "local", "des", "ustor", "aerodisk"}
|
||||||
|
|
||||||
languageValues = []string{"ru", "en"}
|
languageValues = []string{"ru", "en"}
|
||||||
|
|
||||||
@@ -88,6 +88,8 @@ var (
|
|||||||
migrateV2ModeValues = []string{"compute", "disks", "compute_and_disks"}
|
migrateV2ModeValues = []string{"compute", "disks", "compute_and_disks"}
|
||||||
|
|
||||||
logLevelValues = []string{"DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"}
|
logLevelValues = []string{"DEBUG", "INFO", "WARNING", "ERROR", "CRITICAL"}
|
||||||
|
|
||||||
|
sepTypesValues = []string{"DES", "DORADO", "HITACHI", "LOCAL", "SHARED", "TATLIN", "USTOR", "AERODISK"}
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
|
|||||||
@@ -122,6 +122,9 @@ type ItemAudit struct {
|
|||||||
// Persistent disk IDs associated with the operation
|
// Persistent disk IDs associated with the operation
|
||||||
DiskIDs []uint64 `json:"disk_ids"`
|
DiskIDs []uint64 `json:"disk_ids"`
|
||||||
|
|
||||||
|
// VM folder ID
|
||||||
|
VMFolderID uint64 `json:"vmfolder_id"`
|
||||||
|
|
||||||
// API task ID for asynchronous calls
|
// API task ID for asynchronous calls
|
||||||
APITask string `json:"apitask"`
|
APITask string `json:"apitask"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -59,6 +59,14 @@ type ListRequest struct {
|
|||||||
// Required: false
|
// Required: false
|
||||||
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
|
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
|
||||||
|
|
||||||
|
// Sort by account ID
|
||||||
|
// Required: false
|
||||||
|
AccountID uint64 `url:"account_id,omitempty" json:"account_id,omitempty"`
|
||||||
|
|
||||||
|
// Sort by sep type
|
||||||
|
// Required: false
|
||||||
|
SEPType string `url:"sep_type,omitempty" json:"sep_type,omitempty" validate:"omitempty,sepTypes"`
|
||||||
|
|
||||||
// Page number
|
// Page number
|
||||||
// Required: false
|
// Required: false
|
||||||
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
||||||
|
|||||||
@@ -32,6 +32,9 @@ type ItemImage struct {
|
|||||||
// Link to
|
// Link to
|
||||||
LinkTo uint64 `json:"linkTo"`
|
LinkTo uint64 `json:"linkTo"`
|
||||||
|
|
||||||
|
// Links to
|
||||||
|
LinksTo []uint64 `json:"linksTo"`
|
||||||
|
|
||||||
// Name
|
// Name
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
|
|
||||||
@@ -214,4 +217,7 @@ type RecordImage struct {
|
|||||||
|
|
||||||
// Version
|
// Version
|
||||||
Version string `json:"version"`
|
Version string `json:"version"`
|
||||||
|
|
||||||
|
// Real size of the image
|
||||||
|
RealSize uint64 `json:"real_size"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -46,6 +46,12 @@ type ItemLocation struct {
|
|||||||
|
|
||||||
// Are VM Folders enabled
|
// Are VM Folders enabled
|
||||||
VMFoldersEnabled bool `json:"vm_folders_enabled"`
|
VMFoldersEnabled bool `json:"vm_folders_enabled"`
|
||||||
|
|
||||||
|
// SDN Web config
|
||||||
|
SDNWeb SDNWeb `json:"sdn_web"`
|
||||||
|
|
||||||
|
// BVP Web config
|
||||||
|
BVPWeb BVPWeb `json:"bvp_web"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List of locations
|
// List of locations
|
||||||
@@ -56,3 +62,27 @@ type ListLocations struct {
|
|||||||
// Entry count
|
// Entry count
|
||||||
EntryCount uint64 `json:"entryCount"`
|
EntryCount uint64 `json:"entryCount"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// SDN Web config
|
||||||
|
type SDNWeb struct {
|
||||||
|
// Whether the config is enabled
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
|
||||||
|
// URL
|
||||||
|
URL string `json:"url"`
|
||||||
|
|
||||||
|
// Number of the port
|
||||||
|
Port uint64 `json:"port"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BVP Web config
|
||||||
|
type BVPWeb struct {
|
||||||
|
// Whether the config is enabled
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
|
||||||
|
// URL
|
||||||
|
URL string `json:"url"`
|
||||||
|
|
||||||
|
// Number of ther port
|
||||||
|
Port uint64 `json:"port"`
|
||||||
|
}
|
||||||
|
|||||||
@@ -22,6 +22,9 @@ type Resource struct {
|
|||||||
|
|
||||||
// SEPs
|
// SEPs
|
||||||
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
||||||
|
|
||||||
|
// Policies
|
||||||
|
Policies map[string]PolicyUsage `json:"policies"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disk usage
|
// Disk usage
|
||||||
@@ -33,6 +36,21 @@ type DiskUsage struct {
|
|||||||
DiskSizeMax float64 `json:"disksizemax"`
|
DiskSizeMax float64 `json:"disksizemax"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Policy usage
|
||||||
|
type PolicyUsage struct {
|
||||||
|
// Disk size
|
||||||
|
DiskSize float64 `json:"disksize"`
|
||||||
|
|
||||||
|
// Max disk size
|
||||||
|
DiskSizeMax float64 `json:"disksizemax"`
|
||||||
|
|
||||||
|
// Limit
|
||||||
|
Limit float64 `json:"limit"`
|
||||||
|
|
||||||
|
// SEPs
|
||||||
|
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
||||||
|
}
|
||||||
|
|
||||||
// Information about resources
|
// Information about resources
|
||||||
type Resources struct {
|
type Resources struct {
|
||||||
// Current information about resources
|
// Current information about resources
|
||||||
@@ -51,10 +69,31 @@ type ItemResourceConsumption struct {
|
|||||||
Reserved Resource `json:"reserved"`
|
Reserved Resource `json:"reserved"`
|
||||||
|
|
||||||
// Resource limits
|
// Resource limits
|
||||||
ResourceLimits ResourceLimits `json:"resourceLimits"`
|
ResourceLimits ResourceConsumptionLimits `json:"resourceLimits"`
|
||||||
|
|
||||||
// Resource group ID
|
// Resource group ID
|
||||||
RGID uint64 `json:"rgid"`
|
RGID uint64 `json:"id"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Resource limits of resource consumption
|
||||||
|
type ResourceConsumptionLimits struct {
|
||||||
|
// CUC
|
||||||
|
CUC float64 `json:"CU_C"`
|
||||||
|
|
||||||
|
// CUD
|
||||||
|
CUD float64 `json:"CU_D"`
|
||||||
|
|
||||||
|
// CUDM
|
||||||
|
CUDM float64 `json:"CU_DM"`
|
||||||
|
|
||||||
|
// CUI
|
||||||
|
CUI float64 `json:"CU_I"`
|
||||||
|
|
||||||
|
// CUM
|
||||||
|
CUM float64 `json:"CU_M"`
|
||||||
|
|
||||||
|
// GPU units
|
||||||
|
GPUUnits float64 `json:"gpu_units"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type ListResourceConsumption struct {
|
type ListResourceConsumption struct {
|
||||||
@@ -892,4 +931,7 @@ type RecordResourceUsage struct {
|
|||||||
|
|
||||||
// SEPs
|
// SEPs
|
||||||
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
||||||
|
|
||||||
|
// Policies
|
||||||
|
Policies map[string]PolicyUsage `json:"policies"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -844,6 +844,9 @@ type ItemReservation struct {
|
|||||||
// Account ID
|
// Account ID
|
||||||
AccountID uint64 `json:"account_id"`
|
AccountID uint64 `json:"account_id"`
|
||||||
|
|
||||||
|
// Whether reservation is auto assignable
|
||||||
|
AutoAssignable bool `json:"auto_assignable"`
|
||||||
|
|
||||||
// IP
|
// IP
|
||||||
IP string `json:"ip"`
|
IP string `json:"ip"`
|
||||||
|
|
||||||
|
|||||||
@@ -77,6 +77,9 @@ type ItemAudit struct {
|
|||||||
// Persistent disk IDs associated with the operation
|
// Persistent disk IDs associated with the operation
|
||||||
DiskIDs []uint64 `json:"disk_ids"`
|
DiskIDs []uint64 `json:"disk_ids"`
|
||||||
|
|
||||||
|
// VM folder ID
|
||||||
|
VMFolderID uint64 `json:"vmfolder_id"`
|
||||||
|
|
||||||
// API task ID for asynchronous calls
|
// API task ID for asynchronous calls
|
||||||
APITask string `json:"apitask"`
|
APITask string `json:"apitask"`
|
||||||
}
|
}
|
||||||
@@ -146,6 +149,9 @@ type RecordAudit struct {
|
|||||||
|
|
||||||
// Compute ID
|
// Compute ID
|
||||||
ComputeID uint64 `json:"compute_id"`
|
ComputeID uint64 `json:"compute_id"`
|
||||||
|
|
||||||
|
// VM folder ID
|
||||||
|
VMFolderID uint64 `json:"vmfolder_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List of Linked Jobs
|
// List of Linked Jobs
|
||||||
|
|||||||
@@ -18,12 +18,12 @@ type StartRequest struct {
|
|||||||
// Memory pressure threshold (%)
|
// Memory pressure threshold (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 20
|
// Default: 20
|
||||||
PressureThreshold uint64 `url:"pressure_threshold,omitempty" json:"pressure_threshold,omitempty" validate:"omitempty,pressureThreshold"`
|
PressureThreshold float64 `url:"pressure_threshold,omitempty" json:"pressure_threshold,omitempty" validate:"omitempty,pressureThreshold"`
|
||||||
|
|
||||||
// Deflate threshold (%)
|
// Deflate threshold (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 30
|
// Default: 30
|
||||||
DeflateThreshold uint64 `url:"deflate_threshold,omitempty" json:"deflate_threshold,omitempty" validate:"omitempty,deflateThreshold"`
|
DeflateThreshold float64 `url:"deflate_threshold,omitempty" json:"deflate_threshold,omitempty" validate:"omitempty,deflateThreshold"`
|
||||||
|
|
||||||
// Host reserved memory
|
// Host reserved memory
|
||||||
// Required: false
|
// Required: false
|
||||||
@@ -33,12 +33,12 @@ type StartRequest struct {
|
|||||||
// Buffer percentage (%)
|
// Buffer percentage (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 20
|
// Default: 20
|
||||||
BufferPCT uint64 `url:"buffer_pct,omitempty" json:"buffer_pct,omitempty" validate:"omitempty,bufferPCT"`
|
BufferPCT float64 `url:"buffer_pct,omitempty" json:"buffer_pct,omitempty" validate:"omitempty,bufferPCT"`
|
||||||
|
|
||||||
// Guaranteed memory percentage (%)
|
// Guaranteed memory percentage (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 25
|
// Default: 25
|
||||||
GuaranteedPCT uint64 `url:"guaranteed_pct,omitempty" json:"guaranteed_pct,omitempty" validate:"omitempty,guaranteedPCT"`
|
GuaranteedPCT float64 `url:"guaranteed_pct,omitempty" json:"guaranteed_pct,omitempty" validate:"omitempty,guaranteedPCT"`
|
||||||
|
|
||||||
// Absolute minimum guaranteed memory (MB)
|
// Absolute minimum guaranteed memory (MB)
|
||||||
// Required: false
|
// Required: false
|
||||||
@@ -48,17 +48,17 @@ type StartRequest struct {
|
|||||||
// Shrink threshold percentage (%)
|
// Shrink threshold percentage (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 50
|
// Default: 50
|
||||||
ShrinkThresholdPCT uint64 `url:"shrink_threshold_pct,omitempty" json:"shrink_threshold_pct,omitempty" validate:"omitempty,shrinkThresholdPCT"`
|
ShrinkThresholdPCT float64 `url:"shrink_threshold_pct,omitempty" json:"shrink_threshold_pct,omitempty" validate:"omitempty,shrinkThresholdPCT"`
|
||||||
|
|
||||||
// Max shrink percentage per cycle (%)
|
// Max shrink percentage per cycle (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 10
|
// Default: 10
|
||||||
BalloonMaxShrinkPCT uint64 `url:"balloon_max_shrink_pct,omitempty" json:"balloon_max_shrink_pct,omitempty" validate:"omitempty,balloonMaxShrinkPCT"`
|
BalloonMaxShrinkPCT float64 `url:"balloon_max_shrink_pct,omitempty" json:"balloon_max_shrink_pct,omitempty" validate:"omitempty,balloonMaxShrinkPCT"`
|
||||||
|
|
||||||
// Max grow percentage per cycle (%)
|
// Max grow percentage per cycle (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 10
|
// Default: 10
|
||||||
BalloonMaxGrowPCT uint64 `url:"balloon_max_grow_pct,omitempty" json:"balloon_max_grow_pct,omitempty" validate:"omitempty,balloonMaxGrowPCT"`
|
BalloonMaxGrowPCT float64 `url:"balloon_max_grow_pct,omitempty" json:"balloon_max_grow_pct,omitempty" validate:"omitempty,balloonMaxGrowPCT"`
|
||||||
|
|
||||||
// VM change cooldown (seconds)
|
// VM change cooldown (seconds)
|
||||||
// Required: false
|
// Required: false
|
||||||
|
|||||||
@@ -18,12 +18,12 @@ type UpdateRequest struct {
|
|||||||
// Memory pressure threshold (%)
|
// Memory pressure threshold (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 20
|
// Default: 20
|
||||||
PressureThreshold uint64 `url:"pressure_threshold,omitempty" json:"pressure_threshold,omitempty" validate:"omitempty,pressureThreshold"`
|
PressureThreshold float64 `url:"pressure_threshold,omitempty" json:"pressure_threshold,omitempty" validate:"omitempty,pressureThreshold"`
|
||||||
|
|
||||||
// Deflate threshold (%)
|
// Deflate threshold (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 30
|
// Default: 30
|
||||||
DeflateThreshold uint64 `url:"deflate_threshold,omitempty" json:"deflate_threshold,omitempty" validate:"omitempty,deflateThreshold"`
|
DeflateThreshold float64 `url:"deflate_threshold,omitempty" json:"deflate_threshold,omitempty" validate:"omitempty,deflateThreshold"`
|
||||||
|
|
||||||
// Host reserved memory
|
// Host reserved memory
|
||||||
// Required: false
|
// Required: false
|
||||||
@@ -33,12 +33,12 @@ type UpdateRequest struct {
|
|||||||
// Buffer percentage (%)
|
// Buffer percentage (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 20
|
// Default: 20
|
||||||
BufferPCT uint64 `url:"buffer_pct,omitempty" json:"buffer_pct,omitempty" validate:"omitempty,bufferPCT"`
|
BufferPCT float64 `url:"buffer_pct,omitempty" json:"buffer_pct,omitempty" validate:"omitempty,bufferPCT"`
|
||||||
|
|
||||||
// Guaranteed memory percentage (%)
|
// Guaranteed memory percentage (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 25
|
// Default: 25
|
||||||
GuaranteedPCT uint64 `url:"guaranteed_pct,omitempty" json:"guaranteed_pct,omitempty" validate:"omitempty,guaranteedPCT"`
|
GuaranteedPCT float64 `url:"guaranteed_pct,omitempty" json:"guaranteed_pct,omitempty" validate:"omitempty,guaranteedPCT"`
|
||||||
|
|
||||||
// Absolute minimum guaranteed memory (MB)
|
// Absolute minimum guaranteed memory (MB)
|
||||||
// Required: false
|
// Required: false
|
||||||
@@ -48,17 +48,17 @@ type UpdateRequest struct {
|
|||||||
// Shrink threshold percentage (%)
|
// Shrink threshold percentage (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 50
|
// Default: 50
|
||||||
ShrinkThresholdPCT uint64 `url:"shrink_threshold_pct,omitempty" json:"shrink_threshold_pct,omitempty" validate:"omitempty,shrinkThresholdPCT"`
|
ShrinkThresholdPCT float64 `url:"shrink_threshold_pct,omitempty" json:"shrink_threshold_pct,omitempty" validate:"omitempty,shrinkThresholdPCT"`
|
||||||
|
|
||||||
// Max shrink percentage per cycle (%)
|
// Max shrink percentage per cycle (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 10
|
// Default: 10
|
||||||
BalloonMaxShrinkPCT uint64 `url:"balloon_max_shrink_pct,omitempty" json:"balloon_max_shrink_pct,omitempty" validate:"omitempty,balloonMaxShrinkPCT"`
|
BalloonMaxShrinkPCT float64 `url:"balloon_max_shrink_pct,omitempty" json:"balloon_max_shrink_pct,omitempty" validate:"omitempty,balloonMaxShrinkPCT"`
|
||||||
|
|
||||||
// Max grow percentage per cycle (%)
|
// Max grow percentage per cycle (%)
|
||||||
// Required: false
|
// Required: false
|
||||||
// Default: 10
|
// Default: 10
|
||||||
BalloonMaxGrowPCT uint64 `url:"balloon_max_grow_pct,omitempty" json:"balloon_max_grow_pct,omitempty" validate:"omitempty,balloonMaxGrowPCT"`
|
BalloonMaxGrowPCT float64 `url:"balloon_max_grow_pct,omitempty" json:"balloon_max_grow_pct,omitempty" validate:"omitempty,balloonMaxGrowPCT"`
|
||||||
|
|
||||||
// VM change cooldown (seconds)
|
// VM change cooldown (seconds)
|
||||||
// Required: false
|
// Required: false
|
||||||
|
|||||||
64
pkg/cloudbroker/compute/mass_pin_to_node.go
Normal file
64
pkg/cloudbroker/compute/mass_pin_to_node.go
Normal file
@@ -0,0 +1,64 @@
|
|||||||
|
package compute
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
)
|
||||||
|
|
||||||
|
type Pin struct {
|
||||||
|
// ID of the compute instance
|
||||||
|
// Required: true
|
||||||
|
ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
|
||||||
|
|
||||||
|
// Target node ID. Required for stopped computes.
|
||||||
|
// For started computes it is optional;
|
||||||
|
// if it differs from the current node, allow_migration must be true,
|
||||||
|
// otherwise the compute is reported with migration_not_allowed error.
|
||||||
|
// Required: false
|
||||||
|
NodeID uint64 `url:"node_id,omitempty" json:"node_id,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// MassPinToNodeRequest to pin multiple computes to nodes in a single call
|
||||||
|
type MassPinToNodeRequest struct {
|
||||||
|
// Computes to pin, at most 200 items per request
|
||||||
|
// Required: true
|
||||||
|
Pins []Pin `url:"pins" json:"pins" validate:"required,min=1,max=200,dive"`
|
||||||
|
|
||||||
|
// Allow live migration of started computes to the requested node_id
|
||||||
|
// Default: false
|
||||||
|
// Required: false
|
||||||
|
AllowMigration interface{} `url:"allow_migration,omitempty" json:"allow_migration,omitempty" validate:"omitempty,isBool"`
|
||||||
|
|
||||||
|
// Start compute after node exits from MAINTENANCE state
|
||||||
|
// Default: false
|
||||||
|
// Required: false
|
||||||
|
AutoStart interface{} `url:"auto_start,omitempty" json:"auto_start,omitempty" validate:"omitempty,isBool"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// MassPinToNode pins multiple computes to nodes in a single call
|
||||||
|
func (c Compute) MassPinToNode(ctx context.Context, req MassPinToNodeRequest) (string, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return "", validators.ValidationErrors(validators.GetErrors(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/compute/mass_pin_to_node"
|
||||||
|
|
||||||
|
res, err := c.client.DecortApiCallCtype(ctx, http.MethodPost, url, constants.MIMEJSON, req)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
var resp string
|
||||||
|
|
||||||
|
err = json.Unmarshal(res, &resp)
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return resp, nil
|
||||||
|
}
|
||||||
@@ -120,6 +120,12 @@ type RecordGrid struct {
|
|||||||
|
|
||||||
// Whether VM folders are enabled
|
// Whether VM folders are enabled
|
||||||
VMFoldersEnabled bool `json:"vm_folders_enabled"`
|
VMFoldersEnabled bool `json:"vm_folders_enabled"`
|
||||||
|
|
||||||
|
// SDN Web config
|
||||||
|
SDNWeb SDNWeb `json:"sdn_web"`
|
||||||
|
|
||||||
|
// BVP Web config
|
||||||
|
BVPWeb BVPWeb `json:"bvp_web"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Information about grid
|
// Information about grid
|
||||||
@@ -171,6 +177,36 @@ type ItemGridList struct {
|
|||||||
|
|
||||||
// Whether VM folders are enabled
|
// Whether VM folders are enabled
|
||||||
VMFoldersEnabled bool `json:"vm_folders_enabled"`
|
VMFoldersEnabled bool `json:"vm_folders_enabled"`
|
||||||
|
|
||||||
|
// SDN Web config
|
||||||
|
SDNWeb SDNWeb `json:"sdn_web"`
|
||||||
|
|
||||||
|
// BVP Web config
|
||||||
|
BVPWeb BVPWeb `json:"bvp_web"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// SDN Web config
|
||||||
|
type SDNWeb struct {
|
||||||
|
// Whether the config is enabled
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
|
||||||
|
// URL
|
||||||
|
URL string `json:"url"`
|
||||||
|
|
||||||
|
// Number of the port
|
||||||
|
Port uint64 `json:"port"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// BVP Web config
|
||||||
|
type BVPWeb struct {
|
||||||
|
// Whether the config is enabled
|
||||||
|
Enabled bool `json:"enabled"`
|
||||||
|
|
||||||
|
// URL
|
||||||
|
URL string `json:"url"`
|
||||||
|
|
||||||
|
// Number of the port
|
||||||
|
Port uint64 `json:"port"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List Grids
|
// List Grids
|
||||||
|
|||||||
@@ -59,6 +59,14 @@ type ListRequest struct {
|
|||||||
// Required: false
|
// Required: false
|
||||||
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
|
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty" validate:"omitempty,sortBy"`
|
||||||
|
|
||||||
|
// Sort by account ID
|
||||||
|
// Required: false
|
||||||
|
AccountID uint64 `url:"account_id,omitempty" json:"account_id,omitempty"`
|
||||||
|
|
||||||
|
// Sort by sep type
|
||||||
|
// Required: false
|
||||||
|
SEPType string `url:"sep_type,omitempty" json:"sep_type,omitempty" validate:"omitempty,sepTypes"`
|
||||||
|
|
||||||
// Page number
|
// Page number
|
||||||
// Required: false
|
// Required: false
|
||||||
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
||||||
|
|||||||
@@ -89,6 +89,9 @@ type RecordImage struct {
|
|||||||
// Purge attempts
|
// Purge attempts
|
||||||
PurgeAttempts uint64 `json:"purgeAttempts"`
|
PurgeAttempts uint64 `json:"purgeAttempts"`
|
||||||
|
|
||||||
|
// Real size if the image
|
||||||
|
RealSize uint64 `json:"real_size"`
|
||||||
|
|
||||||
// Reference ID
|
// Reference ID
|
||||||
ReferenceID string `json:"referenceId"`
|
ReferenceID string `json:"referenceId"`
|
||||||
|
|
||||||
@@ -277,6 +280,15 @@ type ItemImage struct {
|
|||||||
|
|
||||||
// Virtual
|
// Virtual
|
||||||
Virtual bool `json:"virtual"`
|
Virtual bool `json:"virtual"`
|
||||||
|
|
||||||
|
// Real size of the image
|
||||||
|
RealSize uint64 `json:"real_size"`
|
||||||
|
|
||||||
|
// CKey
|
||||||
|
CKey string `json:"_ckey"`
|
||||||
|
|
||||||
|
// Meta info
|
||||||
|
Meta interface{} `json:"_meta"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List images
|
// List images
|
||||||
|
|||||||
@@ -43,6 +43,9 @@ type Reservation struct {
|
|||||||
|
|
||||||
// SEPs
|
// SEPs
|
||||||
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
||||||
|
|
||||||
|
// Policies
|
||||||
|
Policies map[string]PolicyUsage `json:"policies"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Disk usage
|
// Disk usage
|
||||||
@@ -54,6 +57,21 @@ type DiskUsage struct {
|
|||||||
DiskSizeMax float64 `json:"disksizemax"`
|
DiskSizeMax float64 `json:"disksizemax"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Policy usage
|
||||||
|
type PolicyUsage struct {
|
||||||
|
// Disk size
|
||||||
|
DiskSize float64 `json:"disksize"`
|
||||||
|
|
||||||
|
// Max disk size
|
||||||
|
DiskSizeMax float64 `json:"disksizemax"`
|
||||||
|
|
||||||
|
// Limit
|
||||||
|
Limit float64 `json:"limit"`
|
||||||
|
|
||||||
|
// SEPs
|
||||||
|
SEPs map[string]map[string]DiskUsage `json:"seps"`
|
||||||
|
}
|
||||||
|
|
||||||
// Resources usage information
|
// Resources usage information
|
||||||
type ItemResourceConsumption struct {
|
type ItemResourceConsumption struct {
|
||||||
// Current information
|
// Current information
|
||||||
@@ -63,12 +81,33 @@ type ItemResourceConsumption struct {
|
|||||||
Reserved Reservation `json:"Reserved"`
|
Reserved Reservation `json:"Reserved"`
|
||||||
|
|
||||||
// Resource limits
|
// Resource limits
|
||||||
ResourceLimits ResourceLimits `json:"resourceLimits"`
|
ResourceLimits ResourceConsumptionLimits `json:"resourceLimits"`
|
||||||
|
|
||||||
// Resource group ID
|
// Resource group ID
|
||||||
RGID uint64 `json:"id"`
|
RGID uint64 `json:"id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Resource limits of resource consumption
|
||||||
|
type ResourceConsumptionLimits struct {
|
||||||
|
// CUC
|
||||||
|
CUC float64 `json:"CU_C"`
|
||||||
|
|
||||||
|
// CUD
|
||||||
|
CuD float64 `json:"CU_D"`
|
||||||
|
|
||||||
|
// CUDM
|
||||||
|
CUDM float64 `json:"CU_DM"`
|
||||||
|
|
||||||
|
// CUI
|
||||||
|
CUI float64 `json:"CU_I"`
|
||||||
|
|
||||||
|
// CUM
|
||||||
|
CUM float64 `json:"CU_M"`
|
||||||
|
|
||||||
|
// GPU units
|
||||||
|
GPUUnits float64 `json:"gpu_units"`
|
||||||
|
}
|
||||||
|
|
||||||
type ListResourceConsumption struct {
|
type ListResourceConsumption struct {
|
||||||
// Data
|
// Data
|
||||||
Data []ItemResourceConsumption `json:"data"`
|
Data []ItemResourceConsumption `json:"data"`
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ type AddPoolRequest struct {
|
|||||||
SEPID uint64 `url:"sep_id" json:"sep_id" validate:"required"`
|
SEPID uint64 `url:"sep_id" json:"sep_id" validate:"required"`
|
||||||
|
|
||||||
// Pool structure which contains fields such as "name", "usage_limit", "types", "system", "accessAccountIds", "accessResGroupIds". Added fields for other pool types: Des, Ovs - "uris" list of "ip, port".
|
// Pool structure which contains fields such as "name", "usage_limit", "types", "system", "accessAccountIds", "accessResGroupIds". Added fields for other pool types: Des, Ovs - "uris" list of "ip, port".
|
||||||
// Dorado, Tatlin - "vdisk_discard". Hitachi - "id", "snapshotable", "snapshot_pool_id", "minLdevId", "maxLdevId", "clone_technology", "vdisk_discard". Shared - "description", "wwns", "allocate_type", "stripes", "metadata_size", "metadatatalun", "vdisk_discard" Local - "description", "node_consumer", "block_disk".
|
// Dorado, Tatlin - "vdisk_discard". Hitachi - "id", "snapshotable", "snapshot_pool_id", "minLdevId", "maxLdevId", "clone_technology", "vdisk_discard". Shared - "description", "wwns", "allocate_type", "stripes", "metadata_size", "metadatatalun", "vdisk_discard" Local - "description", "node_consumer", "block_disk", Aerodisk – "provision", "clone_technology", "disk_block_size", "read_only"..
|
||||||
// Required: true
|
// Required: true
|
||||||
Pool string `url:"pool" json:"pool" validate:"required"`
|
Pool string `url:"pool" json:"pool" validate:"required"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -713,6 +713,7 @@ func getRequestsMapCloudbroker() map[string]interface{} {
|
|||||||
"/restmachine/cloudbroker/compute/migrate_v2_abort": compute_cb.MigrateV2AbortRequest{},
|
"/restmachine/cloudbroker/compute/migrate_v2_abort": compute_cb.MigrateV2AbortRequest{},
|
||||||
"/restmachine/cloudbroker/compute/migrate_v2_cleanup": compute_cb.MigrateV2CleanupRequest{},
|
"/restmachine/cloudbroker/compute/migrate_v2_cleanup": compute_cb.MigrateV2CleanupRequest{},
|
||||||
"/restmachine/cloudbroker/compute/migrate_v2": compute_cb.MigrateV2Request{},
|
"/restmachine/cloudbroker/compute/migrate_v2": compute_cb.MigrateV2Request{},
|
||||||
|
"/restmachine/cloudbroker/compute/mass_pin_to_node": compute_cb.MassPinToNodeRequest{},
|
||||||
|
|
||||||
// disks
|
// disks
|
||||||
"/restmachine/cloudbroker/disks/change_disk_storage_policy": disks_cb.ChangeDiskStoragePolicyRequest{},
|
"/restmachine/cloudbroker/disks/change_disk_storage_policy": disks_cb.ChangeDiskStoragePolicyRequest{},
|
||||||
|
|||||||
Reference in New Issue
Block a user