1.5.8-k8s-extnet-branch v1.4.0
Tim Tkachev 2 years ago
parent 7d6cda7119
commit aaf0857ff0

@ -1,33 +1,44 @@
## Version 1.3.1 ## Version 1.4.0
### Features ### Features
- Added FilterByGID for cloudapi/locations/list handler response, used to filter locations by specified GID. - Actualized SDK to platform version 3.8.6:
- Added /cloudbroker/pcidevices endpoints support - Added required field networkPlugin to requests in:
- /cloudbroker/pcidevices/create - /cloudapi/cloudbroker/k8s/create;
- /cloudbroker/pcidevices/delete - /cloudbroker/k8ci/create.
- /cloudbroker/pcidevices/disable - Added networkPlugin field in models:
- /cloudbroker/pcidevices/enable - /cloudapi/cloudbroker/k8s;
- /cloudbroker/pcidevices/list - /cloudbroker/k8ci.
- Added /cloudbroker/vgpu endpoints support - Updated list of compute objects fields and added list of group objects in bservice model.
- /cloudbroker/vgpu/allocate - Added cpuAllocationRatio and cpuAllocationParameter fields in models:
- /cloudbroker/vgpu/create - /cloudapi/cloudbroker/rg;
- /cloudbroker/vgpu/deallocate - /cloudapi/cloudbroker/account.
- /cloudbroker/vgpu/destroy - Added setCpuAllocationRatio endpoint support in:
- /cloudbroker/vgpu/list - /cloudbroker/account;
- /cloudbroker/rg.
- Added /cloudbrocker/grid/setCpuAllocationRatioForVM endpoint support.
- Added setCpuAllocationParameter endpoint support in:
- /cloudbroker/account;
- /cloudbroker/rg;
- /cloudbroker/grid.
- Added cloudapi/cloudbroker/compute/changeLinkState endpoint support.
- Added enabled field in cloudapi/compute models:
- interfaces in compute/list response;
- RecordNetAttach (compute/netAttach response).
- Added cloudapi/compute/bootOrderSet endpoint support.
- Added cloudapi/compute/bootOrderGet endpoint support.
### Bug Fixes ### Bug Fixes
- Fixed cloudbroker/cloudapi/account/update request model types. - Fixed pciSlot field type in models:
- Fixed cloudbroker/cloudapi/rg/update request model types. - cloudapi/cloudbroker/computes;
- Fixed cloudapi/account DeactivationTime field type. - cloudapi/cloudbroker/vins.
- Fixed cloudapi/k8s/workersGroupAdd return value type.
- Fixed cloudapi/disks/listUnattached return value type. - Fixed handling cloudapi/account/restore endpoint response (panicked when marhalling).
- 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 - Added missing field diskType in cloudapi/compute/diskAttach request.
- Covered cloudapi/disks ListDisksUnattached filters with unit tests. - Added missing eBurst field in cloudapi/extnet QOS model.

@ -8,6 +8,7 @@ Decort SDK - это библиотека, написанная на языке G
- Версия 1.1.x Decort-SDK соответствует 3.8.5 версии платформы - Версия 1.1.x Decort-SDK соответствует 3.8.5 версии платформы
- Версия 1.2.x Decort-SDK соответствует 3.8.5 версии платформы - Версия 1.2.x Decort-SDK соответствует 3.8.5 версии платформы
- Версия 1.3.x Decort-SDK соответствует 3.8.5 версии платформы - Версия 1.3.x Decort-SDK соответствует 3.8.5 версии платформы
- Версия 1.4.x Decort-SDK соответствует 3.8.6 версии платформы
## Оглавление ## Оглавление

