parent
84b64b7d80
commit
7d6cda7119
@ -1 +1,2 @@
|
|||||||
cmd/
|
cmd/
|
||||||
|
.idea/
|
@ -1,39 +1,33 @@
|
|||||||
## Version 1.3.0
|
## Version 1.3.1
|
||||||
|
|
||||||
### Features
|
### Features
|
||||||
|
|
||||||
- Created CloudAPI/CloudBroker filtering, sorting and serialization functions for List requests.
|
- Added FilterByGID for cloudapi/locations/list handler response, used to filter locations by specified GID.
|
||||||
- Every handler with present List request has available FilterBy functions. Filtering by ID, Name is common for each handler.
|
- Added /cloudbroker/pcidevices endpoints support
|
||||||
- In case user needs to filter response by uncommon field FilterFunc with user-specified predicate is also available.
|
- /cloudbroker/pcidevices/create
|
||||||
- CloudAPI/CloudBroker computes, disks and lb also have specific Filter methods predefined, to name a few:
|
- /cloudbroker/pcidevices/delete
|
||||||
- computes:
|
- /cloudbroker/pcidevices/disable
|
||||||
- FilterByK8SID, used to filter computes used by specified k8s cluster;
|
- /cloudbroker/pcidevices/enable
|
||||||
- FilterByK8SMasters, FilterByK8SWorkers, used to filter master/workers nodes. Best used after FilterByK8SID call;
|
- /cloudbroker/pcidevices/list
|
||||||
- FilterByLBID, used to filter computes used by specified load balancer;
|
- Added /cloudbroker/vgpu endpoints support
|
||||||
|
- /cloudbroker/vgpu/allocate
|
||||||
- disks:
|
- /cloudbroker/vgpu/create
|
||||||
- FilterByK8SID, used to filter disks attached to computes inside specified k8s cluster;
|
- /cloudbroker/vgpu/deallocate
|
||||||
- FilterByLBID, used to filter disks attached to computes inside specified load balancer;
|
- /cloudbroker/vgpu/destroy
|
||||||
|
- /cloudbroker/vgpu/list
|
||||||
- lb:
|
|
||||||
- FilterByK8SID, used to filter load balancers used by specified k8s cluster;
|
|
||||||
|
|
||||||
- Reinvented request validation using go-validator. Made easier to manipulate and add on to.
|
|
||||||
- Request/Config validation now uses tags instead of hard-coded validation functions;
|
|
||||||
|
|
||||||
- Added ability to parse client configuration from JSON or YAML formatted files.
|
|
||||||
|
|
||||||
### Bug Fixes
|
### Bug Fixes
|
||||||
|
|
||||||
- Fixed SSO_URL trailing slash possibly breaking authentication process.
|
- Fixed cloudbroker/cloudapi/account/update request model types.
|
||||||
- Fixed cloudbroker/vins/nat_rule_add request model types.
|
- Fixed cloudbroker/cloudapi/rg/update request model types.
|
||||||
- Fixed cloudbroker/grid DiskSize field type
|
- Fixed cloudapi/account DeactivationTime field type.
|
||||||
- Fixed TasksResult, InfoResult in cloudbroker/cloudapi/tasks/models JSON unmarshalling.
|
- Fixed cloudapi/k8s/workersGroupAdd return value type.
|
||||||
|
- Fixed cloudapi/disks/listUnattached return value type.
|
||||||
|
- Added ListDisksUnattached model as a cloudapi/disks/listUnattached handler response with filters.
|
||||||
|
- Fixed cloudapi/extnet Excluded field type.
|
||||||
|
- Fixed cloudapi/rg RecordResourceUsage model.
|
||||||
|
- Fixed cloudapi/compute ItemACL model.
|
||||||
|
|
||||||
### Tests
|
### Tests
|
||||||
|
|
||||||
- Covered CloudAPI/CloudBroker filters with unit tests.
|
- Covered cloudapi/disks ListDisksUnattached filters with unit tests.
|
||||||
|
|
||||||
### Other
|
|
||||||
|
|
||||||
- Updated module to new repository
|
|
||||||
|
@ -0,0 +1,8 @@
|
|||||||
|
package cloudbroker
|
||||||
|
|
||||||
|
import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/pcidevice"
|
||||||
|
|
||||||
|
// Accessing the PCI Device method group
|
||||||
|
func (cb *CloudBroker) PCIDevice() *pcidevice.PCIDevice {
|
||||||
|
return pcidevice.New(cb.client)
|
||||||
|
}
|
@ -0,0 +1,56 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request struct for creating PCI device
|
||||||
|
type CreateRequest struct {
|
||||||
|
// StackID
|
||||||
|
// Required: true
|
||||||
|
StackID uint64 `url:"stackId" json:"stackId" validate:"required"`
|
||||||
|
|
||||||
|
// Resource group ID
|
||||||
|
// Required: true
|
||||||
|
RGID uint64 `url:"rgId" json:"rgId" validate:"required"`
|
||||||
|
|
||||||
|
// Name of device
|
||||||
|
// Required: true
|
||||||
|
Name string `url:"name" json:"name" validate:"required"`
|
||||||
|
|
||||||
|
// PCI address of the device
|
||||||
|
// Must be in format 0000:1f:2b.0
|
||||||
|
// Required: true
|
||||||
|
HWPath string `url:"hwPath" json:"hwPath" validate:"required,hwPath"`
|
||||||
|
|
||||||
|
// Description, just for information
|
||||||
|
// Required: false
|
||||||
|
Description string `url:"description,omitempty" json:"description,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create creates PCI Device
|
||||||
|
func (p PCIDevice) Create(ctx context.Context, req CreateRequest) (uint64, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return 0, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/pcidevice/create"
|
||||||
|
|
||||||
|
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := strconv.ParseUint(string(res), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request struct for deleting PCI device
|
||||||
|
type DeleteRequest struct {
|
||||||
|
// PCI device ID
|
||||||
|
// Required: true
|
||||||
|
DeviceID uint64 `url:"deviceId" json:"deviceId" validate:"required"`
|
||||||
|
|
||||||
|
// Force delete
|
||||||
|
// Required: false
|
||||||
|
Force bool `url:"force,omitempty" json:"force,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Delete PCI device
|
||||||
|
func (p PCIDevice) Delete(ctx context.Context, req DeleteRequest) (bool, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return false, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/pcidevice/delete"
|
||||||
|
|
||||||
|
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := strconv.ParseBool(string(res))
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request struct for disabling PCI device
|
||||||
|
type DisableRequest struct {
|
||||||
|
// PCI device ID
|
||||||
|
// Required: true
|
||||||
|
DeviceID uint64 `url:"deviceId" json:"deviceId" validate:"required"`
|
||||||
|
|
||||||
|
// Force delete
|
||||||
|
// Required: false
|
||||||
|
Force bool `url:"force,omitempty" json:"force,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Disable PCI device
|
||||||
|
func (p PCIDevice) Disable(ctx context.Context, req DisableRequest) (bool, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return false, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/pcidevice/disable"
|
||||||
|
|
||||||
|
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := strconv.ParseBool(string(res))
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request struct for enabling PCI device
|
||||||
|
type EnableRequest struct {
|
||||||
|
// PCI device ID
|
||||||
|
// Required: true
|
||||||
|
DeviceID uint64 `url:"deviceId" json:"deviceId" validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Enable PCI device
|
||||||
|
func (p PCIDevice) Enable(ctx context.Context, req EnableRequest) (bool, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return false, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/pcidevice/enable"
|
||||||
|
|
||||||
|
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := strconv.ParseBool(string(res))
|
||||||
|
if err != nil {
|
||||||
|
return false, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
@ -0,0 +1,26 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// List gets list all pci devices
|
||||||
|
func (p PCIDevice) List(ctx context.Context) (ListPCIDevices, error) {
|
||||||
|
url := "/cloudbroker/pcidevice/list"
|
||||||
|
|
||||||
|
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, nil)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
list := ListPCIDevices{}
|
||||||
|
|
||||||
|
err = json.Unmarshal(res, &list)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return list, nil
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
// Main information about PCI device
|
||||||
|
type ItemPCIDevice struct {
|
||||||
|
// CKey
|
||||||
|
CKey string `json:"_ckey"`
|
||||||
|
|
||||||
|
// Meta
|
||||||
|
Meta []interface{} `json:"_meta"`
|
||||||
|
|
||||||
|
// Compute ID
|
||||||
|
ComputeID uint64 `json:"computeId"`
|
||||||
|
|
||||||
|
// Description
|
||||||
|
Description string `json:"description"`
|
||||||
|
|
||||||
|
// GUID
|
||||||
|
GUID uint64 `json:"guid"`
|
||||||
|
|
||||||
|
// HwPath
|
||||||
|
HwPath string `json:"hwPath"`
|
||||||
|
|
||||||
|
// ID
|
||||||
|
ID uint64 `json:"id"`
|
||||||
|
|
||||||
|
// Name
|
||||||
|
Name string `json:"name"`
|
||||||
|
|
||||||
|
// Resource group ID
|
||||||
|
RGID uint64 `json:"rgId"`
|
||||||
|
|
||||||
|
// Stack ID
|
||||||
|
StackID uint64 `json:"stackId"`
|
||||||
|
|
||||||
|
// Status
|
||||||
|
Status string `json:"status"`
|
||||||
|
|
||||||
|
// System name
|
||||||
|
SystemName string `json:"systemName"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// List PCI devices
|
||||||
|
type ListPCIDevices []ItemPCIDevice
|
@ -0,0 +1,15 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
|
||||||
|
|
||||||
|
// Structure for creating request to PCI device
|
||||||
|
type PCIDevice struct {
|
||||||
|
client interfaces.Caller
|
||||||
|
}
|
||||||
|
|
||||||
|
// Builder for PCI device endpoints
|
||||||
|
func New(client interfaces.Caller) *PCIDevice {
|
||||||
|
return &PCIDevice{
|
||||||
|
client: client,
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,42 @@
|
|||||||
|
package pcidevice
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/serialization"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
|
||||||
|
//
|
||||||
|
// In order to serialize with indent make sure to follow these guidelines:
|
||||||
|
// - First argument -> prefix
|
||||||
|
// - Second argument -> indent
|
||||||
|
func (l ListPCIDevices) Serialize(params ...string) (serialization.Serialized, error) {
|
||||||
|
if len(l) == 0 {
|
||||||
|
return []byte{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(params) > 1 {
|
||||||
|
prefix := params[0]
|
||||||
|
indent := params[1]
|
||||||
|
|
||||||
|
return json.MarshalIndent(l, prefix, indent)
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.Marshal(l)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
|
||||||
|
//
|
||||||
|
// In order to serialize with indent make sure to follow these guidelines:
|
||||||
|
// - First argument -> prefix
|
||||||
|
// - Second argument -> indent
|
||||||
|
func (i ItemPCIDevice) Serialize(params ...string) (serialization.Serialized, error) {
|
||||||
|
if len(params) > 1 {
|
||||||
|
prefix := params[0]
|
||||||
|
indent := params[1]
|
||||||
|
|
||||||
|
return json.MarshalIndent(i, prefix, indent)
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.Marshal(i)
|
||||||
|
}
|
@ -0,0 +1,8 @@
|
|||||||
|
package cloudbroker
|
||||||
|
|
||||||
|
import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/vgpu"
|
||||||
|
|
||||||
|
// Accessing the VGPU method group
|
||||||
|
func (cb *CloudBroker) VGPU() *vgpu.VGPU {
|
||||||
|
return vgpu.New(cb.client)
|
||||||
|
}
|
@ -0,0 +1,39 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request for allocating VGPU
|
||||||
|
type AllocateRequest struct {
|
||||||
|
// Virtual GPU ID
|
||||||
|
// Required: true
|
||||||
|
VGPUID uint64 `url:"vgpuId" json:"vgpuId" validate:"required"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Allocate allocates GPU
|
||||||
|
func (v VGPU) Allocate(ctx context.Context, req AllocateRequest) (bool, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return false, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/vgpu/allocate"
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
@ -0,0 +1,51 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request struct for creating VGPU
|
||||||
|
type CreateRequest struct {
|
||||||
|
// ID of pGPU
|
||||||
|
// Required: true
|
||||||
|
PGPUID uint64 `url:"pgpuId" json:"pgpuId" validate:"required"`
|
||||||
|
|
||||||
|
// ID of the target resource group.
|
||||||
|
// Required: true
|
||||||
|
RGID uint64 `url:"rgId" json:"rgId" validate:"required"`
|
||||||
|
|
||||||
|
// Virtual profile id
|
||||||
|
// Required: false
|
||||||
|
ProfileID uint64 `url:"profileId,omitempty" json:"profileId,omitempty"`
|
||||||
|
|
||||||
|
// Allocate vgpu after creation
|
||||||
|
// Required: false
|
||||||
|
Allocate bool `url:"allocate,omitempty" json:"allocate,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Create creates VGPU
|
||||||
|
func (v VGPU) Create(ctx context.Context, req CreateRequest) (uint64, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return 0, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/vgpu/create"
|
||||||
|
|
||||||
|
res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
result, err := strconv.ParseUint(string(res), 10, 64)
|
||||||
|
if err != nil {
|
||||||
|
return 0, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return result, nil
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request for deallocating VGPU
|
||||||
|
type DeallocateRequest struct {
|
||||||
|
// Virtual GPU ID
|
||||||
|
// Required: true
|
||||||
|
VGPUID uint64 `url:"vgpuId" json:"vgpuId" validate:"required"`
|
||||||
|
|
||||||
|
// Force delete (detach from compute)
|
||||||
|
// Required: false
|
||||||
|
Force bool `url:"force,omitempty" json:"force,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Deallocate releases GPU resources
|
||||||
|
func (v VGPU) Deallocate(ctx context.Context, req DeallocateRequest) (bool, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return false, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/vgpu/deallocate"
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
@ -0,0 +1,43 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"net/http"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
|
||||||
|
"strconv"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request for destroying VGPU
|
||||||
|
type DestroyRequest struct {
|
||||||
|
// Virtual GPU ID
|
||||||
|
// Required: true
|
||||||
|
VGPUID uint64 `url:"vgpuId" json:"vgpuId" validate:"required"`
|
||||||
|
|
||||||
|
// Force delete (deallocate and detach from compute)
|
||||||
|
// Required: false
|
||||||
|
Force bool `url:"force,omitempty" json:"force,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// Destroy destroys VGPU
|
||||||
|
func (v VGPU) Destroy(ctx context.Context, req DestroyRequest) (bool, error) {
|
||||||
|
err := validators.ValidateRequest(req)
|
||||||
|
if err != nil {
|
||||||
|
for _, validationError := range validators.GetErrors(err) {
|
||||||
|
return false, validators.ValidationError(validationError)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
url := "/cloudbroker/vgpu/destroy"
|
||||||
|
|
||||||
|
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
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/json"
|
||||||
|
"net/http"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Request struct for getting list of VGPU
|
||||||
|
type ListRequest 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"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// List gets list all VGPU
|
||||||
|
func (v VGPU) List(ctx context.Context, req ListRequest) (ListVGPU, error) {
|
||||||
|
url := "/cloudbroker/vgpu/list"
|
||||||
|
|
||||||
|
res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
list := ListVGPU{}
|
||||||
|
|
||||||
|
err = json.Unmarshal(res, &list)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
|
return list, nil
|
||||||
|
}
|
@ -0,0 +1,66 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
type ItemVGPU struct {
|
||||||
|
// CKey
|
||||||
|
CKey string `json:"_ckey"`
|
||||||
|
|
||||||
|
// Meta
|
||||||
|
Meta []interface{} `json:"_meta"`
|
||||||
|
|
||||||
|
// Account ID
|
||||||
|
AccountID uint64 `json:"accountId"`
|
||||||
|
|
||||||
|
// Created time
|
||||||
|
CreatedTime uint64 `json:"createdTime"`
|
||||||
|
|
||||||
|
// Deleted time
|
||||||
|
DeletedTime uint64 `json:"deletedTime"`
|
||||||
|
|
||||||
|
//Grid ID
|
||||||
|
GID uint64 `json:"gid"`
|
||||||
|
|
||||||
|
// GUID
|
||||||
|
GUID uint64 `json:"guid"`
|
||||||
|
|
||||||
|
// VGPU ID
|
||||||
|
ID uint64 `json:"id"`
|
||||||
|
|
||||||
|
// Last claimed by
|
||||||
|
LastClaimedBy uint64 `json:"lastClaimedBy"`
|
||||||
|
|
||||||
|
// Last update time
|
||||||
|
LastUpdateTime uint64 `json:"lastUpdateTime"`
|
||||||
|
|
||||||
|
// Mode
|
||||||
|
Mode string `json:"mode"`
|
||||||
|
|
||||||
|
// PCI Slot
|
||||||
|
PCISlot interface{} `json:"pciSlot"`
|
||||||
|
|
||||||
|
// PGPUID
|
||||||
|
PGPUID uint64 `json:"pgpuid"`
|
||||||
|
|
||||||
|
// Profile ID
|
||||||
|
ProfileID interface{} `json:"profileId"`
|
||||||
|
|
||||||
|
// RAM
|
||||||
|
RAM uint64 `json:"ram"`
|
||||||
|
|
||||||
|
// Reference ID
|
||||||
|
ReferenceID interface{} `json:"referenceId"`
|
||||||
|
|
||||||
|
// RGID
|
||||||
|
RGID uint64 `json:"rgId"`
|
||||||
|
|
||||||
|
// Status
|
||||||
|
Status string `json:"status"`
|
||||||
|
|
||||||
|
// Type
|
||||||
|
Type string `json:"type"`
|
||||||
|
|
||||||
|
// VMID
|
||||||
|
VMID uint64 `json:"vmid"`
|
||||||
|
}
|
||||||
|
|
||||||
|
// List of VGPU
|
||||||
|
type ListVGPU []ItemVGPU
|
@ -0,0 +1,42 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
import (
|
||||||
|
"encoding/json"
|
||||||
|
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/serialization"
|
||||||
|
)
|
||||||
|
|
||||||
|
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
|
||||||
|
//
|
||||||
|
// In order to serialize with indent make sure to follow these guidelines:
|
||||||
|
// - First argument -> prefix
|
||||||
|
// - Second argument -> indent
|
||||||
|
func (l ListVGPU) Serialize(params ...string) (serialization.Serialized, error) {
|
||||||
|
if len(l) == 0 {
|
||||||
|
return []byte{}, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
if len(params) > 1 {
|
||||||
|
prefix := params[0]
|
||||||
|
indent := params[1]
|
||||||
|
|
||||||
|
return json.MarshalIndent(l, prefix, indent)
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.Marshal(l)
|
||||||
|
}
|
||||||
|
|
||||||
|
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
|
||||||
|
//
|
||||||
|
// In order to serialize with indent make sure to follow these guidelines:
|
||||||
|
// - First argument -> prefix
|
||||||
|
// - Second argument -> indent
|
||||||
|
func (i ItemVGPU) Serialize(params ...string) (serialization.Serialized, error) {
|
||||||
|
if len(params) > 1 {
|
||||||
|
prefix := params[0]
|
||||||
|
indent := params[1]
|
||||||
|
|
||||||
|
return json.MarshalIndent(i, prefix, indent)
|
||||||
|
}
|
||||||
|
|
||||||
|
return json.Marshal(i)
|
||||||
|
}
|
@ -0,0 +1,15 @@
|
|||||||
|
package vgpu
|
||||||
|
|
||||||
|
import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
|
||||||
|
|
||||||
|
// Structure for creating request to VGPU
|
||||||
|
type VGPU struct {
|
||||||
|
client interfaces.Caller
|
||||||
|
}
|
||||||
|
|
||||||
|
// Builder for VGPU endpoints
|
||||||
|
func New(client interfaces.Caller) *VGPU {
|
||||||
|
return &VGPU{
|
||||||
|
client: client,
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue