You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.0 KiB
98 lines
3.0 KiB
package k8s
|
|
|
|
import (
|
|
"context"
|
|
"net/http"
|
|
|
|
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v12/internal/validators"
|
|
)
|
|
|
|
// WorkersGroupAddRequest struct to add workers group
|
|
type WorkersGroupAddRequest struct {
|
|
// Kubernetes cluster ID
|
|
// Required: true
|
|
K8SID uint64 `url:"k8sId" json:"k8sId" validate:"required"`
|
|
|
|
// Worker group name
|
|
// Required: true
|
|
Name string `url:"name" json:"name" validate:"required"`
|
|
|
|
// ID of the chosen storage policy
|
|
// Required: true
|
|
StoragePolicyID uint64 `url:"storage_policy_id" json:"storage_policy_id" validate:"required"`
|
|
|
|
// ID of SEP to create boot disks for default worker nodes group. Uses images SEP ID if not set
|
|
// Required: false
|
|
WorkerSEPID uint64 `url:"workerSepId,omitempty" json:"workerSepId,omitempty"`
|
|
|
|
// Pool to use if worker SEP ID is set, can be also empty if needed to be chosen by system
|
|
// Required: false
|
|
WorkerSEPPool string `url:"workerSepPool,omitempty" json:"workerSepPool,omitempty"`
|
|
|
|
// List of strings with labels for worker group
|
|
// i.e: ["label1=value1", "label2=value2"]
|
|
// Required: false
|
|
Labels []string `url:"labels,omitempty" json:"labels,omitempty"`
|
|
|
|
// List of strings with taints for worker group
|
|
// i.e: ["key1=value1:NoSchedule", "key2=value2:NoExecute"]
|
|
// Required: false
|
|
Taints []string `url:"taints,omitempty" json:"taints,omitempty"`
|
|
|
|
// List of strings with annotations for worker group
|
|
// i.e: ["key1=value1", "key2=value2"]
|
|
// Required: false
|
|
Annotations []string `url:"annotations,omitempty" json:"annotations,omitempty"`
|
|
|
|
// Number of worker nodes to create
|
|
// Required: false
|
|
WorkerNum uint64 `url:"workerNum,omitempty" json:"workerNum,omitempty"`
|
|
|
|
// Worker node CPU count
|
|
// Required: false
|
|
WorkerCPU uint64 `url:"workerCpu,omitempty" json:"workerCpu,omitempty"`
|
|
|
|
// Worker node RAM volume in MB
|
|
// Required: false
|
|
WorkerRAM uint64 `url:"workerRam,omitempty" json:"workerRam,omitempty"`
|
|
|
|
// Worker node boot disk size in GB If 0 is specified, size is defined by the OS image size
|
|
// Required: false
|
|
WorkerDisk uint64 `url:"workerDisk,omitempty" json:"workerDisk,omitempty"`
|
|
|
|
// Meta data for working group computes, format YAML "user_data": 1111
|
|
// Required: false
|
|
UserData string `url:"userData,omitempty" json:"userData,omitempty"`
|
|
|
|
// Type of the emulated system, Q35 or i440fx
|
|
// Required: false
|
|
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
|
|
}
|
|
|
|
// GetRAM returns RAM field values
|
|
func (r WorkersGroupAddRequest) GetRAM() map[string]uint64 {
|
|
|
|
res := make(map[string]uint64, 1)
|
|
|
|
res["WorkerRAM"] = r.WorkerRAM
|
|
|
|
return res
|
|
}
|
|
|
|
// WorkersGroupAdd adds workers group to Kubernetes cluster
|
|
func (k8s K8S) WorkersGroupAdd(ctx context.Context, req WorkersGroupAddRequest) (string, error) {
|
|
err := validators.ValidateRequest(req)
|
|
if err != nil {
|
|
return "", validators.ValidationErrors(validators.GetErrors(err))
|
|
}
|
|
|
|
url := "/cloudapi/k8s/workersGroupAdd"
|
|
|
|
res, err := k8s.client.DecortApiCall(ctx, http.MethodPost, url, req)
|
|
if err != nil {
|
|
return "", err
|
|
}
|
|
|
|
return string(res), nil
|
|
}
|