@ -3,6 +3,7 @@ package validators
import ( import (
"github.com/go-playground/validator/v10" "github.com/go-playground/validator/v10"
"regexp" "regexp"
"strings"
) )
// protoValidator is used to validate Proto fields. // protoValidator is used to validate Proto fields.
@ -215,3 +216,43 @@ func hwPathValidator(fe validator.FieldLevel) bool {
return ok return ok
} }
// networkPluginValidator is used to validate NetworkPlugin field
func networkPluginValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
fieldValue = strings.ToLower(fieldValue)
return StringInSlice(fieldValue, networkPluginValues)
}
// networkPluginsValidator is used to validate NetworkPlugins field
func networkPluginsValidator(fe validator.FieldLevel) bool {
fieldSlice, ok := fe.Field().Interface().([]string)
if !ok {
return false
}
for _, item := range fieldSlice {
item = strings.ToLower(item)
if !StringInSlice(item, networkPluginValues) {
return false
}
}
return true
}
func interfaceStateValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
fieldValue = strings.ToLower(fieldValue)
return StringInSlice(fieldValue, interfaceStateValues)
}
func strictLooseValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
fieldValue = strings.ToLower(fieldValue)
return StringInSlice(fieldValue, strictLooseValues)
}

@ -187,10 +187,36 @@ func errorMessage(fe validator.FieldError) string {
fe.Field(), fe.Field(),
joinValues(sepFieldTypeValues)) joinValues(sepFieldTypeValues))
// HWPath Validators
case "hwPath": case "hwPath":
return fmt.Sprintf("%s %s must be in format 0000:1f:2b.0", return fmt.Sprintf("%s %s must be in format 0000:1f:2b.0",
prefix, prefix,
fe.Field()) fe.Field())
// Network plugin Validators
case "networkPlugin":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(networkPluginValues))
case "networkPlugins":
return fmt.Sprintf("%s %s must contain only the following: %s",
prefix,
fe.Field(),
joinValues(networkPluginValues))
case "strict_loose":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(strictLooseValues))
case "interfaceState":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(interfaceStateValues))
} }
return fe.Error() return fe.Error()

@ -164,5 +164,25 @@ func registerAllValidators(validate *validator.Validate) error {
return err return err
} }
err = validate.RegisterValidation("networkPlugin", networkPluginValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("networkPlugins", networkPluginsValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("strict_loose", strictLooseValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("interfaceState", interfaceStateValidator)
if err != nil {
return err
}
return nil return nil
} }

@ -37,4 +37,10 @@ var (
imageArchitectureValues = []string{"X86_64", "PPC64_LE"} imageArchitectureValues = []string{"X86_64", "PPC64_LE"}
sepFieldTypeValues = []string{"int", "str", "bool", "list", "dict"} sepFieldTypeValues = []string{"int", "str", "bool", "list", "dict"}
networkPluginValues = []string{"flannel", "weawenet", "calico"}
strictLooseValues = []string{"strict", "loose"}
interfaceStateValues = []string{"on", "off"}
) )

@ -158,6 +158,12 @@ type RecordAccount struct {
// Computes // Computes
Computes Computes `json:"computes"` Computes Computes `json:"computes"`
// CPU allocation parameter
CPUAllocationParameter string `json:"cpu_allocation_parameter"`
// CPU allocation ratio
CPUAllocationRatio float64 `json:"cpu_allocation_ratio"`
// Created by // Created by
CreatedBy string `json:"createdBy"` CreatedBy string `json:"createdBy"`
@ -192,7 +198,7 @@ type RecordAccount struct {
ResourceLimits ResourceLimits `json:"resourceLimits"` ResourceLimits ResourceLimits `json:"resourceLimits"`
// Resource types // Resource types
ResourceTypes []string `json:"resourceTypes"` ResTypes []string `json:"resourceTypes"`
// Send access emails // Send access emails
SendAccessEmails bool `json:"sendAccessEmails"` SendAccessEmails bool `json:"sendAccessEmails"`

@ -3,8 +3,6 @@ package account
import ( import (
"context" "context"
"net/http" "net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
) )
@ -26,15 +24,10 @@ func (a Account) Restore(ctx context.Context, req RestoreRequest) (bool, error)
url := "/cloudapi/account/restore" url := "/cloudapi/account/restore"
res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req) _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil { if err != nil {
return false, err return false, err
} }
return result, nil return true, nil
} }

