From aaf0857ff070c33a3a9a1a12c324a127bd0beaa9 Mon Sep 17 00:00:00 2001 From: Tim Tkachev Date: Fri, 28 Apr 2023 11:46:58 +0300 Subject: [PATCH] v1.4.0 --- CHANGELOG.md | 61 +++++++++++-------- README.md | 1 + internal/validators/custom.go | 41 +++++++++++++ internal/validators/messages.go | 26 ++++++++ internal/validators/validator.go | 20 ++++++ internal/validators/values.go | 6 ++ pkg/cloudapi/account/models.go | 8 ++- pkg/cloudapi/account/restore.go | 11 +--- pkg/cloudapi/bservice/models.go | 49 +++++++++++++-- pkg/cloudapi/compute/boot_order_get.go | 41 +++++++++++++ pkg/cloudapi/compute/boot_order_set.go | 49 +++++++++++++++ pkg/cloudapi/compute/change_link_state.go | 47 ++++++++++++++ pkg/cloudapi/compute/disk_add.go | 10 +-- pkg/cloudapi/compute/disk_attach.go | 4 ++ pkg/cloudapi/compute/models.go | 14 +++-- pkg/cloudapi/disks/list_types.go | 4 +- pkg/cloudapi/disks/models.go | 2 +- pkg/cloudapi/extnet/models.go | 3 + pkg/cloudapi/k8ci/models.go | 3 + pkg/cloudapi/k8s/create.go | 5 ++ pkg/cloudapi/k8s/models.go | 6 ++ pkg/cloudapi/rg/models.go | 36 +++++++---- pkg/cloudapi/vins/models.go | 2 +- pkg/cloudbroker/account/models.go | 8 ++- .../account/set_cpu_allocation_parameter.go | 45 ++++++++++++++ .../account/set_cpu_allocation_ratio.go | 43 +++++++++++++ pkg/cloudbroker/compute/change_link_state.go | 47 ++++++++++++++ pkg/cloudbroker/compute/disk_add.go | 18 +++--- pkg/cloudbroker/compute/models.go | 8 +-- .../grid/set_cpu_allocation_parameter.go | 45 ++++++++++++++ .../grid/set_cpu_allocation_ratio_for_vm.go | 43 +++++++++++++ pkg/cloudbroker/k8ci/create.go | 5 ++ pkg/cloudbroker/k8s/create.go | 5 ++ pkg/cloudbroker/k8s/models.go | 6 ++ pkg/cloudbroker/rg/models.go | 18 ++++-- .../rg/set_cpu_allocation_parameter.go | 45 ++++++++++++++ .../rg/set_cpu_allocation_ratio.go | 43 +++++++++++++ pkg/cloudbroker/vins/models.go | 2 +- 38 files changed, 744 insertions(+), 86 deletions(-) create mode 100644 pkg/cloudapi/compute/boot_order_get.go create mode 100644 pkg/cloudapi/compute/boot_order_set.go create mode 100644 pkg/cloudapi/compute/change_link_state.go create mode 100644 pkg/cloudbroker/account/set_cpu_allocation_parameter.go create mode 100644 pkg/cloudbroker/account/set_cpu_allocation_ratio.go create mode 100644 pkg/cloudbroker/compute/change_link_state.go create mode 100644 pkg/cloudbroker/grid/set_cpu_allocation_parameter.go create mode 100644 pkg/cloudbroker/grid/set_cpu_allocation_ratio_for_vm.go create mode 100644 pkg/cloudbroker/rg/set_cpu_allocation_parameter.go create mode 100644 pkg/cloudbroker/rg/set_cpu_allocation_ratio.go diff --git a/CHANGELOG.md b/CHANGELOG.md index cf8bcf9..6d4ff33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,33 +1,44 @@ -## Version 1.3.1 +## Version 1.4.0 ### Features -- Added FilterByGID for cloudapi/locations/list handler response, used to filter locations by specified GID. -- Added /cloudbroker/pcidevices endpoints support - - /cloudbroker/pcidevices/create - - /cloudbroker/pcidevices/delete - - /cloudbroker/pcidevices/disable - - /cloudbroker/pcidevices/enable - - /cloudbroker/pcidevices/list -- Added /cloudbroker/vgpu endpoints support - - /cloudbroker/vgpu/allocate - - /cloudbroker/vgpu/create - - /cloudbroker/vgpu/deallocate - - /cloudbroker/vgpu/destroy - - /cloudbroker/vgpu/list +- Actualized SDK to platform version 3.8.6: + - Added required field networkPlugin to requests in: + - /cloudapi/cloudbroker/k8s/create; + - /cloudbroker/k8ci/create. + - Added networkPlugin field in models: + - /cloudapi/cloudbroker/k8s; + - /cloudbroker/k8ci. + - Updated list of compute objects fields and added list of group objects in bservice model. + - Added cpuAllocationRatio and cpuAllocationParameter fields in models: + - /cloudapi/cloudbroker/rg; + - /cloudapi/cloudbroker/account. + - Added setCpuAllocationRatio endpoint support in: + - /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 -- Fixed cloudbroker/cloudapi/account/update request model types. -- Fixed cloudbroker/cloudapi/rg/update request model types. -- Fixed cloudapi/account DeactivationTime field type. -- 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. +- Fixed pciSlot field type in models: + - cloudapi/cloudbroker/computes; + - cloudapi/cloudbroker/vins. + +- Fixed handling cloudapi/account/restore endpoint response (panicked when marhalling). -### 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. diff --git a/README.md b/README.md index 1c5ea30..141f161 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,7 @@ Decort SDK - это библиотека, написанная на языке G - Версия 1.1.x Decort-SDK соответствует 3.8.5 версии платформы - Версия 1.2.x Decort-SDK соответствует 3.8.5 версии платформы - Версия 1.3.x Decort-SDK соответствует 3.8.5 версии платформы + - Версия 1.4.x Decort-SDK соответствует 3.8.6 версии платформы ## Оглавление diff --git a/internal/validators/custom.go b/internal/validators/custom.go index 6705c43..1673dd1 100644 --- a/internal/validators/custom.go +++ b/internal/validators/custom.go @@ -3,6 +3,7 @@ package validators import ( "github.com/go-playground/validator/v10" "regexp" + "strings" ) // protoValidator is used to validate Proto fields. @@ -215,3 +216,43 @@ func hwPathValidator(fe validator.FieldLevel) bool { 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) +} diff --git a/internal/validators/messages.go b/internal/validators/messages.go index 5c59414..88be662 100644 --- a/internal/validators/messages.go +++ b/internal/validators/messages.go @@ -187,10 +187,36 @@ func errorMessage(fe validator.FieldError) string { fe.Field(), joinValues(sepFieldTypeValues)) + // HWPath Validators case "hwPath": return fmt.Sprintf("%s %s must be in format 0000:1f:2b.0", prefix, 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() diff --git a/internal/validators/validator.go b/internal/validators/validator.go index 8a27090..b28e238 100644 --- a/internal/validators/validator.go +++ b/internal/validators/validator.go @@ -164,5 +164,25 @@ func registerAllValidators(validate *validator.Validate) error { 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 } diff --git a/internal/validators/values.go b/internal/validators/values.go index b56e58d..c2032de 100644 --- a/internal/validators/values.go +++ b/internal/validators/values.go @@ -37,4 +37,10 @@ var ( imageArchitectureValues = []string{"X86_64", "PPC64_LE"} sepFieldTypeValues = []string{"int", "str", "bool", "list", "dict"} + + networkPluginValues = []string{"flannel", "weawenet", "calico"} + + strictLooseValues = []string{"strict", "loose"} + + interfaceStateValues = []string{"on", "off"} ) diff --git a/pkg/cloudapi/account/models.go b/pkg/cloudapi/account/models.go index 5302c63..e2dec19 100644 --- a/pkg/cloudapi/account/models.go +++ b/pkg/cloudapi/account/models.go @@ -158,6 +158,12 @@ type RecordAccount struct { // 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 CreatedBy string `json:"createdBy"` @@ -192,7 +198,7 @@ type RecordAccount struct { ResourceLimits ResourceLimits `json:"resourceLimits"` // Resource types - ResourceTypes []string `json:"resourceTypes"` + ResTypes []string `json:"resourceTypes"` // Send access emails SendAccessEmails bool `json:"sendAccessEmails"` diff --git a/pkg/cloudapi/account/restore.go b/pkg/cloudapi/account/restore.go index c0d0bd3..2c8db00 100644 --- a/pkg/cloudapi/account/restore.go +++ b/pkg/cloudapi/account/restore.go @@ -3,8 +3,6 @@ package account import ( "context" "net/http" - "strconv" - "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" - res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return false, err - } - - result, err := strconv.ParseBool(string(res)) + _, err = a.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { return false, err } - return result, nil + return true, nil } diff --git a/pkg/cloudapi/bservice/models.go b/pkg/cloudapi/bservice/models.go index 9741020..f0aa48f 100644 --- a/pkg/cloudapi/bservice/models.go +++ b/pkg/cloudapi/bservice/models.go @@ -35,11 +35,8 @@ type RecordBasicService struct { // Grid ID GID uint64 `json:"gid"` - // List of Service Compute Group IDs - Groups []uint64 `json:"groups"` - - // List of compute groups by name - GroupsName []string `json:"groupsName"` + // List of Service Compute Groups + Groups ListGroups `json:"groups"` // GUID GUID uint64 `json:"guid"` @@ -95,6 +92,12 @@ type RecordBasicService struct { // Main information about Compute type ItemCompute struct { + // Account ID + AccountID uint64 + + // Architecture + Architecture string `json:"arch"` + // Compute group ID CompGroupID uint64 `json:"compgroupId"` @@ -109,11 +112,47 @@ type ItemCompute struct { // 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 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 type ItemSnapshot struct { // GUID diff --git a/pkg/cloudapi/compute/boot_order_get.go b/pkg/cloudapi/compute/boot_order_get.go new file mode 100644 index 0000000..e5905e8 --- /dev/null +++ b/pkg/cloudapi/compute/boot_order_get.go @@ -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 +} diff --git a/pkg/cloudapi/compute/boot_order_set.go b/pkg/cloudapi/compute/boot_order_set.go new file mode 100644 index 0000000..533103d --- /dev/null +++ b/pkg/cloudapi/compute/boot_order_set.go @@ -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 +} diff --git a/pkg/cloudapi/compute/change_link_state.go b/pkg/cloudapi/compute/change_link_state.go new file mode 100644 index 0000000..1fa823d --- /dev/null +++ b/pkg/cloudapi/compute/change_link_state.go @@ -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 +} diff --git a/pkg/cloudapi/compute/disk_add.go b/pkg/cloudapi/compute/disk_add.go index 45895ec..9e88e81 100644 --- a/pkg/cloudapi/compute/disk_add.go +++ b/pkg/cloudapi/compute/disk_add.go @@ -22,6 +22,11 @@ type DiskAddRequest struct { // Required: true 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 // Should be one of: // - D @@ -29,11 +34,6 @@ type DiskAddRequest struct { // Required: false 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 // By default will be chosen automatically // Required: false diff --git a/pkg/cloudapi/compute/disk_attach.go b/pkg/cloudapi/compute/disk_attach.go index 150a8e1..51355c4 100644 --- a/pkg/cloudapi/compute/disk_attach.go +++ b/pkg/cloudapi/compute/disk_attach.go @@ -17,6 +17,10 @@ type DiskAttachRequest struct { // ID of the disk to attach // Required: true 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 diff --git a/pkg/cloudapi/compute/models.go b/pkg/cloudapi/compute/models.go index 8d31cfc..e9d5230 100644 --- a/pkg/cloudapi/compute/models.go +++ b/pkg/cloudapi/compute/models.go @@ -150,6 +150,9 @@ type RecordNetAttach struct { // Default GW DefGW string `json:"defGw"` + // Enabled + Enabled bool `json:"enabled"` + // FLIPGroup ID FLIPGroupID uint64 `json:"flipgroupId"` @@ -178,7 +181,7 @@ type RecordNetAttach struct { NetType string `json:"netType"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // QOS QOS QOS `json:"qos"` @@ -483,6 +486,9 @@ type ItemVNFInterface struct { // Default GW DefGW string `json:"defGw"` + // Enabled + Enabled bool `json:"enabled"` + // FLIPGroup ID FLIPGroupID uint64 `json:"flipgroupId"` @@ -511,7 +517,7 @@ type ItemVNFInterface struct { NetType string `json:"netType"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // QOS QOS QOS `json:"qos"` @@ -611,7 +617,7 @@ type ItemComputeDisk struct { Passwd string `json:"passwd"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // Pool Pool string `json:"pool"` @@ -895,7 +901,7 @@ type InfoDisk struct { ID uint64 `json:"id"` // PCISlot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` } // List information about computes diff --git a/pkg/cloudapi/disks/list_types.go b/pkg/cloudapi/disks/list_types.go index 71c4819..ee91509 100644 --- a/pkg/cloudapi/disks/list_types.go +++ b/pkg/cloudapi/disks/list_types.go @@ -9,8 +9,8 @@ import ( // Request struct for get list types of disks type ListTypesRequest struct { // Show detailed disk types by seps - // Required: false - Detailed bool `url:"detailed,omitempty" json:"detailed,omitempty"` + // Required: true + Detailed bool `url:"detailed" json:"detailed" validate:"required"` } // ListTypes gets list defined disk types diff --git a/pkg/cloudapi/disks/models.go b/pkg/cloudapi/disks/models.go index 1ef3894..1c84e4c 100644 --- a/pkg/cloudapi/disks/models.go +++ b/pkg/cloudapi/disks/models.go @@ -377,7 +377,7 @@ type RecordDisk struct { ParentID uint64 `json:"parentId"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // Pool Pool string `json:"pool"` diff --git a/pkg/cloudapi/extnet/models.go b/pkg/cloudapi/extnet/models.go index 29505b7..54f2ebb 100644 --- a/pkg/cloudapi/extnet/models.go +++ b/pkg/cloudapi/extnet/models.go @@ -59,6 +59,9 @@ type ListExtNetComputes []ItemExtNetCompute // QOS type QOS struct { + // EBurst + EBurst uint64 `json:"eBurst"` + // ERate ERate uint64 `json:"eRate"` diff --git a/pkg/cloudapi/k8ci/models.go b/pkg/cloudapi/k8ci/models.go index 88f3776..bd7cc95 100644 --- a/pkg/cloudapi/k8ci/models.go +++ b/pkg/cloudapi/k8ci/models.go @@ -23,6 +23,9 @@ type RecordK8CI struct { // Name Name string `json:"name"` + // Network plugins + NetworkPlugins []string `json:"networkPlugins"` + // Version Version string `json:"version"` } diff --git a/pkg/cloudapi/k8s/create.go b/pkg/cloudapi/k8s/create.go index 5d41f3f..fb55622 100644 --- a/pkg/cloudapi/k8s/create.go +++ b/pkg/cloudapi/k8s/create.go @@ -26,6 +26,11 @@ type CreateRequest struct { // Required: true 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 // Required: false MasterSEPID uint64 `url:"masterSepId,omitempty" json:"masterSepId,omitempty"` diff --git a/pkg/cloudapi/k8s/models.go b/pkg/cloudapi/k8s/models.go index 2578149..165ab3e 100644 --- a/pkg/cloudapi/k8s/models.go +++ b/pkg/cloudapi/k8s/models.go @@ -101,6 +101,9 @@ type RecordK8S struct { // Name Name string `json:"name"` + // Network plugin + NetworkPlugin string `json:"networkPlugin"` + // Resource group ID RGID uint64 `json:"rgId"` @@ -246,6 +249,9 @@ type ItemK8SCluster struct { // Name Name string `json:"name"` + // Network plugin + NetworkPlugin string `json:"networkPlugin"` + // Resource group ID RGID uint64 `json:"rgId"` diff --git a/pkg/cloudapi/rg/models.go b/pkg/cloudapi/rg/models.go index 677e1df..bc6c196 100644 --- a/pkg/cloudapi/rg/models.go +++ b/pkg/cloudapi/rg/models.go @@ -59,6 +59,12 @@ type RecordResourceGroup struct { // Access Control List ACL ListACL `json:"acl"` + // CPU allocation parameter + CPUAllocationParameter string `json:"cpu_allocation_parameter"` + + // CPU allocation ratio + CPUAllocationRatio float64 `json:"cpu_allocation_ratio"` + // Created by CreatedBy string `json:"createdBy"` @@ -107,12 +113,18 @@ type RecordResourceGroup struct { // Resource limits ResourceLimits ResourceLimits `json:"resourceLimits"` + // List of resource types + ResTypes []string `json:"resourceTypes"` + // Secret Secret string `json:"secret"` // Status Status string `json:"status"` + // UniqPools + UniqPools []string `json:"uniqPools"` + // Updated by UpdatedBy string `json:"updatedBy"` @@ -124,12 +136,6 @@ type RecordResourceGroup struct { // List of compute IDs Computes []uint64 `json:"vms"` - - // List of resource types - ResTypes []string `json:"resourceTypes"` - - // UniqPools - UniqPools []string `json:"uniqPools"` } // Main information about resource group @@ -146,6 +152,12 @@ type ItemResourceGroup struct { // Access Control List ACL ListACL `json:"acl"` + // CPU allocation parameter + CPUAllocationParameter string `json:"cpu_allocation_parameter"` + + // CPU allocation ratio + CPUAllocationRatio float64 `json:"cpu_allocation_ratio"` + // Created by CreatedBy string `json:"createdBy"` @@ -194,12 +206,18 @@ type ItemResourceGroup struct { // Resource limits ResourceLimits ResourceLimits `json:"resourceLimits"` + // List of resource types + ResTypes []string `json:"resourceTypes"` + // Secret Secret string `json:"secret"` // Status Status string `json:"status"` + // UniqPools + UniqPools []string `json:"uniqPools"` + // Updated by UpdatedBy string `json:"updatedBy"` @@ -211,12 +229,6 @@ type ItemResourceGroup struct { // List of compute IDs Computes []uint64 `json:"vms"` - - // List of resource types - ResTypes []string `json:"resourceTypes"` - - // UniqPools - UniqPools []string `json:"uniqPools"` } // List of resource groups diff --git a/pkg/cloudapi/vins/models.go b/pkg/cloudapi/vins/models.go index 8499474..e01936b 100644 --- a/pkg/cloudapi/vins/models.go +++ b/pkg/cloudapi/vins/models.go @@ -261,7 +261,7 @@ type ItemVNFInterface struct { NetType string `json:"netType"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // QOS QOS QOS `json:"qos"` diff --git a/pkg/cloudbroker/account/models.go b/pkg/cloudbroker/account/models.go index d3acfb6..21ba071 100644 --- a/pkg/cloudbroker/account/models.go +++ b/pkg/cloudbroker/account/models.go @@ -123,6 +123,12 @@ type InfoAccount struct { // Company URL CompanyURL string `json:"companyurl"` + // CPU allocation parameter + CPUAllocationParameter string `json:"cpu_allocation_parameter"` + + // CPU allocation ratio + CPUAllocationRatio float64 `json:"cpu_allocation_ratio"` + // Created by CreatedBy string `json:"createdBy"` @@ -154,7 +160,7 @@ type InfoAccount struct { ResourceLimits ResourceLimits `json:"resourceLimits"` // Resource types - ResourceTypes []string `json:"resourceTypes"` + ResTypes []string `json:"resourceTypes"` // Send access emails SendAccessEmails bool `json:"sendAccessEmails"` diff --git a/pkg/cloudbroker/account/set_cpu_allocation_parameter.go b/pkg/cloudbroker/account/set_cpu_allocation_parameter.go new file mode 100644 index 0000000..04c28db --- /dev/null +++ b/pkg/cloudbroker/account/set_cpu_allocation_parameter.go @@ -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 +} diff --git a/pkg/cloudbroker/account/set_cpu_allocation_ratio.go b/pkg/cloudbroker/account/set_cpu_allocation_ratio.go new file mode 100644 index 0000000..d76156b --- /dev/null +++ b/pkg/cloudbroker/account/set_cpu_allocation_ratio.go @@ -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 +} diff --git a/pkg/cloudbroker/compute/change_link_state.go b/pkg/cloudbroker/compute/change_link_state.go new file mode 100644 index 0000000..9817765 --- /dev/null +++ b/pkg/cloudbroker/compute/change_link_state.go @@ -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 +} diff --git a/pkg/cloudbroker/compute/disk_add.go b/pkg/cloudbroker/compute/disk_add.go index 8ba915c..8bb7eb1 100644 --- a/pkg/cloudbroker/compute/disk_add.go +++ b/pkg/cloudbroker/compute/disk_add.go @@ -12,27 +12,27 @@ import ( type DiskAddRequest struct { // ID of compute instance // Required: true - ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` + ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` // Name for disk // Required: true - DiskName string `url:"diskName" json:"diskName" validate:"required"` + DiskName string `url:"diskName" json:"diskName" validate:"required"` // Disk size in GB // 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 // Should be one of: // - D // - B // Required: false - 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"` + DiskType string `url:"diskType,omitempty" json:"diskType,omitempty" validate:"omitempty,computeDiskType"` // Pool name // By default will be chosen automatically diff --git a/pkg/cloudbroker/compute/models.go b/pkg/cloudbroker/compute/models.go index 947db6c..2cb4098 100644 --- a/pkg/cloudbroker/compute/models.go +++ b/pkg/cloudbroker/compute/models.go @@ -147,7 +147,7 @@ type RecordNetAttach struct { NetType string `json:"netType"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // QOS QOS QOS `json:"qos"` @@ -396,7 +396,7 @@ type ItemDisk struct { Password string `json:"passwd"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // Pool Pool string `json:"pool"` @@ -498,7 +498,7 @@ type ItemInterface struct { NetType string `json:"netType"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // QOS QOS QOS `json:"qos"` @@ -738,7 +738,7 @@ type InfoDisk struct { ID uint64 `json:"id"` // PCISlot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` } // List computes diff --git a/pkg/cloudbroker/grid/set_cpu_allocation_parameter.go b/pkg/cloudbroker/grid/set_cpu_allocation_parameter.go new file mode 100644 index 0000000..6a7b223 --- /dev/null +++ b/pkg/cloudbroker/grid/set_cpu_allocation_parameter.go @@ -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 +} diff --git a/pkg/cloudbroker/grid/set_cpu_allocation_ratio_for_vm.go b/pkg/cloudbroker/grid/set_cpu_allocation_ratio_for_vm.go new file mode 100644 index 0000000..5c8fefb --- /dev/null +++ b/pkg/cloudbroker/grid/set_cpu_allocation_ratio_for_vm.go @@ -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 +} diff --git a/pkg/cloudbroker/k8ci/create.go b/pkg/cloudbroker/k8ci/create.go index f30ff5a..bcbab08 100644 --- a/pkg/cloudbroker/k8ci/create.go +++ b/pkg/cloudbroker/k8ci/create.go @@ -34,6 +34,11 @@ type CreateRequest struct { // Required: true 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 // Required: true WorkerImageID uint64 `url:"workerImageId" json:"workerImageId" validate:"required"` diff --git a/pkg/cloudbroker/k8s/create.go b/pkg/cloudbroker/k8s/create.go index 45f17d3..a4274e4 100644 --- a/pkg/cloudbroker/k8s/create.go +++ b/pkg/cloudbroker/k8s/create.go @@ -26,6 +26,11 @@ type CreateRequest struct { // Required: true 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. // Uses images SEP ID if not set // Required: false diff --git a/pkg/cloudbroker/k8s/models.go b/pkg/cloudbroker/k8s/models.go index e473e4e..3cd9299 100644 --- a/pkg/cloudbroker/k8s/models.go +++ b/pkg/cloudbroker/k8s/models.go @@ -101,6 +101,9 @@ type RecordK8S struct { // Name Name string `json:"name"` + // Network plugin + NetworkPlugin string `json:"networkPlugin"` + // Resource group ID RGID uint64 `json:"rgId"` @@ -245,6 +248,9 @@ type ItemK8S struct { // Name Name string `json:"name"` + // Network plugin + NetworkPlugin string `json:"networkPlugin"` + // Resource group ID RGID uint64 `json:"rgId"` diff --git a/pkg/cloudbroker/rg/models.go b/pkg/cloudbroker/rg/models.go index ab965d6..92816cc 100644 --- a/pkg/cloudbroker/rg/models.go +++ b/pkg/cloudbroker/rg/models.go @@ -131,6 +131,12 @@ type ItemRG struct { // List 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 CreatedBy string `json:"createdBy"` @@ -176,12 +182,18 @@ type ItemRG struct { // Resource limits ResourceLimits ResourceLimits `json:"resourceLimits"` + // Resource types list + ResTypes []string `json:"resourceTypes"` + // Secret Secret string `json:"secret"` // Status Status string `json:"status"` + // Uniq pools + UniqPools []string `json:"uniqPools"` + // Updated by UpdatedBy string `json:"updatedBy"` @@ -193,12 +205,6 @@ type ItemRG struct { // List virtual machine IDs VMs []uint64 `json:"vms"` - - // Resource types list - ResTypes []string `json:"resourceTypes"` - - // Uniq pools - UniqPools []string `json:"uniqPools"` } // List resource groups diff --git a/pkg/cloudbroker/rg/set_cpu_allocation_parameter.go b/pkg/cloudbroker/rg/set_cpu_allocation_parameter.go new file mode 100644 index 0000000..4bc802c --- /dev/null +++ b/pkg/cloudbroker/rg/set_cpu_allocation_parameter.go @@ -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 +} diff --git a/pkg/cloudbroker/rg/set_cpu_allocation_ratio.go b/pkg/cloudbroker/rg/set_cpu_allocation_ratio.go new file mode 100644 index 0000000..6246a8a --- /dev/null +++ b/pkg/cloudbroker/rg/set_cpu_allocation_ratio.go @@ -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 +} diff --git a/pkg/cloudbroker/vins/models.go b/pkg/cloudbroker/vins/models.go index 8b5a03b..3f20491 100644 --- a/pkg/cloudbroker/vins/models.go +++ b/pkg/cloudbroker/vins/models.go @@ -138,7 +138,7 @@ type ItemInterface struct { NetType string `json:"netType"` // PCI slot - PCISlot uint64 `json:"pciSlot"` + PCISlot int64 `json:"pciSlot"` // QOS QOS QOS `json:"qos"`