package k8s import ( "context" "net/http" "strings" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) // Request struct for create K8S type CreateRequest struct { // Name of kubernetes cluster // Required: true Name string `url:"name" json:"name" validate:"required"` // Resource group ID for cluster placement // Required: true RGID uint64 `url:"rgId" json:"rgId" validate:"required"` // ID of kubernetes catalog item (K8CI) for cluster // Required: true K8CIID uint64 `url:"k8ciId" json:"k8ciId" validate:"required"` // Name for first worker group created with cluster // Required: true WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required, workerGroupName"` // 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 MasterSEPID uint64 `url:"masterSepId,omitempty" json:"masterSepId,omitempty"` // Pool to use if master SEP ID is set, can be also empty if needed to be chosen by system // Required: false MasterSEPPool string `url:"masterSepPool,omitempty" json:"masterSepPool,omitempty"` // 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 default worker group // i.e: ["label1=value1", "label2=value2"] // Required: false Labels []string `url:"labels,omitempty" json:"labels,omitempty"` // List of strings with taints for default 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 master nodes to create // Required: false MasterNum uint64 `url:"masterNum,omitempty" json:"masterNum,omitempty"` // Master node CPU count // Required: false MasterCPU uint64 `url:"masterCpu,omitempty" json:"masterCpu,omitempty"` // Master node RAM volume in MB // Required: false MasterRAM uint64 `url:"masterRam,omitempty" json:"masterRam,omitempty"` // Master node boot disk size in GB If 0 is specified, size is defined by the OS image size // Required: false MasterDisk uint64 `url:"masterDisk,omitempty" json:"masterDisk,omitempty"` // Number of worker nodes to create in default worker group // 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"` // ID of the external network to connect load balancer and cluster VINS. If 0 is specified, external network selects automatically to // Required: false ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"` // Create kubernetes cluster with masters nodes behind load balancer if true. // Otherwise give all cluster nodes direct external addresses from selected external network // Required: false WithLB bool `url:"withLB" json:"withLB"` // Text description of this kubernetes cluster // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` } // Create creates a new kubernetes cluster in the specified resource group func (k K8S) Create(ctx context.Context, req CreateRequest) (string, error) { err := validators.ValidateRequest(req) if err != nil { for _, validationError := range validators.GetErrors(err) { return "", validators.ValidationError(validationError) } } url := "/cloudbroker/k8s/create" res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { return "", err } result := strings.ReplaceAll(string(res), "\"", "") return result, nil }