v16.2.0
This commit is contained in:
93
CHANGELOG.md
93
CHANGELOG.md
@@ -1,4 +1,4 @@
|
|||||||
## Version 16.1.0
|
## Version 16.2.0
|
||||||
|
|
||||||
|
|
||||||
### Deprecated
|
### Deprecated
|
||||||
@@ -21,97 +21,40 @@
|
|||||||
|
|
||||||
### Добавлено
|
### Добавлено
|
||||||
|
|
||||||
#### account
|
#### audit
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1007 | Структура запроса `AddACLAccessRequest` и метод `AddACLAccess` в cloudapi/account и в cloudbroker/account |
|
| BGOS-1025 | Вычисляемое поле `PublicSessionID` в структуры ответа `ItemAudit` и `RecordAudit` в cloudbroker/audit и cloudapi/audit |
|
||||||
| BGOS-1007 | Структура запроса `DelACLAccessRequest` и метод `DelACLAccess` в cloudapi/account и в cloudbroker/account |
|
| BGOS-1025 | Опциональное поле `PublicSessionID` в структуру запроса `ListRequest` в cloudbroker/audit и cloudapi/audit |
|
||||||
| BGOS-1007 | Структура запроса `UpdateACLAccessRequest` и метод `UpdateACLAccess` в cloudapi/account и в cloudbroker/account |
|
|
||||||
|
|
||||||
#### backup
|
#### grid
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1012 | Методы `AbortDisksBackup`, `BackupDisksWithSpeed`, `Info` и `SetBackupSpeed` в cloudbroker/backup |
|
| BGOS-1028 | Вычисляемое поле `Budget` в структуры ответа `ItemGridList` и `RecordGrid` в cloudbroker/grid |
|
||||||
| BGOS-1012 | Структуры ответов `ListDisksWithSpeed` и `TotalBackupsInfo` в cloudbroker/backup |
|
|
||||||
| BGOS-1018 | Опциональное поле `Speed` в структуры запроса `CreateDiskBackupRequest` и `Disk` в cloudbroker/backup |
|
|
||||||
|
|
||||||
|
#### vins
|
||||||
#### compute
|
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1009 | Структура запроса `AddACLAccessRequest` и метод `AddACLAccess` в cloudapi/compute и в cloudbroker/compute |
|
| BGOS-1027 | Вычисляемое поле `QoSPolicies` в структуру ответа `ItemVNFInterface` в cloudbroker/vins и cloudapi/vins |
|
||||||
| BGOS-1009 | Структура запроса `DeleteACLAccessRequest` и метод `DeleteACLAccess` в cloudapi/compute и в cloudbroker/compute |
|
|
||||||
| BGOS-1009 | Структура запроса `UpdateACLAccessRequest` и метод `UpdateACLAccess` в cloudapi/compute и в cloudbroker/compute |
|
|
||||||
| BGOS-1009 | Структура запроса `GetACLAccessRequest` и метод `GetACLAccess` в cloudapi/compute и в cloudbroker/compute |
|
|
||||||
| BGOS-1014 | Вычисляемое поле `MemoryBalloonMode` в структуры ответа `ItemCompute` и `RecordCompute` в cloudapi/compute |
|
|
||||||
| BGOS-1014 | Вычисляемое поле `MemoryBalloonMode` в структуры ответа `InfoCompute` и `RecordCompute` в cloudbroker/compute |
|
|
||||||
| BGOS-1014 | Опциональное поле `MemoryBalloonMode` в структуру запроса `UpdateRequest` в cloudbroker/compute и cloudapi/compute |
|
|
||||||
| BGOS-1016 | Вычисляемое поле `ProfileName` в структуру ответа `ItemVGPU` в cloudbroker/compute и cloudapi/compute |
|
|
||||||
| BGOS-1019 | Вычисляемое поле `QoSPolicies` в структуру ответа `ItemShadowComputeInterface` в cloudbroker/compute |
|
|
||||||
|
|
||||||
#### disks
|
#### session
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1015 | Методы `DeleteAsync`, `DeleteDisksAsync`, `LimitIOAsync`, `RenameAsync`, `ReplicateAsync`, `ReplicationResumeAsync`, `ReplicationReverseAsync`, `ReplicationStartAsync`, `ReplicationStopAsync`, `ReplicationSuspendAsync`, `Resize2Async`, `RestoreAsync`, `ShareAsync`, `UnshareAsync`, `SnapshotDeleteAsync`, `SnapshotRollbackAsync`, `ChangeDiskStoragePolicyAsync` в cloudapi/disks |
|
| BGOS-1026 | Группа ручек cloudbroker/session |
|
||||||
| BGOS-1015 | Методы `DeleteAsync`, `DeleteDisksAsync`, `DepresentAsync`, `LimitIOAsync`, `MigrateAbortAsync`, `PresentAsync`, `RenameAsync`, `ReplicateAsync`, `ReplicationResumeAsync`, `ReplicationReverseAsync`, `ReplicationStartAsync`, `ReplicationStopAsync`, `ReplicationSuspendAsync`, `Resize2Async`, `RestoreAsync`, `ShareAsync`, `UnshareAsync`, `SnapshotDeleteAsync`, `SnapshotRollbackAsync`, `ChangeDiskStoragePolicyAsync`, `UpdateAsync` в cloudbroker/disks |
|
|
||||||
|
|
||||||
#### extnet
|
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-1013 | Опциональное поле `AutoAssignable` в структуру запроса `AddReserveIPRequest` в cloudbroker/extnet |
|
|
||||||
| BGOS-1013 | Опциональное поле `AutoAssignable` в структуру запроса `GetReservedIP` в cloudbroker/extnet и cloudapi/extnet |
|
|
||||||
| BGOS-1013 | Вычисляемое поле `AutoAssignable` в структуру ответа `Reservations` в cloudbroker/extnet и cloudapi/extnet |
|
|
||||||
|
|
||||||
#### kvmx86
|
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-1014 | Опциональное поле `MemoryBalloonMode` в структуры запроса `CreateRequest` и `CreateBlankRequest` в cloudapi/kvmx86 |
|
|
||||||
| BGOS-1014 | Опциональное поле `MemoryBalloonMode` в структуры запроса `CreateRequest`, `CreateBlankRequest` и `MassCreateRequest` в cloudbroker/kvmx86 |
|
|
||||||
|
|
||||||
#### node
|
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-1020 | Опциональное поле `Mode` в структуру запроса `PCIDeviceDriverToKernelRequest` в cloudbroker/node |
|
|
||||||
|
|
||||||
#### pcidevice
|
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-990 | Опциональное поле `AccountID` в структуру запроса `ListRequest` в cloudapi/pcidevice и в структуры запроса `CreateRequest` и `ListRequest` в cloudbroker/pcidevice |
|
|
||||||
| BGOS-990 | Вычисляемое поле `AccountID` в структуру ответа `ItemPCIDevice` в cloudapi/pcidevice и в структуру ответа `ItemPCIDevice` в cloudbroker/pcidevice |
|
|
||||||
| BGOS-990 | Метод `AccessGrant` и структура запроса `AccessGrantRequest` в cloudbroker/pcidevice |
|
|
||||||
| BGOS-990 | Метод `AccessRevoke` и структура запроса `AccessRevokeRequest` в cloudbroker/pcidevice |
|
|
||||||
|
|
||||||
#### rg
|
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-1008 | Структура запроса `AddACLAccessRequest` и метод `AddACLAccess` в cloudapi/rg и в cloudbroker/rg |
|
|
||||||
| BGOS-1008 | Структура запроса `DeleteACLAccessRequest` и метод `DeleteACLAccess` в cloudapi/rg и в cloudbroker/rg |
|
|
||||||
| BGOS-1008 | Структура запроса `UpdateACLAccessRequest` и метод `UpdateACLAccess` в cloudapi/rg и в cloudbroker/rg |
|
|
||||||
| BGOS-1008 | Структура запроса `GetACLAccessRequest` и метод `GetACLAccess` в cloudapi/rg и в cloudbroker/rg |
|
|
||||||
|
|
||||||
|
|
||||||
#### vgpu
|
### Изменено
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-1011 | Вычисляемое поле `ProfileName` в структуру ответа `ItemVGPU` в cloudbroker/vgpu и cloudapi/vgpu |
|
|
||||||
|
|
||||||
|
|
||||||
### Удалено
|
|
||||||
|
|
||||||
#### account
|
|
||||||
| Идентификатор задачи | Описание |
|
|
||||||
| --- | --- |
|
|
||||||
| BGOS-1021 | Вычисляемое поле `CanBeDeleted` из структуры ответа `ListRecordACL` в cloudapi/account |
|
|
||||||
|
|
||||||
#### network qos policy
|
#### network qos policy
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-1017 | Вычисляемые поля `CreatedAt`, `UpdatedAt`, `CreatedBy` и `UpdatedBy` из структур ответа `ItemQoSPolicy` и `RecordQoSPolicy` в cloudapi/qospolicy и cloudbroker/qospolicy |
|
| BGOS-1030 | Тип вычисляемых полей `PCPTag` и `DSCPValue` с `uint64` на `*uint64` в структуре ответа `Rule` в cloudapi/qospolicy и cloudbroker/qospolicy |
|
||||||
| BGOS-1017 | Методы `FilterByCreatedBy` и `FilterByUpdatedBy` из cloudapi/qospolicy и cloudbroker/qospolicy |
|
| BGOS-1030 | Тип опциональных полей `Name` и `Description` с `string` на `*string` в структуре запроса `UpdateRequest` в cloudapi/qospolicy и cloudbroker/qospolicy |
|
||||||
| BGOS-1017 | Методы `SortByCreatedAt` и `SortByUpdatedAt` из cloudapi/qospolicy и cloudbroker/qospolicy |
|
|
||||||
|
|
||||||
#### pcidevice
|
|
||||||
|
### Удалено
|
||||||
|
|
||||||
|
#### compute
|
||||||
| Идентификатор задачи | Описание |
|
| Идентификатор задачи | Описание |
|
||||||
| --- | --- |
|
| --- | --- |
|
||||||
| BGOS-990 | Опциональное поле `RGID` из структуры запроса `ListRequest` в cloudapi/pcidevice и из структур запроса `CreateRequest` и `ListRequest` в cloudbroker/pcidevice |
|
| BGOS-1029 | Опциональное поле `Type` из структуры запроса `ListVGPURequest` в cloudbroker/compute и cloudapi/compute |
|
||||||
| BGOS-990 | Вычисляемое поле `RGID` из структуры ответа `ItemPCIDevice` в cloudapi/pcidevice и из структуры ответа `ItemPCIDevice` в cloudbroker/pcidevice |
|
|
||||||
|
|||||||
79
README.md
79
README.md
@@ -159,6 +159,7 @@ go get -u repository.basistech.ru/BASIS/dynamix-golang-sdk/v16
|
|||||||
- `RG` - управление ресурсными группами аккаунта;
|
- `RG` - управление ресурсными группами аккаунта;
|
||||||
- `Security group` – управление группами безопасности;
|
- `Security group` – управление группами безопасности;
|
||||||
- `SEP` - управление storage endpoint (sep);
|
- `SEP` - управление storage endpoint (sep);
|
||||||
|
- `Session` - получение информации о сессиях;
|
||||||
- `Storage policy` – управление политиками хранения;
|
- `Storage policy` – управление политиками хранения;
|
||||||
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
|
- `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера);
|
||||||
- `Trunk` - управление транковыми портами;
|
- `Trunk` - управление транковыми портами;
|
||||||
@@ -369,6 +370,7 @@ func main() {
|
|||||||
- `pkg/cloudbroker/rg` - для `RG`
|
- `pkg/cloudbroker/rg` - для `RG`
|
||||||
- `pkg/cloudbroker/secgroup` - для `Security group`
|
- `pkg/cloudbroker/secgroup` - для `Security group`
|
||||||
- `pkg/cloudbroker/sep` - для `SEP`
|
- `pkg/cloudbroker/sep` - для `SEP`
|
||||||
|
- `pkg/cloudbroker/session` - для `Session`
|
||||||
- `pkg/cloudbroker/stpolicy` - для `Storage policy`
|
- `pkg/cloudbroker/stpolicy` - для `Storage policy`
|
||||||
- `pkg/cloudbroker/tasks` - для `Tasks`
|
- `pkg/cloudbroker/tasks` - для `Tasks`
|
||||||
- `pkg/cloudbroker/trunk` - для `Trunk`
|
- `pkg/cloudbroker/trunk` - для `Trunk`
|
||||||
@@ -377,7 +379,7 @@ func main() {
|
|||||||
- `pkg/cloudbroker/vfpool` - для `VFPool`
|
- `pkg/cloudbroker/vfpool` - для `VFPool`
|
||||||
- `pkg/cloudbroker/vins` - для `VINS`
|
- `pkg/cloudbroker/vins` - для `VINS`
|
||||||
- `pkg/cloudbroker/zone` - для `Zone`
|
- `pkg/cloudbroker/zone` - для `Zone`
|
||||||
- **sdn**:
|
- **sdn**:
|
||||||
- `pkg/sdn/acsgroups` - для `Access groups`
|
- `pkg/sdn/acsgroups` - для `Access groups`
|
||||||
- `pkg/sdn/adrspools` - для `Address pool`
|
- `pkg/sdn/adrspools` - для `Address pool`
|
||||||
- `pkg/sdn/defsecpolicies` - для `DefaultSecurityPolicies`
|
- `pkg/sdn/defsecpolicies` - для `DefaultSecurityPolicies`
|
||||||
@@ -469,7 +471,7 @@ type CreateRequest struct {
|
|||||||
|
|
||||||
// Node ID
|
// Node ID
|
||||||
// Required: false
|
// Required: false
|
||||||
NodeID uint64 `url:"nodeId,omitempty" json:"nodeId,omitempty"`
|
NodeID uint64 `url:"nodeId,omitempty" json:"nodeId,omitempty"`
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
@@ -572,6 +574,7 @@ func main() {
|
|||||||
- `.RG()` - для работы с `RG`
|
- `.RG()` - для работы с `RG`
|
||||||
- `.SecurityGroup()` - для работы с `Security Group`
|
- `.SecurityGroup()` - для работы с `Security Group`
|
||||||
- `.SEP()` - для работы с `SEP`
|
- `.SEP()` - для работы с `SEP`
|
||||||
|
- `.Session()` - для работы с `Session`
|
||||||
- `.StPolicy()` - для работы с `Storage Policy`
|
- `.StPolicy()` - для работы с `Storage Policy`
|
||||||
- `.Tasks()` - для работы с `Tasks`
|
- `.Tasks()` - для работы с `Tasks`
|
||||||
- `.Trunk()` - для работы с `Trunk`
|
- `.Trunk()` - для работы с `Trunk`
|
||||||
@@ -581,7 +584,7 @@ func main() {
|
|||||||
- `.VINS()` - для работы с `VINS`
|
- `.VINS()` - для работы с `VINS`
|
||||||
- `.Zone()` - для работы с `Zone`
|
- `.Zone()` - для работы с `Zone`
|
||||||
|
|
||||||
Доступные методы для `.SDN()`:
|
Доступные методы для `.SDN()`:
|
||||||
|
|
||||||
- `.AccessGroup()` - для работы с `Access group`
|
- `.AccessGroup()` - для работы с `Access group`
|
||||||
- `.AddressPool()` - для работы с `Addres pool`
|
- `.AddressPool()` - для работы с `Addres pool`
|
||||||
@@ -954,7 +957,7 @@ func main() {
|
|||||||
- ToString(): строковое представление результата выполнения задачи
|
- ToString(): строковое представление результата выполнения задачи
|
||||||
- ID() и Name(): получение ID и имени созданного в результате выполнения задачи ресурса
|
- ID() и Name(): получение ID и имени созданного в результате выполнения задачи ресурса
|
||||||
- ToMaps(): получение списка карт, содержащих информацию о дисках, восстановленных в результате выполнения задачи.
|
- ToMaps(): получение списка карт, содержащих информацию о дисках, восстановленных в результате выполнения задачи.
|
||||||
Все методы оборудованы возвратом ошибок. Непустая ошибка означает, что из поля Result нельзя получить информацию, которую предоставляет метод.
|
Все методы оборудованы возвратом ошибок. Непустая ошибка означает, что из поля Result нельзя получить информацию, которую предоставляет метод.
|
||||||
|
|
||||||
```go
|
```go
|
||||||
package main
|
package main
|
||||||
@@ -1561,7 +1564,7 @@ func main() {
|
|||||||
| BVSConfig | *BVSConfig | Нет | Конфигурация BVS |
|
| BVSConfig | *BVSConfig | Нет | Конфигурация BVS |
|
||||||
| LegacyConfig | string | Нет | Конфигурация Legacy |
|
| LegacyConfig | string | Нет | Конфигурация Legacy |
|
||||||
|
|
||||||
В универсальном клиенте можно использовать только один тип конфигурации одновременно.
|
В универсальном клиенте можно использовать только один тип конфигурации одновременно.
|
||||||
|
|
||||||
#### Пример конфигурации универсального клиента
|
#### Пример конфигурации универсального клиента
|
||||||
|
|
||||||
@@ -1632,46 +1635,46 @@ package main
|
|||||||
import (
|
import (
|
||||||
"fmt"
|
"fmt"
|
||||||
|
|
||||||
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v16/config"
|
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v16/config"
|
||||||
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v16"
|
decort "repository.basistech.ru/BASIS/dynamix-golang-sdk/v16"
|
||||||
)
|
)
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
// Настройка конфигурации
|
// Настройка конфигурации
|
||||||
legacyCfg := config.LegacyConfig{
|
legacyCfg := config.LegacyConfig{
|
||||||
Username: "<USERNAME>",
|
Username: "<USERNAME>",
|
||||||
Password: "<PASSWORD>",
|
Password: "<PASSWORD>",
|
||||||
Domain: "dynamix",
|
Domain: "dynamix",
|
||||||
DecortURL: "https://mr4.digitalenergy.online",
|
DecortURL: "https://mr4.digitalenergy.online",
|
||||||
Retries: 5,
|
Retries: 5,
|
||||||
|
}
|
||||||
|
|
||||||
|
legacyCfg.SetTimeout(5 * time.Minute)
|
||||||
|
|
||||||
|
cfg := config.UniversalConfig{
|
||||||
|
LegacyConfig: &legacyCfg,
|
||||||
}
|
}
|
||||||
|
|
||||||
legacyCfg.SetTimeout(5 * time.Minute)
|
// Создание клиента
|
||||||
|
universalClient := decort.NewUniversal(cfg)
|
||||||
|
|
||||||
|
// Создание структуры запроса
|
||||||
|
// CreateRequest - реквест на создание виртуальной машины
|
||||||
|
req := kvmx86.CreateRequest{
|
||||||
|
RGID: 123,
|
||||||
|
Name: "compute",
|
||||||
|
CPU: 4,
|
||||||
|
RAM: 4096,
|
||||||
|
ImageID: 321,
|
||||||
|
}
|
||||||
|
|
||||||
cfg := config.UniversalConfig{
|
// Выполнение запроса
|
||||||
LegacyConfig: &legacyCfg,
|
res, err := universalClient.CloudAPI().KVMX86().Create(context.Background(), req)
|
||||||
}
|
if err != nil {
|
||||||
|
log.Fatal(err)
|
||||||
|
}
|
||||||
|
|
||||||
// Создание клиента
|
fmt.Println(res)
|
||||||
universalClient := decort.NewUniversal(cfg)
|
|
||||||
|
|
||||||
// Создание структуры запроса
|
|
||||||
// CreateRequest - реквест на создание виртуальной машины
|
|
||||||
req := kvmx86.CreateRequest{
|
|
||||||
RGID: 123,
|
|
||||||
Name: "compute",
|
|
||||||
CPU: 4,
|
|
||||||
RAM: 4096,
|
|
||||||
ImageID: 321,
|
|
||||||
}
|
|
||||||
|
|
||||||
// Выполнение запроса
|
|
||||||
res, err := universalClient.CloudAPI().KVMX86().Create(context.Background(), req)
|
|
||||||
if err != nil {
|
|
||||||
log.Fatal(err)
|
|
||||||
}
|
|
||||||
|
|
||||||
fmt.Println(res)
|
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|||||||
@@ -90,6 +90,9 @@ type ListRequest struct {
|
|||||||
// Exclude audit lines from response
|
// Exclude audit lines from response
|
||||||
// Required: false
|
// Required: false
|
||||||
ExcludeAuditLines bool `url:"exclude_audit_lines,omitempty" json:"exclude_audit_lines,omitempty"`
|
ExcludeAuditLines bool `url:"exclude_audit_lines,omitempty" json:"exclude_audit_lines,omitempty"`
|
||||||
|
|
||||||
|
// Public Session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List gets audit records for the specified account object
|
// List gets audit records for the specified account object
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package audit
|
|||||||
|
|
||||||
// Main info about audit
|
// Main info about audit
|
||||||
type RecordAudit struct {
|
type RecordAudit struct {
|
||||||
|
|
||||||
// Arguments
|
// Arguments
|
||||||
Arguments string `json:"args"`
|
Arguments string `json:"args"`
|
||||||
|
|
||||||
@@ -41,6 +40,9 @@ type RecordAudit struct {
|
|||||||
|
|
||||||
// User
|
// User
|
||||||
User string `json:"user"`
|
User string `json:"user"`
|
||||||
|
|
||||||
|
// Public Session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Main info about audit
|
// Main info about audit
|
||||||
@@ -81,6 +83,9 @@ type ItemAudit struct {
|
|||||||
// User
|
// User
|
||||||
User string `json:"user"`
|
User string `json:"user"`
|
||||||
|
|
||||||
|
// Public Session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
|
|
||||||
// TTL
|
// TTL
|
||||||
TTL string `json:"_ttl"`
|
TTL string `json:"_ttl"`
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -18,10 +18,6 @@ type ListVGPURequest struct {
|
|||||||
// Required: false
|
// Required: false
|
||||||
GPUID uint64 `url:"gpuId,omitempty" json:"gpuId,omitempty"`
|
GPUID uint64 `url:"gpuId,omitempty" json:"gpuId,omitempty"`
|
||||||
|
|
||||||
// Find by type
|
|
||||||
// Required: false
|
|
||||||
Type string `url:"type,omitempty" json:"type,omitempty"`
|
|
||||||
|
|
||||||
// Find by status
|
// Find by status
|
||||||
// Required: false
|
// Required: false
|
||||||
Status string `url:"status,omitempty" json:"status,omitempty"`
|
Status string `url:"status,omitempty" json:"status,omitempty"`
|
||||||
|
|||||||
@@ -73,10 +73,10 @@ type Rule struct {
|
|||||||
Protocol string `json:"protocol"`
|
Protocol string `json:"protocol"`
|
||||||
|
|
||||||
// Priority Code Point (0-7). L2 marking
|
// Priority Code Point (0-7). L2 marking
|
||||||
PCPTag uint64 `json:"pcp_tag"`
|
PCPTag *uint64 `json:"pcp_tag"`
|
||||||
|
|
||||||
// DSCP value (0-63). L3 marking
|
// DSCP value (0-63). L3 marking
|
||||||
DSCPValue uint64 `json:"dscp_value"`
|
DSCPValue *uint64 `json:"dscp_value"`
|
||||||
|
|
||||||
// Source IP address
|
// Source IP address
|
||||||
SrcIP string `json:"src_ip"`
|
SrcIP string `json:"src_ip"`
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ type UpdateRequest struct {
|
|||||||
|
|
||||||
// New QoS policy name
|
// New QoS policy name
|
||||||
// Required: false
|
// Required: false
|
||||||
Name string `url:"name,omitempty" json:"name,omitempty"`
|
Name *string `url:"name,omitempty" json:"name,omitempty"`
|
||||||
|
|
||||||
// New QoS policy description
|
// New QoS policy description
|
||||||
// Required: false
|
// Required: false
|
||||||
Description string `url:"description,omitempty" json:"description,omitempty"`
|
Description *string `url:"description,omitempty" json:"description,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (qp QoSPolicy) Update(ctx context.Context, req UpdateRequest) (*RecordQoSPolicy, error) {
|
func (qp QoSPolicy) Update(ctx context.Context, req UpdateRequest) (*RecordQoSPolicy, error) {
|
||||||
|
|||||||
@@ -329,6 +329,9 @@ type ItemVNFInterface struct {
|
|||||||
// QOS
|
// QOS
|
||||||
QOS QOS `json:"qos"`
|
QOS QOS `json:"qos"`
|
||||||
|
|
||||||
|
// List of QoS policies
|
||||||
|
QoSPolicies []uint64 `json:"qos_policies"`
|
||||||
|
|
||||||
// Target
|
// Target
|
||||||
Target string `json:"target"`
|
Target string `json:"target"`
|
||||||
|
|
||||||
|
|||||||
@@ -94,6 +94,9 @@ type ListRequest struct {
|
|||||||
// Exclude audit lines from response
|
// Exclude audit lines from response
|
||||||
// Required: false
|
// Required: false
|
||||||
ExcludeAuditLines bool `url:"exclude_audit_lines,omitempty" json:"exclude_audit_lines,omitempty"`
|
ExcludeAuditLines bool `url:"exclude_audit_lines,omitempty" json:"exclude_audit_lines,omitempty"`
|
||||||
|
|
||||||
|
// Public Session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List gets audit records for the specified account object
|
// List gets audit records for the specified account object
|
||||||
|
|||||||
@@ -38,6 +38,9 @@ type ItemAudit struct {
|
|||||||
// User
|
// User
|
||||||
User string `json:"user"`
|
User string `json:"user"`
|
||||||
|
|
||||||
|
// Public Session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
|
|
||||||
// TTL
|
// TTL
|
||||||
TTL string `json:"_ttl"`
|
TTL string `json:"_ttl"`
|
||||||
}
|
}
|
||||||
@@ -93,6 +96,9 @@ type RecordAudit struct {
|
|||||||
// User
|
// User
|
||||||
User string `json:"user"`
|
User string `json:"user"`
|
||||||
|
|
||||||
|
// Public Session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
|
|
||||||
// TTL
|
// TTL
|
||||||
TTL string `json:"_ttl"`
|
TTL string `json:"_ttl"`
|
||||||
|
|
||||||
|
|||||||
@@ -18,10 +18,6 @@ type ListVGPURequest struct {
|
|||||||
// Required: false
|
// Required: false
|
||||||
GPUID uint64 `url:"gpuId,omitempty" json:"gpuId,omitempty"`
|
GPUID uint64 `url:"gpuId,omitempty" json:"gpuId,omitempty"`
|
||||||
|
|
||||||
// Find by type
|
|
||||||
// Required: false
|
|
||||||
Type string `url:"type,omitempty" json:"type,omitempty"`
|
|
||||||
|
|
||||||
// Find by status
|
// Find by status
|
||||||
// Required: false
|
// Required: false
|
||||||
Status string `url:"status,omitempty" json:"status,omitempty"`
|
Status string `url:"status,omitempty" json:"status,omitempty"`
|
||||||
|
|||||||
@@ -114,6 +114,9 @@ type RecordGrid struct {
|
|||||||
|
|
||||||
// Is BRO enabled
|
// Is BRO enabled
|
||||||
BROEnabled bool `json:"bro_enabled"`
|
BROEnabled bool `json:"bro_enabled"`
|
||||||
|
|
||||||
|
// Budget
|
||||||
|
Budget bool `json:"budget"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// Information about grid
|
// Information about grid
|
||||||
@@ -159,6 +162,9 @@ type ItemGridList struct {
|
|||||||
|
|
||||||
// Is BRO enabled
|
// Is BRO enabled
|
||||||
BROEnabled bool `json:"bro_enabled"`
|
BROEnabled bool `json:"bro_enabled"`
|
||||||
|
|
||||||
|
// Budget
|
||||||
|
Budget bool `json:"budget"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// List Grids
|
// List Grids
|
||||||
|
|||||||
@@ -73,10 +73,10 @@ type Rule struct {
|
|||||||
Protocol string `json:"protocol"`
|
Protocol string `json:"protocol"`
|
||||||
|
|
||||||
// Priority Code Point (0-7). L2 marking
|
// Priority Code Point (0-7). L2 marking
|
||||||
PCPTag uint64 `json:"pcp_tag"`
|
PCPTag *uint64 `json:"pcp_tag"`
|
||||||
|
|
||||||
// DSCP value (0-63). L3 marking
|
// DSCP value (0-63). L3 marking
|
||||||
DSCPValue uint64 `json:"dscp_value"`
|
DSCPValue *uint64 `json:"dscp_value"`
|
||||||
|
|
||||||
// Source IP address
|
// Source IP address
|
||||||
SrcIP string `json:"src_ip"`
|
SrcIP string `json:"src_ip"`
|
||||||
|
|||||||
@@ -16,11 +16,11 @@ type UpdateRequest struct {
|
|||||||
|
|
||||||
// New QoS policy name
|
// New QoS policy name
|
||||||
// Required: false
|
// Required: false
|
||||||
Name string `url:"name,omitempty" json:"name,omitempty"`
|
Name *string `url:"name,omitempty" json:"name,omitempty"`
|
||||||
|
|
||||||
// New QoS policy description
|
// New QoS policy description
|
||||||
// Required: false
|
// Required: false
|
||||||
Description string `url:"description,omitempty" json:"description,omitempty"`
|
Description *string `url:"description,omitempty" json:"description,omitempty"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func (qp QoSPolicy) Update(ctx context.Context, req UpdateRequest) (*RecordQoSPolicy, error) {
|
func (qp QoSPolicy) Update(ctx context.Context, req UpdateRequest) (*RecordQoSPolicy, error) {
|
||||||
|
|||||||
8
pkg/cloudbroker/session.go
Normal file
8
pkg/cloudbroker/session.go
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
package cloudbroker
|
||||||
|
|
||||||
|
import "repository.basistech.ru/BASIS/dynamix-golang-sdk/v16/pkg/cloudbroker/session"
|
||||||
|
|
||||||
|
// Accessing the session method group
|
||||||
|
func (cb *CloudBroker) Session() *session.Session {
|
||||||
|
return session.New(cb.client)
|
||||||
|
}
|
||||||
53
pkg/cloudbroker/session/filter.go
Normal file
53
pkg/cloudbroker/session/filter.go
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
package session
|
||||||
|
|
||||||
|
// FilterByID returns ListSession with specified ID.
|
||||||
|
func (lsession ListSession) FilterByID(id string) ListSession {
|
||||||
|
predicate := func(rsession ItemSession) bool {
|
||||||
|
return rsession.PublicSessionID == id
|
||||||
|
}
|
||||||
|
|
||||||
|
return lsession.FilterFunc(predicate)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterByName returns ListSession with specified User.
|
||||||
|
func (lsession ListSession) FilterByUser(user string) ListSession {
|
||||||
|
predicate := func(rsession ItemSession) bool {
|
||||||
|
return rsession.User == user
|
||||||
|
}
|
||||||
|
|
||||||
|
return lsession.FilterFunc(predicate)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterByObjStatus returns ListSession with specified IP.
|
||||||
|
func (lsession ListSession) FilterByIP(ip string) ListSession {
|
||||||
|
predicate := func(rsession ItemSession) bool {
|
||||||
|
return rsession.IP == ip
|
||||||
|
}
|
||||||
|
|
||||||
|
return lsession.FilterFunc(predicate)
|
||||||
|
}
|
||||||
|
|
||||||
|
// FilterFunc allows filtering ListSession based on user-specified predicate.
|
||||||
|
func (lsession ListSession) FilterFunc(predicate func(session ItemSession) bool) ListSession {
|
||||||
|
var result ListSession
|
||||||
|
|
||||||
|
for _, item := range lsession.Data {
|
||||||
|
if predicate(item) {
|
||||||
|
result.Data = append(result.Data, item)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.EntryCount = uint64(len(result.Data))
|
||||||
|
|
||||||
|
return result
|
||||||
|
}
|
||||||
|
|
||||||
|
// FindOne returns first found ItemSession
|
||||||
|
// If none was found, returns an empty struct.
|
||||||
|
func (lsession ListSession) FindOne() ItemSession {
|
||||||
|
if len(lsession.Data) == 0 {
|
||||||
|
return ItemSession{}
|
||||||
|
}
|
||||||
|
|
||||||
|
return lsession.Data[0]
|
||||||
|
}
|
||||||
54
pkg/cloudbroker/session/filter_test.go
Normal file
54
pkg/cloudbroker/session/filter_test.go
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
package session
|
||||||
|
|
||||||
|
import "testing"
|
||||||
|
|
||||||
|
var sessions = ListSession{
|
||||||
|
Data: []ItemSession{
|
||||||
|
{
|
||||||
|
PublicSessionID: "06674bdf-13f1-4f78-a40a-242fd76e4cd1",
|
||||||
|
IP: "10.244.0.243",
|
||||||
|
User: "someuser",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
PublicSessionID: "06674bdf-13f1-4f78-a40a-242fd76e4cd5",
|
||||||
|
IP: "10.244.0.242",
|
||||||
|
User: "someuser2",
|
||||||
|
},
|
||||||
|
{
|
||||||
|
PublicSessionID: "06674bdf-13f1-4f78-a40a-242fd76e4cd7",
|
||||||
|
IP: "10.244.0.243",
|
||||||
|
User: "someuser2",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
EntryCount: 3,
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFilterByID(t *testing.T) {
|
||||||
|
actual := sessions.FilterByID("06674bdf-13f1-4f78-a40a-242fd76e4cd1").FindOne()
|
||||||
|
|
||||||
|
if actual.PublicSessionID != "06674bdf-13f1-4f78-a40a-242fd76e4cd1" {
|
||||||
|
t.Fatal("expected ID 1, found: ", actual.PublicSessionID)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFilterByUser(t *testing.T) {
|
||||||
|
actual := sessions.FilterByUser("someuser").FindOne()
|
||||||
|
|
||||||
|
if actual.User != "someuser" {
|
||||||
|
t.Fatal("expected User 'someuser', found: ", actual.User)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestFilterByIP(t *testing.T) {
|
||||||
|
actual := sessions.FilterByIP("10.244.0.243")
|
||||||
|
|
||||||
|
if len(actual.Data) != 2 {
|
||||||
|
t.Fatal("expected 2 found, actual: ", len(actual.Data))
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, item := range actual.Data {
|
||||||
|
if item.IP != "10.244.0.243" {
|
||||||
|
t.Fatal("expected IP '10.244.0.243', found: ", item.IP)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
46
pkg/cloudbroker/session/get.go
Normal file
46
pkg/cloudbroker/session/get.go
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
package session
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v16/internal/validators"
|
||||||
|
)
|
||||||
|
|
||||||
|
// GetRequest struct to get Session parameters
|
||||||
|
type GetRequest struct {
|
||||||
|
// Storage endpoint provider ID
|
||||||
|
// Required: true
|
||||||
|
PublicSessionID string `url:"public_session_id" json:"public_session_id" validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Get gets Session parameters as a RecordSession struct
|
||||||
|
func (s Session) Get(ctx context.Context, req GetRequest) (*RecordSession, error) {
|
||||||
|
res, err := s.GetRaw(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
info := RecordSession{}
|
||||||
|
|
||||||
|
err = json.Unmarshal(res, &info)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &info, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// GetRaw gets Session parameters as an array of bytes
|
||||||
|
func (s Session) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, validators.ValidationErrors(validators.GetErrors(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/session/get"
|
||||||
|
|
||||||
|
res, err := s.client.DecortApiCall(ctx, http.MethodGet, url, req)
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
10
pkg/cloudbroker/session/ids.go
Normal file
10
pkg/cloudbroker/session/ids.go
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
package session
|
||||||
|
|
||||||
|
// IDs gets array of PublicSessionIDs from ListSession struct
|
||||||
|
func (ls ListSession) IDs() []string {
|
||||||
|
res := make([]string, 0, len(ls.Data))
|
||||||
|
for _, s := range ls.Data {
|
||||||
|
res = append(res, s.PublicSessionID)
|
||||||
|
}
|
||||||
|
return res
|
||||||
|
}
|
||||||
79
pkg/cloudbroker/session/list.go
Normal file
79
pkg/cloudbroker/session/list.go
Normal file
@@ -0,0 +1,79 @@
|
|||||||
|
package session
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
|
||||||
|
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v16/internal/validators"
|
||||||
|
)
|
||||||
|
|
||||||
|
type ListRequest struct {
|
||||||
|
// Filter by username
|
||||||
|
User string `url:"user,omitempty" json:"user,omitempty"`
|
||||||
|
|
||||||
|
// Filter by authorization system (bvs, decs3o, password)
|
||||||
|
AuthorizeSystem string `url:"authorize_system,omitempty" json:"authorize_system,omitempty"`
|
||||||
|
|
||||||
|
// Filter by public session ID (UUID)
|
||||||
|
PublicSessionID string `url:"public_session_id,omitempty" json:"public_session_id,omitempty"`
|
||||||
|
|
||||||
|
// Filter by sub from JWT
|
||||||
|
Sub string `url:"sub,omitempty" json:"sub,omitempty"`
|
||||||
|
|
||||||
|
// Filter by sid from JWT
|
||||||
|
SID uint64 `url:"sid,omitempty" json:"sid,omitempty"`
|
||||||
|
|
||||||
|
// Filter sessions with login_time >= timestamp (Unix timestamp)
|
||||||
|
TimestampAt uint64 `url:"timestamp_at,omitempty" json:"timestamp_at,omitempty"`
|
||||||
|
|
||||||
|
// Filter sessions with login_time <= timestamp (Unix timestamp)
|
||||||
|
TimestampTo uint64 `url:"timestamp_to,omitempty" json:"timestamp_to,omitempty"`
|
||||||
|
|
||||||
|
// Filter sessions active at this timestamp (login_time <= T < logout_time/expires_at)
|
||||||
|
ActiveAt uint64 `url:"active_at,omitempty" json:"active_at,omitempty"`
|
||||||
|
|
||||||
|
// Page size
|
||||||
|
// Required: false
|
||||||
|
Size uint64 `url:"size,omitempty" json:"size,omitempty"`
|
||||||
|
|
||||||
|
// Page number
|
||||||
|
// Required: false
|
||||||
|
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
|
||||||
|
|
||||||
|
// Sort by one of supported fields, format +|-(field)
|
||||||
|
// Required: false
|
||||||
|
SortBy string `url:"sortBy,omitempty" json:"sortBy,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// List gets list of sessions as a ListSession struct
|
||||||
|
func (s Session) List(ctx context.Context, req ListRequest) (*ListSession, error) {
|
||||||
|
|
||||||
|
res, err := s.ListRaw(ctx, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
list := ListSession{}
|
||||||
|
|
||||||
|
err = json.Unmarshal(res, &list)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return &list, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
// ListRaw gets list of sessions as an array of bytes
|
||||||
|
func (s Session) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
|
||||||
|
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, validators.ValidationErrors(validators.GetErrors(err))
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/session/list"
|
||||||
|
|
||||||
|
res, err := s.client.DecortApiCall(ctx, http.MethodGet, url, req)
|
||||||
|
return res, err
|
||||||
|
}
|
||||||
85
pkg/cloudbroker/session/models.go
Normal file
85
pkg/cloudbroker/session/models.go
Normal file
@@ -0,0 +1,85 @@
|
|||||||
|
package session
|
||||||
|
|
||||||
|
// Main information about a session
|
||||||
|
type RecordSession struct {
|
||||||
|
// Public session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
|
|
||||||
|
// Username
|
||||||
|
User string `json:"user"`
|
||||||
|
|
||||||
|
// Subject from JWT
|
||||||
|
Sub string `json:"sub"`
|
||||||
|
|
||||||
|
// Session ID from JWT
|
||||||
|
SID string `json:"sid"`
|
||||||
|
|
||||||
|
// Authorization system
|
||||||
|
AuthorizeSystem string `json:"authorize_system"`
|
||||||
|
|
||||||
|
// Client IP address
|
||||||
|
IP string `json:"ip"`
|
||||||
|
|
||||||
|
// Client User-Agent
|
||||||
|
UserAgent string `json:"user_agent"`
|
||||||
|
|
||||||
|
// First login time
|
||||||
|
LoginTime string `json:"login_time"`
|
||||||
|
|
||||||
|
// Last activity time
|
||||||
|
UpdatedAt string `json:"updated_at"`
|
||||||
|
|
||||||
|
// Logout time
|
||||||
|
LogoutTime string `json:"logout_time"`
|
||||||
|
|
||||||
|
// Session expiration time
|
||||||
|
Expires string `json:"expires"`
|
||||||
|
|
||||||
|
// OAuth provider type
|
||||||
|
OAuthType string `json:"oauth_type"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// List of sessions
|
||||||
|
type ListSession struct {
|
||||||
|
// Data
|
||||||
|
Data []ItemSession `json:"data"`
|
||||||
|
|
||||||
|
// Entry count
|
||||||
|
EntryCount uint64 `json:"entryCount"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// A session item
|
||||||
|
type ItemSession struct {
|
||||||
|
// Public session ID
|
||||||
|
PublicSessionID string `json:"public_session_id"`
|
||||||
|
|
||||||
|
// Username
|
||||||
|
User string `json:"user"`
|
||||||
|
|
||||||
|
// Subject from JWT
|
||||||
|
Sub string `json:"sub"`
|
||||||
|
|
||||||
|
// Session ID from JWT
|
||||||
|
SID string `json:"sid"`
|
||||||
|
|
||||||
|
// Authorization system
|
||||||
|
AuthorizeSystem string `json:"authorize_system"`
|
||||||
|
|
||||||
|
// Client IP address
|
||||||
|
IP string `json:"ip"`
|
||||||
|
|
||||||
|
// Client User-Agent
|
||||||
|
UserAgent string `json:"user_agent"`
|
||||||
|
|
||||||
|
// First login time
|
||||||
|
LoginTime string `json:"login_time"`
|
||||||
|
|
||||||
|
// Last activity time
|
||||||
|
UpdatedAt string `json:"updated_at"`
|
||||||
|
|
||||||
|
// Logout time
|
||||||
|
LogoutTime string `json:"logout_time"`
|
||||||
|
|
||||||
|
// Session expiration time
|
||||||
|
Expires string `json:"expires"`
|
||||||
|
}
|
||||||
18
pkg/cloudbroker/session/session.go
Normal file
18
pkg/cloudbroker/session/session.go
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
// Operator actions for handling interventions on a session
|
||||||
|
package session
|
||||||
|
|
||||||
|
import (
|
||||||
|
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v16/interfaces"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Structure for creating request to session
|
||||||
|
type Session struct {
|
||||||
|
client interfaces.Caller
|
||||||
|
}
|
||||||
|
|
||||||
|
// Builder for Session endpoints
|
||||||
|
func New(client interfaces.Caller) *Session {
|
||||||
|
return &Session{
|
||||||
|
client: client,
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -173,6 +173,9 @@ type ItemInterface struct {
|
|||||||
// QOS
|
// QOS
|
||||||
QOS QOS `json:"qos"`
|
QOS QOS `json:"qos"`
|
||||||
|
|
||||||
|
// List of QoS policies
|
||||||
|
QoSPolicies []uint64 `json:"qos_policies"`
|
||||||
|
|
||||||
// Target
|
// Target
|
||||||
Target string `json:"target"`
|
Target string `json:"target"`
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user