@ -35,11 +35,8 @@ type RecordBasicService struct {
// Grid ID // Grid ID
GID uint64 `json:"gid"` GID uint64 `json:"gid"`
// List of Service Compute Group IDs // List of Service Compute Groups
Groups []uint64 `json:"groups"` Groups ListGroups `json:"groups"`
// List of compute groups by name
GroupsName []string `json:"groupsName"`
// GUID // GUID
GUID uint64 `json:"guid"` GUID uint64 `json:"guid"`
@ -95,6 +92,12 @@ type RecordBasicService struct {
// Main information about Compute // Main information about Compute
type ItemCompute struct { type ItemCompute struct {
// Account ID
AccountID uint64
// Architecture
Architecture string `json:"arch"`
// Compute group ID // Compute group ID
CompGroupID uint64 `json:"compgroupId"` CompGroupID uint64 `json:"compgroupId"`
@ -109,11 +112,47 @@ type ItemCompute struct {
// Name // Name
Name string `json:"name"` Name string `json:"name"`
// Resource group ID
RGID uint64 `json:"rgId"`
// StackID
StackID uint64 `json:"stackId"`
// Status
Status string `json:"status"`
// Tech status
TechStatus string `json:"techStatus"`
} }
// List of Computes // List of Computes
type ListComputes []ItemCompute type ListComputes []ItemCompute
// Main information about Group
type ItemGroup struct {
// Amount of computes
Computes uint64 `json:"computes"`
// Consistency
Consistency bool `json:"consistency"`
// Group ID
ID uint64 `json:"id"`
// Group name
Name string `json:"name"`
// Status
Status string `json:"status"`
// TechStatus
TechStatus string `json:"techStatus"`
}
// List of Groups
type ListGroups []ItemGroup
// Main information about Snapshot // Main information about Snapshot
type ItemSnapshot struct { type ItemSnapshot struct {
// GUID // GUID

@ -0,0 +1,41 @@
package compute
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for getting boot order
type BootOrderGetRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
}
// BootOrderGet gets actual compute boot order information
func (c Compute) BootOrderGet(ctx context.Context, req BootOrderGetRequest) ([]string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
url := "/cloudapi/compute/bootOrderGet"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
orders := make([]string, 0)
err = json.Unmarshal(res, &orders)
if err != nil {
return nil, err
}
return orders, nil
}

@ -0,0 +1,49 @@
package compute
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// Request struct for setting boot order
type BootOrderSetRequest struct {
// ID of compute instance
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// List of boot devices
// Should be one of:
// - cdrom
// - network
// - hd
// Required: true
Order []string `url:"order" json:"order" validate:"min=1,computeOrder"`
}
// BootOrderSet sets compute boot order
func (c Compute) BootOrderSet(ctx context.Context, req BootOrderSetRequest) ([]string, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return nil, validators.ValidationError(validationError)
}
}
url := "/cloudapi/compute/bootOrderSet"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return nil, err
}
orders := make([]string, 0)
err = json.Unmarshal(res, &orders)
if err != nil {
return nil, err
}
return orders, nil
}

@ -0,0 +1,47 @@
package compute
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request struct for changing link state
type ChangeLinkStateRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Interface name or MAC address
// Required: true
Interface string `url:"interface" json:"interface" validate:"required"`
// Interface state
// Must be either "on" or "off"
// Required: true
State string `url:"state" json:"state" validate:"required,interfaceState"`
}
// ChangeLinkState changes the status link virtual of compute
func (c Compute) ChangeLinkState(ctx context.Context, req ChangeLinkStateRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudapi/compute/changeLinkState"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

@ -22,6 +22,11 @@ type DiskAddRequest struct {
// Required: true // Required: true
Size uint64 `url:"size" json:"size" validate:"required"` Size uint64 `url:"size" json:"size" validate:"required"`
// Storage endpoint provider ID
// By default the same with boot disk
// Required: false
SepID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
// Type of the disk // Type of the disk
// Should be one of: // Should be one of:
// - D // - D
@ -29,11 +34,6 @@ type DiskAddRequest struct {
// Required: false // Required: false
DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"` DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"`
// Storage endpoint provider ID
// By default the same with boot disk
// Required: false
SepID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
// Pool name // Pool name
// By default will be chosen automatically // By default will be chosen automatically
// Required: false // Required: false

@ -17,6 +17,10 @@ type DiskAttachRequest struct {
// ID of the disk to attach // ID of the disk to attach
// Required: true // Required: true
DiskID uint64 `url:"diskId" json:"diskId" validate:"required"` DiskID uint64 `url:"diskId" json:"diskId" validate:"required"`
// Type of the disk B;D
// Required: false
DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"`
} }
// DiskAttach attach disk to compute // DiskAttach attach disk to compute

@ -150,6 +150,9 @@ type RecordNetAttach struct {
// Default GW // Default GW
DefGW string `json:"defGw"` DefGW string `json:"defGw"`
// Enabled
Enabled bool `json:"enabled"`
// FLIPGroup ID // FLIPGroup ID
FLIPGroupID uint64 `json:"flipgroupId"` FLIPGroupID uint64 `json:"flipgroupId"`
@ -178,7 +181,7 @@ type RecordNetAttach struct {
NetType string `json:"netType"` NetType string `json:"netType"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// QOS // QOS
QOS QOS `json:"qos"` QOS QOS `json:"qos"`
@ -483,6 +486,9 @@ type ItemVNFInterface struct {
// Default GW // Default GW
DefGW string `json:"defGw"` DefGW string `json:"defGw"`
// Enabled
Enabled bool `json:"enabled"`
// FLIPGroup ID // FLIPGroup ID
FLIPGroupID uint64 `json:"flipgroupId"` FLIPGroupID uint64 `json:"flipgroupId"`
@ -511,7 +517,7 @@ type ItemVNFInterface struct {
NetType string `json:"netType"` NetType string `json:"netType"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// QOS // QOS
QOS QOS `json:"qos"` QOS QOS `json:"qos"`
@ -611,7 +617,7 @@ type ItemComputeDisk struct {
Passwd string `json:"passwd"` Passwd string `json:"passwd"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// Pool // Pool
Pool string `json:"pool"` Pool string `json:"pool"`
@ -895,7 +901,7 @@ type InfoDisk struct {
ID uint64 `json:"id"` ID uint64 `json:"id"`
// PCISlot // PCISlot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
} }
// List information about computes // List information about computes

@ -9,8 +9,8 @@ import (
// Request struct for get list types of disks // Request struct for get list types of disks
type ListTypesRequest struct { type ListTypesRequest struct {
// Show detailed disk types by seps // Show detailed disk types by seps
// Required: false // Required: true
Detailed bool `url:"detailed,omitempty" json:"detailed,omitempty"` Detailed bool `url:"detailed" json:"detailed" validate:"required"`
} }
// ListTypes gets list defined disk types // ListTypes gets list defined disk types

@ -377,7 +377,7 @@ type RecordDisk struct {
ParentID uint64 `json:"parentId"` ParentID uint64 `json:"parentId"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// Pool // Pool
Pool string `json:"pool"` Pool string `json:"pool"`

@ -59,6 +59,9 @@ type ListExtNetComputes []ItemExtNetCompute
// QOS // QOS
type QOS struct { type QOS struct {
// EBurst
EBurst uint64 `json:"eBurst"`
// ERate // ERate
ERate uint64 `json:"eRate"` ERate uint64 `json:"eRate"`

@ -23,6 +23,9 @@ type RecordK8CI struct {
// Name // Name
Name string `json:"name"` Name string `json:"name"`
// Network plugins
NetworkPlugins []string `json:"networkPlugins"`
// Version // Version
Version string `json:"version"` Version string `json:"version"`
} }

@ -26,6 +26,11 @@ type CreateRequest struct {
// Required: true // Required: true
WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required"` WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required"`
// Network plugin
// Must be one of these values: flannel, weawenet, calico
// Required: true
NetworkPlugin string `url:"networkPlugin" json:"networkPlugin" validate:"required,networkPlugin"`
// ID of SEP to create boot disks for master nodes. Uses images SEP ID if not set // ID of SEP to create boot disks for master nodes. Uses images SEP ID if not set
// Required: false // Required: false
MasterSEPID uint64 `url:"masterSepId,omitempty" json:"masterSepId,omitempty"` MasterSEPID uint64 `url:"masterSepId,omitempty" json:"masterSepId,omitempty"`

@ -101,6 +101,9 @@ type RecordK8S struct {
// Name // Name
Name string `json:"name"` Name string `json:"name"`
// Network plugin
NetworkPlugin string `json:"networkPlugin"`
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`
@ -246,6 +249,9 @@ type ItemK8SCluster struct {
// Name // Name
Name string `json:"name"` Name string `json:"name"`
// Network plugin
NetworkPlugin string `json:"networkPlugin"`
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`

@ -59,6 +59,12 @@ type RecordResourceGroup struct {
// Access Control List // Access Control List
ACL ListACL `json:"acl"` ACL ListACL `json:"acl"`
// CPU allocation parameter
CPUAllocationParameter string `json:"cpu_allocation_parameter"`
// CPU allocation ratio
CPUAllocationRatio float64 `json:"cpu_allocation_ratio"`
// Created by // Created by
CreatedBy string `json:"createdBy"` CreatedBy string `json:"createdBy"`
@ -107,12 +113,18 @@ type RecordResourceGroup struct {
// Resource limits // Resource limits
ResourceLimits ResourceLimits `json:"resourceLimits"` ResourceLimits ResourceLimits `json:"resourceLimits"`
// List of resource types
ResTypes []string `json:"resourceTypes"`
// Secret // Secret
Secret string `json:"secret"` Secret string `json:"secret"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`
// UniqPools
UniqPools []string `json:"uniqPools"`
// Updated by // Updated by
UpdatedBy string `json:"updatedBy"` UpdatedBy string `json:"updatedBy"`
@ -124,12 +136,6 @@ type RecordResourceGroup struct {
// List of compute IDs // List of compute IDs
Computes []uint64 `json:"vms"` Computes []uint64 `json:"vms"`
// List of resource types
ResTypes []string `json:"resourceTypes"`
// UniqPools
UniqPools []string `json:"uniqPools"`
} }
// Main information about resource group // Main information about resource group
@ -146,6 +152,12 @@ type ItemResourceGroup struct {
// Access Control List // Access Control List
ACL ListACL `json:"acl"` ACL ListACL `json:"acl"`
// CPU allocation parameter
CPUAllocationParameter string `json:"cpu_allocation_parameter"`
// CPU allocation ratio
CPUAllocationRatio float64 `json:"cpu_allocation_ratio"`
// Created by // Created by
CreatedBy string `json:"createdBy"` CreatedBy string `json:"createdBy"`
@ -194,12 +206,18 @@ type ItemResourceGroup struct {
// Resource limits // Resource limits
ResourceLimits ResourceLimits `json:"resourceLimits"` ResourceLimits ResourceLimits `json:"resourceLimits"`
// List of resource types
ResTypes []string `json:"resourceTypes"`
// Secret // Secret
Secret string `json:"secret"` Secret string `json:"secret"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`
// UniqPools
UniqPools []string `json:"uniqPools"`
// Updated by // Updated by
UpdatedBy string `json:"updatedBy"` UpdatedBy string `json:"updatedBy"`
@ -211,12 +229,6 @@ type ItemResourceGroup struct {
// List of compute IDs // List of compute IDs
Computes []uint64 `json:"vms"` Computes []uint64 `json:"vms"`
// List of resource types
ResTypes []string `json:"resourceTypes"`
// UniqPools
UniqPools []string `json:"uniqPools"`
} }
// List of resource groups // List of resource groups

@ -261,7 +261,7 @@ type ItemVNFInterface struct {
NetType string `json:"netType"` NetType string `json:"netType"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// QOS // QOS
QOS QOS `json:"qos"` QOS QOS `json:"qos"`

@ -123,6 +123,12 @@ type InfoAccount struct {
// Company URL // Company URL
CompanyURL string `json:"companyurl"` CompanyURL string `json:"companyurl"`
// CPU allocation parameter
CPUAllocationParameter string `json:"cpu_allocation_parameter"`
// CPU allocation ratio
CPUAllocationRatio float64 `json:"cpu_allocation_ratio"`
// Created by // Created by
CreatedBy string `json:"createdBy"` CreatedBy string `json:"createdBy"`
@ -154,7 +160,7 @@ type InfoAccount struct {
ResourceLimits ResourceLimits `json:"resourceLimits"` ResourceLimits ResourceLimits `json:"resourceLimits"`
// Resource types // Resource types
ResourceTypes []string `json:"resourceTypes"` ResTypes []string `json:"resourceTypes"`
// Send access emails // Send access emails
SendAccessEmails bool `json:"sendAccessEmails"` SendAccessEmails bool `json:"sendAccessEmails"`

@ -0,0 +1,45 @@
package account
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request for setting CPU allocation parameter
type SetCPUAllocationParameterRequest struct {
// Account ID
// Required: true
AccountID uint64 `url:"accountId" json:"accoutnId" validate:"required"`
// CPU allocation parameter.
// If "strict" VM can't be run if not enough CPU resources.
// "loose" allow running VM if not enough resources.
// Required: true
StrictLoose string `url:"strict_loose" json:"strict_loose" validate:"required,strict_loose"`
}
// SetCPUAllocationParameter sets CPU allocation parameter
func (a Account) SetCPUAllocationParameter(ctx context.Context, req SetCPUAllocationParameterRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/account/setCpuAllocationParameter"
res, err := a.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 account
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request for setting CPU allocation ratio
type SetCPUAllocationRatioRequest struct {
// Account ID
// Required: true
AccountID uint64 `url:"accountId" json:"accoutnId" validate:"required"`
// CPU allocation ratio, i.e. one pCPU = ratio*vCPU
// Required: true
Ratio float64 `url:"ratio" json:"ratio" validate:"required"`
}
// SetCPUAllocationRatio sets CPU allocation ratio
func (a Account) SetCPUAllocationRatio(ctx context.Context, req SetCPUAllocationRatioRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/account/setCpuAllocationRatio"
res, err := a.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,47 @@
package compute
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request struct for changing link state
type ChangeLinkStateRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Interface name or MAC address
// Required: true
Interface string `url:"interface" json:"interface" validate:"required"`
// Interface state
// Must be either "on" or "off"
// Required: true
State string `url:"state" json:"state" validate:"required,interfaceState"`
}
// ChangeLinkState changes the status link virtual of compute
func (c Compute) ChangeLinkState(ctx context.Context, req ChangeLinkStateRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/compute/changeLinkState"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

@ -12,27 +12,27 @@ import (
type DiskAddRequest struct { type DiskAddRequest struct {
// ID of compute instance // ID of compute instance
// Required: true // Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Name for disk // Name for disk
// Required: true // Required: true
DiskName string `url:"diskName" json:"diskName" validate:"required"` DiskName string `url:"diskName" json:"diskName" validate:"required"`
// Disk size in GB // Disk size in GB
// Required: true // Required: true
Size uint64 `url:"size" json:"size" validate:"required"` Size uint64 `url:"size" json:"size" validate:"required"`
// Storage endpoint provider ID
// By default the same with boot disk
// Required: false
SepID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
// Type of the disk // Type of the disk
// Should be one of: // Should be one of:
// - D // - D
// - B // - B
// Required: false // Required: false
DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"` DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"`
// Storage endpoint provider ID
// By default the same with boot disk
// Required: false
SepID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"`
// Pool name // Pool name
// By default will be chosen automatically // By default will be chosen automatically

@ -147,7 +147,7 @@ type RecordNetAttach struct {
NetType string `json:"netType"` NetType string `json:"netType"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// QOS // QOS
QOS QOS `json:"qos"` QOS QOS `json:"qos"`
@ -396,7 +396,7 @@ type ItemDisk struct {
Password string `json:"passwd"` Password string `json:"passwd"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// Pool // Pool
Pool string `json:"pool"` Pool string `json:"pool"`
@ -498,7 +498,7 @@ type ItemInterface struct {
NetType string `json:"netType"` NetType string `json:"netType"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// QOS // QOS
QOS QOS `json:"qos"` QOS QOS `json:"qos"`
@ -738,7 +738,7 @@ type InfoDisk struct {
ID uint64 `json:"id"` ID uint64 `json:"id"`
// PCISlot // PCISlot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
} }
// List computes // List computes

@ -0,0 +1,45 @@
package grid
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request for setting CPU allocation parameter
type SetCPUAllocationParameterRequest struct {
// Grid ID
// Required: true
GridID uint64 `url:"gridId" json:"gridId" validate:"required"`
// CPU allocation parameter.
// If "strict" VM can't be run if not enough CPU resources.
// "loose" allow running VM if not enough resources.
// Required: true
StrictLoose string `url:"strict_loose" json:"strict_loose" validate:"required,strict_loose"`
}
// SetCPUAllocationParameter sets CPU allocation parameter
func (g Grid) SetCPUAllocationParameter(ctx context.Context, req SetCPUAllocationParameterRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/grid/setCpuAllocationParameter"
res, err := g.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 grid
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request for setting CPU allocation ratio for computes
type SetCPUAllocationRatioForVMRequest struct {
// Grid ID
// Required: true
GridID uint64 `url:"gridId" json:"gridId" validate:"required"`
// Default CPU allocation ratio for computes
// Required: true
Ratio float64 `url:"ratio" json:"ratio" validate:"required"`
}
// SetCPUAllocationRatio sets CPU allocation ratio for computes
func (g Grid) SetCPUAllocationRatioForVM(ctx context.Context, req SetCPUAllocationRatioForVMRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/grid/setCpuAllocationRatioForVM"
res, err := g.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
}

@ -34,6 +34,11 @@ type CreateRequest struct {
// Required: true // Required: true
MasterDriver string `url:"masterDriver" json:"masterDriver" validate:"driver"` MasterDriver string `url:"masterDriver" json:"masterDriver" validate:"driver"`
// Network plugins
// Values of slice must be flannel, weawenet or calico
//Required: true
NetworkPlugins []string `url:"networkPlugins" json:"networkPlugins" validate:"required,networkPlugins"`
// Image ID for worker K8S node // Image ID for worker K8S node
// Required: true // Required: true
WorkerImageID uint64 `url:"workerImageId" json:"workerImageId" validate:"required"` WorkerImageID uint64 `url:"workerImageId" json:"workerImageId" validate:"required"`

@ -26,6 +26,11 @@ type CreateRequest struct {
// Required: true // Required: true
WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required"` WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required"`
// Network plugin
// Must be one of these values: flunnel, weawenet, calico
// Required: true
NetworkPlugin string `url:"networkPlugin" json:"networkPlugin" validate:"required,networkPlugin"`
// ID of SEP to create boot disks for master nodes. // ID of SEP to create boot disks for master nodes.
// Uses images SEP ID if not set // Uses images SEP ID if not set
// Required: false // Required: false

@ -101,6 +101,9 @@ type RecordK8S struct {
// Name // Name
Name string `json:"name"` Name string `json:"name"`
// Network plugin
NetworkPlugin string `json:"networkPlugin"`
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`
@ -245,6 +248,9 @@ type ItemK8S struct {
// Name // Name
Name string `json:"name"` Name string `json:"name"`
// Network plugin
NetworkPlugin string `json:"networkPlugin"`
// Resource group ID // Resource group ID
RGID uint64 `json:"rgId"` RGID uint64 `json:"rgId"`

@ -131,6 +131,12 @@ type ItemRG struct {
// List ACL // List ACL
ACL ListACL `json:"acl"` ACL ListACL `json:"acl"`
// CPU allocation parameter
CPUAllocationParameter string `json:"cpu_allocation_parameter"`
// CPU allocation ratio
CPUAllocationRatio float64 `json:"cpu_allocation_ratio"`
// Created by // Created by
CreatedBy string `json:"createdBy"` CreatedBy string `json:"createdBy"`
@ -176,12 +182,18 @@ type ItemRG struct {
// Resource limits // Resource limits
ResourceLimits ResourceLimits `json:"resourceLimits"` ResourceLimits ResourceLimits `json:"resourceLimits"`
// Resource types list
ResTypes []string `json:"resourceTypes"`
// Secret // Secret
Secret string `json:"secret"` Secret string `json:"secret"`
// Status // Status
Status string `json:"status"` Status string `json:"status"`
// Uniq pools
UniqPools []string `json:"uniqPools"`
// Updated by // Updated by
UpdatedBy string `json:"updatedBy"` UpdatedBy string `json:"updatedBy"`
@ -193,12 +205,6 @@ type ItemRG struct {
// List virtual machine IDs // List virtual machine IDs
VMs []uint64 `json:"vms"` VMs []uint64 `json:"vms"`
// Resource types list
ResTypes []string `json:"resourceTypes"`
// Uniq pools
UniqPools []string `json:"uniqPools"`
} }
// List resource groups // List resource groups

@ -0,0 +1,45 @@
package rg
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request for setting CPU allocation parameter
type SetCPUAllocationParameterRequest struct {
// Resource group ID
// Required: true
RGID uint64 `url:"rgId" json:"rgId" validate:"required"`
// CPU allocation parameter.
// If "strict" VM can't be run if not enough CPU resources.
// "loose" allow running VM if not enough resources.
// Required: true
StrictLoose string `url:"strict_loose" json:"strict_loose" validate:"required,strict_loose"`
}
// SetCPUAllocationParameter sets CPU allocation parameter
func (r RG) SetCPUAllocationParameter(ctx context.Context, req SetCPUAllocationParameterRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/rg/setCpuAllocationParameter"
res, err := r.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 rg
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
"strconv"
)
// Request for setting CPU allocation ratio
type SetCPUAllocationRatioRequest struct {
// Resource group ID
// Required: true
RGID uint64 `url:"rgId" json:"rgId" validate:"required"`
// CPU allocation ratio, i.e. one pCPU = ratio*vCPU
// Required: true
Ratio float64 `url:"ratio" json:"ratio" validate:"required"`
}
// SetCPUAllocationRatio sets CPU allocation ratio
func (r RG) SetCPUAllocationRatio(ctx context.Context, req SetCPUAllocationRatioRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
for _, validationError := range validators.GetErrors(err) {
return false, validators.ValidationError(validationError)
}
}
url := "/cloudbroker/rg/setCpuAllocationRatio"
res, err := r.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
}

@ -138,7 +138,7 @@ type ItemInterface struct {
NetType string `json:"netType"` NetType string `json:"netType"`
// PCI slot // PCI slot
PCISlot uint64 `json:"pciSlot"` PCISlot int64 `json:"pciSlot"`
// QOS // QOS
QOS QOS `json:"qos"` QOS QOS `json:"qos"`

Loading…
Cancel
Save