diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ce0847..6468edb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,32 +1,7 @@ -## Version 1.6.0 +## Version 1.5.9 ### Bugfix -- Fix cloudaApi/client and cloudapi/legacy-client, the cyclicity of sending requests has been removed -- Edit description field SSLSkipVerify in cloudapi/config/config and cloudapi/config/legacy-config -- Remove tags required fields ExtNetID VINSID Start in model CreateRequest in cloudapi/lb/create -- Add tags required fields BindingName BindingAddress BindingPort in model FrontendBindRequest in cloudapi/lb/frontend_bind -- Add tags required fields BindingAddress BindingPort in model FrontendBindUpdateRequest in cloudapi/lb/frontend_bind_update +- Refactored clients to fix the problems with retries + -### Feature -- Add field UserData in cloudapi/bservice/group_add -- Add fields VinsId, LbSysctlParams, HighlyAvailable, AdditionalSANs, InitConfiguration, ClusterConfiguration, KubeletConfiguration, KubeProxyConfiguration, JoinConfiguration, UserData, ExtNetOnly, OidcCertificate in model request cloudapi/k8s/create -- Add field Externalip in model ItemDetailedInfo in cloudapi/k8s/models -- Add fields SysctlParams, HighlyAvailable in model CreateRequest in cloudapi/lb/create -- Add fields BackendHAIP, FrontendHAIP, PartK8s, SysctlParams in model RecordLB in cloudapi/lb/models -- Add models InfoStack, ItemStack, ListStacks cloudapi/stack/models -- Add field Routes and type Route in CreateInAccountRequest and CreateInRGRequest models in cloudapi/vins/create_in_rg and /cloudapi/vins/create_in_account -- Add field Enabled in model ItemVNFInterface -- Add fields Routes in models RecordNAT, RecordDHCP, RecordGW and add type ListStaticRoutes, ListRoutes, ItemRoutes in cloudapi/vins/models -- Added new endpoints: -- cloudapi/k8s/get_worker_nodes_meta_data -- cloudapi/k8s/update_worker_nodes_meta_data -- cloudapi/lb/make_highly_available -- cloudapi/lb/updateSysctParams -- cloudapi/stack/get -- cloudapi/stack/list -- cloudapi/vins/static_route_list -- cloudapi/vins/static_route_access_grant -- cloudapi/vins/static_route_access_revoke -- cloudapi/vins/static_route_add -- cloudapi/vins/static_route_del diff --git a/README.md b/README.md index 7f4857d..9cec5db 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,6 @@ Decort SDK - это библиотека, написанная на языке G - Версия 1.3.x Decort-SDK соответствует 3.8.5 версии платформы - Версия 1.4.x Decort-SDK соответствует 3.8.6 версии платформы - Версия 1.5.x Decort-SDK соответствует 3.8.7 версии платформы - - Версия 1.6.x Decort-SDK соответствует 3.8.8 версии платформы ## Оглавление @@ -75,7 +74,6 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk - `Locations` - получение информации о grid площадки; - `RG` - управление ресурсными группами аккаунта; - `Sizes` - получение информации о потребляемых ресурсах виртуальными машинами и дисками; -- `Stack` - получение информации о вычислительных узлах; - `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера); - `VINS` - управление виртуальными изолированными сетями. @@ -102,7 +100,7 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk - `PCIDevice` - управление устройствами; - `RG` - управление ресурсными группами аккаунта; - `SEP` - управление storage endpoint (sep); -- `Stack` - получение информации о вычислительных узлах; +- `Stack` - получение информации о стеках; - `Tasks` - получение информации о ходе выполнения асинхронных задач (например, создание кластера); - `User` - управление пользователями (индивидуально); - `VGPU` - управление виртуальными графическими процессорами; @@ -252,8 +250,7 @@ func main() { - `pkg/cloudapi/lb` - для `LB` - `pkg/cloudapi/locations` - для `Locations` - `pkg/cloudapi/rg` - для `RG` - - `pkg/cloudapi/sizes` - для `Sizes` - - `pkg/cloudapi/stack` - для `Stack` + - `pkg/cloudapi/sizes` - для `RG` - `pkg/cloudapi/tasks` - для `Tasks` - `pkg/cloudapi/vins` - для `VINS` - **cloudbroker**: @@ -415,7 +412,7 @@ func main() { Чтобы выполнить запрос, необходимо: -1. Вызвать у клиента метод, отвечаеющий за определение группы API для взаимодействия, это может быть `.CloudAPI()`, либо `.CloudBroker()`. Данные методы возвращаеют соответствующие структуры, с помощью которых можно совершать запросы. +1. Вызвать у клиента метод, отвечаеющий за определение группы API для взаимодействия, это может быть `.CloudAPI()`, либо `.CloudBroker()`. Данные методы возвращаеют соответствующие структуры, с помощью которых можно соверать запросы. 2. Вызвать у возвращенной структуры метод, определяющий группу ручек для взаимодействия. Доступные методы для `.CloudAPI()`: @@ -435,7 +432,6 @@ func main() { - `.Locations()` - для работы с `Locations` - `.RG()` - для работы с `RG` - `.Sizes()` - для работы с `Sizes` - - `.Stack()` - для работы с `Stack` - `.Tasks()` - для работы с `Tasks` - `.VINS()` - для работы с `VINS` @@ -469,7 +465,7 @@ func main() { - контекст; - структуру запроса. - У каждой группы ручек API имеются свои доступные методы, которые определяются платформой. + У кождой группы ручек API имеются свои доступные методы, которые определяются платформой. 4. Обработать результат и ошибки. diff --git a/client.go b/client.go index 3611848..f79bf0a 100644 --- a/client.go +++ b/client.go @@ -7,15 +7,12 @@ import ( "errors" "fmt" "io" - "mime/multipart" "net/http" - "strconv" "strings" "sync" "time" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi" - "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/k8s" "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker" "github.com/google/go-querystring/query" @@ -71,144 +68,6 @@ func (dc *DecortClient) CloudBroker() *cloudbroker.CloudBroker { // DecortApiCall method for sending requests to the platform func (dc *DecortClient) DecortApiCall(ctx context.Context, method, url string, params interface{}) ([]byte, error) { - if k8sCreateReq, ok := params.(k8s.CreateRequest); ok { - reqBody := &bytes.Buffer{} - writer := multipart.NewWriter(reqBody) - if k8sCreateReq.OidcCertificate != "" { - part, _ := writer.CreateFormFile("oidcCertificate", "ca.crt") - _, _ =io.Copy(part, strings.NewReader(k8sCreateReq.OidcCertificate)) - } - - _= writer.WriteField("name", k8sCreateReq.Name) - _= writer.WriteField("rgId", strconv.FormatUint(k8sCreateReq.RGID, 10)) - _= writer.WriteField("k8ciId", strconv.FormatUint(k8sCreateReq.K8SCIID, 10)) - _= writer.WriteField("workerGroupName", k8sCreateReq.WorkerGroupName) - _= writer.WriteField("networkPlugin", k8sCreateReq.NetworkPlugin) - - if k8sCreateReq.MasterSEPID != 0 { - _= writer.WriteField("masterSepId", strconv.FormatUint(k8sCreateReq.MasterSEPID, 10)) - } - if k8sCreateReq.MasterSEPPool != "" { - _= writer.WriteField("masterSepPool", k8sCreateReq.MasterSEPPool) - } - if k8sCreateReq.WorkerSEPID != 0 { - _= writer.WriteField("workerSepId", strconv.FormatUint(k8sCreateReq.WorkerSEPID, 10)) - } - if k8sCreateReq.WorkerSEPPool != "" { - _= writer.WriteField("workerSepPool", k8sCreateReq.WorkerSEPPool) - } - - if k8sCreateReq.Labels != nil { - for _, v := range k8sCreateReq.Labels { - _= writer.WriteField("labels", v) - } - } - if k8sCreateReq.Taints != nil { - for _, v := range k8sCreateReq.Taints { - _= writer.WriteField("taints", v) - } - } - if k8sCreateReq.Annotations != nil { - for _, v := range k8sCreateReq.Annotations { - _= writer.WriteField("annotations", v) - } - } - - if k8sCreateReq.MasterCPU != 0 { - _= writer.WriteField("masterCpu", strconv.FormatUint(uint64(k8sCreateReq.MasterCPU), 10)) - } - if k8sCreateReq.MasterNum != 0 { - _= writer.WriteField("masterNum", strconv.FormatUint(uint64(k8sCreateReq.MasterNum), 10)) - } - if k8sCreateReq.MasterRAM != 0 { - _= writer.WriteField("masterRam", strconv.FormatUint(uint64(k8sCreateReq.MasterRAM), 10)) - } - if k8sCreateReq.MasterDisk != 0 { - _= writer.WriteField("masterDisk", strconv.FormatUint(uint64(k8sCreateReq.MasterDisk), 10)) - } - if k8sCreateReq.WorkerCPU != 0 { - _= writer.WriteField("workerCpu", strconv.FormatUint(uint64(k8sCreateReq.WorkerCPU), 10)) - } - if k8sCreateReq.WorkerNum != 0 { - _= writer.WriteField("workerNum", strconv.FormatUint(uint64(k8sCreateReq.WorkerNum), 10)) - } - if k8sCreateReq.WorkerRAM != 0 { - _= writer.WriteField("workerRam", strconv.FormatUint(uint64(k8sCreateReq.WorkerRAM), 10)) - } - if k8sCreateReq.WorkerDisk != 0 { - _= writer.WriteField("workerDisk", strconv.FormatUint(uint64(k8sCreateReq.WorkerDisk), 10)) - } - if k8sCreateReq.ExtNetID != 0 { - _= writer.WriteField("extnetId", strconv.FormatUint(k8sCreateReq.ExtNetID, 10)) - } - if k8sCreateReq.VinsId != 0 { - _= writer.WriteField("vinsId", strconv.FormatUint(k8sCreateReq.VinsId, 10)) - } - if !k8sCreateReq.WithLB { - _= writer.WriteField("withLB", strconv.FormatBool(k8sCreateReq.WithLB)) - } - - _= writer.WriteField("highlyAvailable", strconv.FormatBool(k8sCreateReq.HighlyAvailable)) - - if k8sCreateReq.AdditionalSANs != nil { - for _, v := range k8sCreateReq.AdditionalSANs { - _= writer.WriteField("additionalSANs", v) - } - } - if k8sCreateReq.InitConfiguration != "" { - _= writer.WriteField("initConfiguration", k8sCreateReq.InitConfiguration) - } - if k8sCreateReq.ClusterConfiguration != "" { - _= writer.WriteField("clusterConfiguration", k8sCreateReq.ClusterConfiguration) - } - if k8sCreateReq.KubeletConfiguration != "" { - _= writer.WriteField("kubeletConfiguration", k8sCreateReq.KubeletConfiguration) - } - if k8sCreateReq.KubeProxyConfiguration != "" { - _= writer.WriteField("kubeProxyConfiguration", k8sCreateReq.KubeProxyConfiguration) - } - if k8sCreateReq.JoinConfiguration != "" { - _= writer.WriteField("joinConfiguration", k8sCreateReq.JoinConfiguration) - } - if k8sCreateReq.Description != "" { - _= writer.WriteField("desc", k8sCreateReq.Description) - } - if k8sCreateReq.UserData != "" { - _= writer.WriteField("userData", k8sCreateReq.UserData) - } - - _= writer.WriteField("extnetOnly", strconv.FormatBool(k8sCreateReq.ExtNetOnly)) - _= writer.FormDataContentType() - - ct := writer.FormDataContentType() - - writer.Close() - req, err := http.NewRequestWithContext(ctx, method, dc.decortURL+"/restmachine"+url, reqBody) - if err != nil { - return nil, err - } - if err = dc.getToken(ctx); err != nil { - return nil, err - } - - resp, err := dc.domp(req, ct) - if err != nil { - return nil, err - } - defer resp.Body.Close() - - respBytes, err := io.ReadAll(resp.Body) - if err != nil { - return nil, err - } - - if resp.StatusCode != 200 { - return nil, errors.New(string(respBytes)) - } - - return respBytes, nil - } - values, err := query.Values(params) if err != nil { return nil, err @@ -281,51 +140,24 @@ func (dc *DecortClient) do(req *http.Request) (*http.Response, error) { req.Header.Add("Authorization", "bearer "+dc.cfg.Token) req.Header.Set("Accept", "application/json") - var resp *http.Response - var err error - buf, _ := io.ReadAll(req.Body) - req = req.Clone(req.Context()) - - for i := uint64(0); i < dc.cfg.Retries; i++ { - req.Body = io.NopCloser(bytes.NewBuffer(buf)) - resp, err = dc.client.Do(req) - - // if err == nil { - if resp.StatusCode == 200 { - return resp, err - } - respBytes, _ := io.ReadAll(resp.Body) - err = fmt.Errorf("%s", respBytes) - resp.Body.Close() - // } - } - - return nil, fmt.Errorf("could not execute request: %w", err) -} - -func (dc *DecortClient) domp(req *http.Request, ctype string) (*http.Response, error) { - req.Header.Add("Content-Type", ctype) - req.Header.Add("Authorization", "bearer "+dc.cfg.Token) - req.Header.Set("Accept", "application/json") - - var resp *http.Response - var err error + // var resp *http.Response + // var err error buf, _ := io.ReadAll(req.Body) - req = req.Clone(req.Context()) - for i := uint64(0); i < dc.cfg.Retries; i++ { + // for i := uint64(0); i < dc.cfg.Retries; i++ { + // req = req.Clone(req.Context()) req.Body = io.NopCloser(bytes.NewBuffer(buf)) - resp, err = dc.client.Do(req) + resp, err := dc.client.Do(req) // if err == nil { - if resp.StatusCode == 200 { - return resp, err - } - respBytes, _ := io.ReadAll(resp.Body) - err = fmt.Errorf("%s", respBytes) - resp.Body.Close() + if resp.StatusCode == 200 { + return resp, err + } + respBytes, _ := io.ReadAll(resp.Body) + err = fmt.Errorf("%s", respBytes) + resp.Body.Close() // } - } + // } return nil, fmt.Errorf("could not execute request: %w", err) } diff --git a/config/config.go b/config/config.go index d6847ae..f7dfc11 100644 --- a/config/config.go +++ b/config/config.go @@ -42,7 +42,7 @@ type Config struct { // Required: false Retries uint64 `json:"retries" yaml:"retries"` - // Skip verify + // Skip verify, true by default // Required: false SSLSkipVerify bool `json:"sslSkipVerify" yaml:"sslSkipVerify"` diff --git a/config/legacy-config.go b/config/legacy-config.go index a3a7a09..93b5495 100644 --- a/config/legacy-config.go +++ b/config/legacy-config.go @@ -36,7 +36,7 @@ type LegacyConfig struct { // Required: false Retries uint64 `json:"retries" yaml:"retries"` - // Skip verify + // Skip verify, true by default // Required: false SSLSkipVerify bool `json:"sslSkipVerify" yaml:"sslSkipVerify"` diff --git a/config/timeouts.go b/config/timeouts.go index 89a12eb..dd319e8 100644 --- a/config/timeouts.go +++ b/config/timeouts.go @@ -23,7 +23,7 @@ func (d *Duration) UnmarshalYAML(unmarshal func(interface{}) error) error { *d = Duration(tmp) return nil default: - return fmt.Errorf("invalid duration %v", value) + return fmt.Errorf("Invalid duration %v", value) } } @@ -41,7 +41,7 @@ func (d *Duration) UnmarshalJSON(b []byte) error { *d = Duration(tmp) return nil default: - return fmt.Errorf("invalid duration %v", value) + return fmt.Errorf("Invalid duration %v", value) } } diff --git a/legacy-client.go b/legacy-client.go index 9dbfffc..477f282 100644 --- a/legacy-client.go +++ b/legacy-client.go @@ -140,21 +140,20 @@ func (ldc *LegacyDecortClient) do(req *http.Request) (*http.Response, error) { // var resp *http.Response // var err error buf, _ := io.ReadAll(req.Body) - req = req.Clone(req.Context()) // for i := uint64(0); i < ldc.cfg.Retries; i++ { - req = req.Clone(req.Context()) - req.Body = io.NopCloser(bytes.NewBuffer(buf)) - resp, err := ldc.client.Do(req) + // req = req.Clone(req.Context()) + req.Body = io.NopCloser(bytes.NewBuffer(buf)) + resp, err := ldc.client.Do(req) - // if err == nil { - if resp.StatusCode == 200 { - return resp, err - } - respBytes, _ := io.ReadAll(resp.Body) - err = fmt.Errorf("%s", respBytes) - resp.Body.Close() - // } + // if err == nil { + if resp.StatusCode == 200 { + return resp, err + } + respBytes, _ := io.ReadAll(resp.Body) + err = fmt.Errorf("%s", respBytes) + resp.Body.Close() + // } // } return nil, fmt.Errorf("could not execute request: %w", err) diff --git a/pkg/cloudapi/bservice/group_add.go b/pkg/cloudapi/bservice/group_add.go index aa0ee41..0df96b4 100644 --- a/pkg/cloudapi/bservice/group_add.go +++ b/pkg/cloudapi/bservice/group_add.go @@ -68,10 +68,6 @@ type GroupAddRequest struct { // Time of Compute Group readiness // Required: false TimeoutStart uint64 `url:"timeoutStart,omitempty" json:"timeoutStart,omitempty"` - - // Meta data for working group computes, format YAML "user_data": 1111 - // Required: false - UserData string `url:"userData,omitempty" json:"userData,omitempty"` } // GroupAdd creates new Compute Group within BasicService. diff --git a/pkg/cloudapi/k8s/create.go b/pkg/cloudapi/k8s/create.go index 496a482..d00edcf 100644 --- a/pkg/cloudapi/k8s/create.go +++ b/pkg/cloudapi/k8s/create.go @@ -8,8 +8,6 @@ import ( "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) -// type Params []string - // Request struct for create kubernetes cluster type CreateRequest struct { // Name of Kubernetes cluster @@ -100,80 +98,18 @@ type CreateRequest struct { // Required: false ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"` - // ID of the ViNS to connect k8s cluster. If nothing is specified, ViNS will be created automatically - // Required: false - VinsId uint64 `url:"vinsId,omitempty" json:"vinsId,omitempty"` - // Create Kubernetes cluster with masters nodes behind load balancer if true. // Otherwise give all cluster nodes direct external addresses from selected ExtNet // Required: false WithLB bool `url:"withLB" json:"withLB"` - // Custom sysctl values for Load Balancer instance. Applied on boot - // Required: false - LbSysctlParams string `url:"-" json:"lbSysctlParams,omitempty" validate:"omitempty,dive"` - - // Use Highly Available schema for LB deploy - // Required: false - HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"` - - // Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names - // Required: false - AdditionalSANs []string `url:"additionalSANs,omitempty" json:"additionalSANs,omitempty"` - - // Is used to define settings and actions that should be performed before any other component in the cluster starts. - // It allows you to configure things like node registration, network setup, and other initialization tasks. insert a valid JSON string with all levels of nesting - // Required: false - InitConfiguration string `url:"initConfiguration,omitempty" json:"initConfiguration,omitempty"` - - // Is used to define global settings and configurations for the entire cluster. - // It includes parameters such as cluster name, DNS settings, authentication methods, and other cluster-wide configurations. - // Insert a valid JSON string with all levels of nesting - // Required: false - ClusterConfiguration string `url:"clusterConfiguration,omitempty" json:"clusterConfiguration,omitempty"` - - // Is used to configure the behavior and settings of the Kubelet, which is the primary node agent that runs on each node in the cluster. - // It includes parameters such as node IP address, resource allocation, pod eviction policies, and other Kubelet-specific configurations. - // Insert a valid JSON string with all levels of nesting - // Required: false - KubeletConfiguration string `url:"kubeletConfiguration,omitempty" json:"kubeletConfiguration,omitempty"` - - // Is used to configure the behavior and settings of the Kube-proxy, which is responsible for network proxying and load balancing within the cluster. - // It includes parameters such as proxy mode, cluster IP ranges, and other Kube-proxy specific configurations. - // Insert a valid JSON string with all levels of nesting - // Required: false - KubeProxyConfiguration string `url:"kubeProxyConfiguration,omitempty" json:"kubeProxyConfiguration,omitempty"` - - // Is used to configure the behavior and settings for joining a node to a cluster. - // It includes parameters such as the cluster's control plane endpoint, token, and certificate key. insert a valid JSON string with all levels of nesting - // Required: false - JoinConfiguration string `url:"joinConfiguration,omitempty" json:"joinConfiguration,omitempty"` - // Text description of this Kubernetes cluster // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` - - // Meta data for working group computes, format YAML "user_data": 1111 - // Required: false - UserData string `url:"userData,omitempty" json:"userData,omitempty"` - - // Use only selected ExtNet for infrastructure connections - // Required: false - ExtNetOnly bool `url:"extnetOnly,omitempty" json:"extnetOnly,omitempty"` - - // Insert ssl certificate in x509 pem format - // Required: false - OidcCertificate string `url:"oidcCertificate,omitempty" json:"oidcCertificate,omitempty"` } -// type wrapperCreateRequest struct { -// CreateRequest -// Params []string `url:"lbSysctlParams,omitempty"` -// } - // Create creates a new Kubernetes cluster in the specified Resource Group func (k8s K8S) Create(ctx context.Context, req CreateRequest) (string, error) { - err := validators.ValidateRequest(req) if err != nil { for _, validationError := range validators.GetErrors(err) { @@ -181,28 +117,6 @@ func (k8s K8S) Create(ctx context.Context, req CreateRequest) (string, error) { } } - // var params []string - - // if len(req.LbSysctlParams) != 0 { - // params = make([]string, 0, len(req.LbSysctlParams)) - - // for r := range req.LbSysctlParams { - // b, err := json.Marshal(req.LbSysctlParams[r]) - // if err != nil { - // return "", err - // } - - // params = append(params, string(b)) - // } - // } else { - // params = []string{"[]"} - // } - - // reqWrapped := wrapperCreateRequest{ - // CreateRequest: req, - // Params: params, - // } - url := "/cloudapi/k8s/create" res, err := k8s.client.DecortApiCall(ctx, http.MethodPost, url, req) diff --git a/pkg/cloudapi/k8s/get_worker_nodes_meta_data.go b/pkg/cloudapi/k8s/get_worker_nodes_meta_data.go deleted file mode 100644 index 69fb4a6..0000000 --- a/pkg/cloudapi/k8s/get_worker_nodes_meta_data.go +++ /dev/null @@ -1,38 +0,0 @@ -package k8s - -import ( - "context" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for get worker group metadata by ID -type GetWorkerNodesMetaDataRequest struct { - // Kubernetes cluster ID - // Required: true - K8SID uint64 `url:"k8sId" json:"k8sId" validate:"required"` - - // ID of the workers compute group - // Required: true - WorkersGroupID uint64 `url:"workersGroupId" json:"workersGroupId" validate:"required"` -} - -// Get worker group metadata by ID -func (k K8S) GetWorkerNodesMetaData(ctx context.Context, req GetWorkerNodesMetaDataRequest) (string, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return "", validators.ValidationError(validationError) - } - } - - url := "/cloudapi/k8s/getWorkerNodesMetaData" - - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return "", err - } - - return string(res), nil -} diff --git a/pkg/cloudapi/k8s/models.go b/pkg/cloudapi/k8s/models.go index e01723c..a4b6cd9 100644 --- a/pkg/cloudapi/k8s/models.go +++ b/pkg/cloudapi/k8s/models.go @@ -41,9 +41,6 @@ type ListK8SGroups []ItemK8SGroup // Detailed information type ItemDetailedInfo struct { - // Externalip - Externalip string `json:"externalip"` - // ID ID uint64 `json:"id"` diff --git a/pkg/cloudapi/k8s/update_worker_nodes_meta_data.go b/pkg/cloudapi/k8s/update_worker_nodes_meta_data.go deleted file mode 100644 index 42ca590..0000000 --- a/pkg/cloudapi/k8s/update_worker_nodes_meta_data.go +++ /dev/null @@ -1,48 +0,0 @@ -package k8s - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for add worker to a kubernetes cluster -type UpdateWorkerNodesMetaDataRequest struct { - // Kubernetes cluster ID - // Required: true - K8SID uint64 `url:"k8sId" json:"k8sId" validate:"required"` - - // ID of the workers compute group - // Required: true - WorkersGroupID uint64 `url:"workersGroupId" json:"workersGroupId" validate:"required"` - - // Meta data for working group computes, format YAML "user_data": 1111 - // Required: true - UserData string `url:"userData" json:"userData" validate:"required"` -} - -// WorkerAdd adds worker nodes to a kubernetes cluster -func (k K8S) UpdateWorkerNodesMetaData(ctx context.Context, req UpdateWorkerNodesMetaDataRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/k8s/updateWorkerNodesMetaData" - - res, err := k.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/kvmppc/create.go b/pkg/cloudapi/kvmppc/create.go index b9bf0e9..70ea036 100644 --- a/pkg/cloudapi/kvmppc/create.go +++ b/pkg/cloudapi/kvmppc/create.go @@ -79,7 +79,7 @@ type CreateRequest struct { // Start VM upon success // Required: false - Start bool `url:"start" json:"start"` + Start bool `url:"start,omitempty" json:"start,omitempty"` // System name // Required: false diff --git a/pkg/cloudapi/kvmx86/create.go b/pkg/cloudapi/kvmx86/create.go index 60374db..7c999f8 100644 --- a/pkg/cloudapi/kvmx86/create.go +++ b/pkg/cloudapi/kvmx86/create.go @@ -79,7 +79,7 @@ type CreateRequest struct { // Start VM upon success // Required: false - Start bool `url:"start" json:"start"` + Start bool `url:"start,omitempty" json:"start,omitempty"` // System name // Required: false diff --git a/pkg/cloudapi/lb/create.go b/pkg/cloudapi/lb/create.go index d2d637e..e437882 100644 --- a/pkg/cloudapi/lb/create.go +++ b/pkg/cloudapi/lb/create.go @@ -2,16 +2,12 @@ package lb import ( "context" - "encoding/json" - "errors" "net/http" - "strconv" + "strings" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) -type Params []string - // Request struct for create load balancer type CreateRequest struct { // ID of the resource group where this load balancer instance will be located @@ -24,81 +20,39 @@ type CreateRequest struct { Name string `url:"name" json:"name" validate:"required"` // External network to connect this load balancer to - // Required: false - ExtNetID uint64 `url:"extnetId" json:"extnetId"` + // Required: true + ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` // Internal network (VINS) to connect this load balancer to - // Required: false - VINSID uint64 `url:"vinsId" json:"vinsId"` - - // Custom sysctl values for Load Balancer instance. Applied on boot - // Required: false - SysctlParams Params `url:"-" json:"sysctlParams,omitempty" validate:"omitempty,dive"` - - // Use Highly Available schema for LB deploy - // Required: false - HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"` + // Required: true + VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` // Start now Load balancer - // Required: false - Start bool `url:"start" json:"start"` + // Required: true + Start bool `url:"start" json:"start" validate:"required"` // Text description of this load balancer // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` } -type wrapperCreateRequest struct { - CreateRequest - Params []string `url:"sysctlParams,omitempty"` -} - // Create method will create a new load balancer instance -func (l LB) Create(ctx context.Context, req CreateRequest) (uint64, error) { +func (l LB) Create(ctx context.Context, req CreateRequest) (string, error) { err := validators.ValidateRequest(req) if err != nil { for _, validationError := range validators.GetErrors(err) { - return 0, validators.ValidationError(validationError) + return "", validators.ValidationError(validationError) } } - if req.ExtNetID == 0 && req.VINSID == 0 { - return 0, errors.New("vinsId and extNetId cannot be both in the value 0") - } - - var params []string - - if len(req.SysctlParams) != 0 { - params = make([]string, 0, len(req.SysctlParams)) - - for r := range req.SysctlParams { - b, err := json.Marshal(req.SysctlParams[r]) - if err != nil { - return 0, err - } - - params = append(params, string(b)) - } - } else { - params = []string{} - } - - reqWrapped := wrapperCreateRequest{ - CreateRequest: req, - Params: params, - } - url := "/cloudapi/lb/create" - res, err := l.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + res, err := l.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { - return 0, err + return "", err } - result, err := strconv.ParseUint(string(res), 10, 64) - if err != nil { - return 0, err - } + result := strings.ReplaceAll(string(res), "\"", "") return result, nil } diff --git a/pkg/cloudapi/lb/frontend_bind.go b/pkg/cloudapi/lb/frontend_bind.go index f182dd4..86e6d14 100644 --- a/pkg/cloudapi/lb/frontend_bind.go +++ b/pkg/cloudapi/lb/frontend_bind.go @@ -20,18 +20,18 @@ type FrontendBindRequest struct { // Name of the binding to update // Required: true - BindingName string `url:"bindingName" json:"bindingName" validate:"required"` + BindingName string `url:"bindingName" json:"bindingName"` // If specified must be within the IP range of either Ext Net or ViNS, // where this load balancer is connected - new IP address to use for this binding. // If omitted, current IP address is retained - // Required: true - BindingAddress string `url:"bindingAddress" json:"bindingAddress" validate:"required"` + // Required: false + BindingAddress string `url:"bindingAddress,omitempty" json:"bindingAddress,omitempty"` // New port number to use for this binding. // If omitted, current port number is retained - // Required: true - BindingPort uint64 `url:"bindingPort" json:"bindingPort" validate:"required"` + // Required: false + BindingPort uint64 `url:"bindingPort,omitempty" json:"bindingPort,omitempty"` } // FrontendBind bind frontend from specified load balancer instance diff --git a/pkg/cloudapi/lb/frontend_bind_update.go b/pkg/cloudapi/lb/frontend_bind_update.go index 54a6d69..97e8d5e 100644 --- a/pkg/cloudapi/lb/frontend_bind_update.go +++ b/pkg/cloudapi/lb/frontend_bind_update.go @@ -25,13 +25,13 @@ type FrontendBindUpdateRequest struct { // If specified must be within the IP range of either Ext Net or ViNS, // where this load balancer is connected - new IP address to use for this binding. // If omitted, current IP address is retained - // Required: true - BindingAddress string `url:"bindingAddress" json:"bindingAddress" validate:"required"` + // Required: false + BindingAddress string `url:"bindingAddress,omitempty" json:"bindingAddress,omitempty"` // New port number to use for this binding. // If omitted, current port number is retained - // Required: true - BindingPort uint64 `url:"bindingPort" json:"bindingPort" validate:"required"` + // Required: false + BindingPort uint64 `url:"bindingPort,omitempty" json:"bindingPort,omitempty"` } // FrontendBindUpdate updates binding for the specified load balancer frontend diff --git a/pkg/cloudapi/lb/make_highly_available.go b/pkg/cloudapi/lb/make_highly_available.go deleted file mode 100644 index ad2b88c..0000000 --- a/pkg/cloudapi/lb/make_highly_available.go +++ /dev/null @@ -1,40 +0,0 @@ -package lb - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for make Load Balancer Highly available -type HighlyAvailableRequest struct { - // ID of the LB instance - // Required: true - LBID uint64 `url:"lbId" json:"lbId" validate:"required"` -} - -// Make Load Balancer Highly available -func (l LB) HighlyAvailable(ctx context.Context, req HighlyAvailableRequest) (uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return 0, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/lb/makeHighlyAvailable" - - res, err := l.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 -} diff --git a/pkg/cloudapi/lb/models.go b/pkg/cloudapi/lb/models.go index fc503e0..548dccf 100644 --- a/pkg/cloudapi/lb/models.go +++ b/pkg/cloudapi/lb/models.go @@ -6,10 +6,7 @@ type RecordLB struct { HAMode bool `json:"HAmode"` // Access Control List - ACL []interface{} `json:"acl"` - - // BackendHAIP - BackendHAIP string `json:"backendHAIP"` + ACL interface{} `json:"acl"` // List of load balancer backends Backends ListBackends `json:"backends"` @@ -35,9 +32,6 @@ type RecordLB struct { // External network ID ExtNetID uint64 `json:"extnetId"` - // FrontendHAIP - FrontendHAIP string `json:"frontendHAIP"` - // List of load balancer frontends Frontends ListFrontends `json:"frontends"` @@ -59,9 +53,6 @@ type RecordLB struct { // Name Name string `json:"name"` - // Part K8s - PartK8s bool `json:"partK8s"` - // Primary node PrimaryNode RecordNode `json:"primaryNode"` @@ -77,9 +68,6 @@ type RecordLB struct { // Status Status string `json:"status"` - // Sysctl Params - SysctlParams []interface{} `json:"sysctlParams"` - // Tech status TechStatus string `json:"techStatus"` diff --git a/pkg/cloudapi/lb/updateSysctParams.go b/pkg/cloudapi/lb/updateSysctParams.go deleted file mode 100644 index d50ea95..0000000 --- a/pkg/cloudapi/lb/updateSysctParams.go +++ /dev/null @@ -1,72 +0,0 @@ -package lb - -import ( - "context" - "encoding/json" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for update sysct params for lb -type UpdateSysctParamsRequest struct { - // ID of the LB instance - // Required: true - LBID uint64 `url:"lbId" json:"lbId" validate:"required"` - - // Custom sysctl values for Load Balancer instance. Applied on boot - // Required: true - SysctlParams Params `url:"-" json:"sysctlParams" validate:"required,dive"` -} - -type wrapperUpdateSysctParamsRequest struct { - UpdateSysctParamsRequest - Params []string `url:"sysctlParams" validate:"required"` -} - -// Create method will create a new load balancer instance -func (l LB) UpdateSysctParams(ctx context.Context, req UpdateSysctParamsRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - var params []string - - if len(req.SysctlParams) != 0 { - params = make([]string, 0, len(req.SysctlParams)) - - for r := range req.SysctlParams { - b, err := json.Marshal(req.SysctlParams[r]) - if err != nil { - return false, err - } - - params = append(params, string(b)) - } - } else { - params = []string{} - } - - reqWrapped := wrapperUpdateSysctParamsRequest{ - UpdateSysctParamsRequest: req, - Params: params, - } - - url := "/cloudapi/lb/updateSysctParams" - - res, err := l.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) - 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/stack.go b/pkg/cloudapi/stack.go deleted file mode 100644 index 2beabc4..0000000 --- a/pkg/cloudapi/stack.go +++ /dev/null @@ -1,10 +0,0 @@ -package cloudapi - -import ( - "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/stack" -) - -// Accessing the Stack method group -func (ca *CloudAPI) Stack() *stack.Stack { - return stack.New(ca.client) -} diff --git a/pkg/cloudapi/stack/get.go b/pkg/cloudapi/stack/get.go deleted file mode 100644 index 4c5d2a3..0000000 --- a/pkg/cloudapi/stack/get.go +++ /dev/null @@ -1,42 +0,0 @@ -package stack - -import ( - "context" - "encoding/json" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for get info of stack -type GetRequest struct { - // Find by ID - // Required: true - StackId uint64 `url:"stackId" json:"stackId" validate:"required"` -} - -// Get stack details by ID -func (i Stack) Get(ctx context.Context, req GetRequest) (*InfoStack, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return nil, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/stack/get" - - res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return nil, err - } - - info := InfoStack{} - - err = json.Unmarshal(res, &info) - if err != nil { - return nil, err - } - - return &info, nil -} diff --git a/pkg/cloudapi/stack/list.go b/pkg/cloudapi/stack/list.go deleted file mode 100644 index a7afe75..0000000 --- a/pkg/cloudapi/stack/list.go +++ /dev/null @@ -1,53 +0,0 @@ -package stack - -import ( - "context" - "encoding/json" - "net/http" -) - -// Request struct for get list stack -type ListRequest struct { - // Find by ID - // Required: false - ByID uint64 `url:"by_id,omitempty" json:"by_id,omitempty"` - - // Find by name - // Required: false - Name string `url:"name,omitempty" json:"name,omitempty"` - - // Find by type - // Required: false - Type string `url:"type,omitempty" json:"type,omitempty"` - - // Find by status - // Required: false - Status string `url:"status,omitempty" json:"status,omitempty"` - - // Page number - // Required: false - Page uint64 `url:"page,omitempty" json:"page,omitempty"` - - // Page size - // Required: false - Size uint64 `url:"size,omitempty" json:"size,omitempty"` -} - -// ListStacks gets list stack -func (i Stack) List(ctx context.Context, req ListRequest) (*ListStacks, error) { - url := "/cloudapi/stack/list" - - res, err := i.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return nil, err - } - - list := ListStacks{} - - err = json.Unmarshal(res, &list) - if err != nil { - return nil, err - } - - return &list, nil -} diff --git a/pkg/cloudapi/stack/models.go b/pkg/cloudapi/stack/models.go deleted file mode 100644 index 895344d..0000000 --- a/pkg/cloudapi/stack/models.go +++ /dev/null @@ -1,53 +0,0 @@ -package stack - -// Main information about stack -type InfoStack struct { - // CPU allocation ratio - CPUAllocationRatio float64 `json:"cpu_allocation_ratio"` - - // Descr - Descr string `json:"descr"` - - // Drivers - Drivers []string `json:"drivers"` - - // ID - ID uint64 `json:"id"` - - // Mem allocation ratio - MemAllocationRatio float64 `json:"mem_allocation_ratio"` - - // Name - Name string `json:"name"` - - // Status - Status string `json:"status"` - - // Type - Type string `json:"type"` -} - -// Information about stack in list -type ItemStack struct { - // ID - ID uint64 `json:"id"` - - // Name - Name string `json:"name"` - - // Status - Status string `json:"status"` - - // Type - Type string `json:"type"` -} - -// List of stacks -type ListStacks struct { - - //List - Data []ItemStack `json:"data"` - - //Entry count - EntryCount uint64 `json:"entryCount"` -} diff --git a/pkg/cloudapi/stack/stack.go b/pkg/cloudapi/stack/stack.go deleted file mode 100644 index 94c5d89..0000000 --- a/pkg/cloudapi/stack/stack.go +++ /dev/null @@ -1,16 +0,0 @@ -// Lists all the stack. -package stack - -import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" - -// Structure for creating request to stack -type Stack struct { - client interfaces.Caller -} - -// Builder for stack endpoint -func New(client interfaces.Caller) *Stack { - return &Stack{ - client: client, - } -} diff --git a/pkg/cloudapi/vins/create_in_account.go b/pkg/cloudapi/vins/create_in_account.go index d1b6dce..2970dc7 100644 --- a/pkg/cloudapi/vins/create_in_account.go +++ b/pkg/cloudapi/vins/create_in_account.go @@ -2,24 +2,12 @@ package vins import ( "context" - "encoding/json" "net/http" "strconv" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) -type Route struct { - // Destination network - Destination string `url:"destination" json:"destination" validate:"required"` - - //Destination network mask in 255.255.255.255 format - Netmask string `url:"netmask" json:"netmask" validate:"required"` - - //Next hop host, IP address from ViNS ID free IP pool - Gateway string `url:"gateway" json:"gateway" validate:"required"` -} - // Request struct for create VINS in account type CreateInAccountRequest struct { // VINS name @@ -45,15 +33,6 @@ type CreateInAccountRequest struct { // Number of pre created reservations // Required: false PreReservationsNum uint64 `url:"preReservationsNum,omitempty" json:"preReservationsNum,omitempty"` - - // List of static routes, each item must have destination, netmask, and gateway fields - // Required: false - Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"` -} - -type wrapperCreateRequestInAcc struct { - CreateInAccountRequest - Routes []string `url:"routes,omitempty"` } // CreateInAccount creates VINS in account level @@ -65,31 +44,9 @@ func (v VINS) CreateInAccount(ctx context.Context, req CreateInAccountRequest) ( } } - var routes []string - - if len(req.Routes) != 0 { - routes = make([]string, 0, len(req.Routes)) - - for r := range req.Routes { - b, err := json.Marshal(req.Routes[r]) - if err != nil { - return 0, err - } - - routes = append(routes, string(b)) - } - } else { - routes = []string{} - } - - reqWrapped := wrapperCreateRequestInAcc{ - CreateInAccountRequest: req, - Routes: routes, - } - url := "/cloudapi/vins/createInAccount" - res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { return 0, err } diff --git a/pkg/cloudapi/vins/create_in_rg.go b/pkg/cloudapi/vins/create_in_rg.go index a71bcbb..c01f164 100644 --- a/pkg/cloudapi/vins/create_in_rg.go +++ b/pkg/cloudapi/vins/create_in_rg.go @@ -2,7 +2,6 @@ package vins import ( "context" - "encoding/json" "net/http" "strconv" @@ -38,15 +37,6 @@ type CreateInRGRequest struct { // Number of pre created reservations // Required: false PreReservationsNum uint64 `url:"preReservationsNum,omitempty" json:"preReservationsNum,omitempty"` - - // List of static routes, each item must have destination, netmask, and gateway fields - // Required: false - Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"` -} - -type wrapperCreateRequestInRG struct { - CreateInRGRequest - Routes []string `url:"routes,omitempty"` } // CreateInRG creates VINS in resource group level @@ -58,31 +48,9 @@ func (v VINS) CreateInRG(ctx context.Context, req CreateInRGRequest) (uint64, er } } - var routes []string - - if len(req.Routes) != 0 { - routes = make([]string, 0, len(req.Routes)) - - for r := range req.Routes { - b, err := json.Marshal(req.Routes[r]) - if err != nil { - return 0, err - } - - routes = append(routes, string(b)) - } - } else { - routes = []string{} - } - - reqWrapped := wrapperCreateRequestInRG{ - CreateInRGRequest: req, - Routes: routes, - } - url := "/cloudapi/vins/createInRG" - res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { return 0, err } diff --git a/pkg/cloudapi/vins/models.go b/pkg/cloudapi/vins/models.go index 6bae94c..8344625 100644 --- a/pkg/cloudapi/vins/models.go +++ b/pkg/cloudapi/vins/models.go @@ -252,9 +252,6 @@ type ItemVNFInterface struct { // Default GW DefGW string `json:"defGw"` - // Enabled - Enabled bool `json:"enabled"` - // FLIPGroup ID FLIPGroupID uint64 `json:"flipgroupId"` @@ -381,9 +378,6 @@ type RecordNAT struct { // Pure virtual PureVirtual bool `json:"pureVirtual"` - // Routes - Routes ListRoutes `json:"routes"` - // Status Status string `json:"status"` @@ -449,9 +443,6 @@ type RecordGW struct { // Pure virtual PureVirtual bool `json:"pureVirtual"` - // Routes - Routes ListRoutes `json:"routes"` - // Status Status string `json:"status"` @@ -539,9 +530,6 @@ type RecordDHCP struct { // Pure virtual PureVirtual bool `json:"pureVirtual"` - // Routes - Routes ListRoutes `json:"routes"` - // Status Status string `json:"status"` @@ -579,39 +567,6 @@ type RecordDHCPConfig struct { Reservations ListReservations `json:"reservations"` } -// List of static routes -type ListStaticRoutes struct { - // Data - Data []ItemRoutes `json:"data"` - - // Entry count - EntryCount uint64 `json:"entryCount"` -} - -// List of Routes -type ListRoutes []ItemRoutes - -// Detailed information about Routes -type ItemRoutes struct { - //Compute Id - ComputeIds []uint64 `json:"computeIds"` - - // Destination network - Destination string `json:"destination"` - - //Next hop host, IP address from ViNS ID free IP pool - Gateway string `json:"gateway"` - - // GUID - GUID string `json:"guid"` - - // ID - ID uint64 `json:"id"` - - //Destination network mask in 255.255.255.255 format - Netmask string `json:"netmask"` -} - // Detailed information about VINS type RecordVINS struct { // Main information about VNF device diff --git a/pkg/cloudapi/vins/static_route_access_grant.go b/pkg/cloudapi/vins/static_route_access_grant.go deleted file mode 100644 index e8cfea8..0000000 --- a/pkg/cloudapi/vins/static_route_access_grant.go +++ /dev/null @@ -1,48 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for grant access to static route to Compute/ViNS -type StaticRouteAccessGrantRequest struct { - // ViNS ID to grant access - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Route ID to grant access, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` - - // List of Compute IDs to grant access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// Grant access to static route to Compute/ViNS -func (v VINS) StaticRouteAccessGrant(ctx context.Context, req StaticRouteAccessGrantRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/vins/staticRouteAccessGrant" - - 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 -} diff --git a/pkg/cloudapi/vins/static_route_access_revoke.go b/pkg/cloudapi/vins/static_route_access_revoke.go deleted file mode 100644 index 2c2f6ea..0000000 --- a/pkg/cloudapi/vins/static_route_access_revoke.go +++ /dev/null @@ -1,48 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for revoke access to static route to Compute/ViNS -type StaticRouteAccessRevokeRequest struct { - // ViNS ID to revoke access - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Route ID to revoke access, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` - - // List of Compute IDs to revoke access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// Revoke access to static route to Compute/ViNS -func (v VINS) StaticRouteAccessRevoke(ctx context.Context, req StaticRouteAccessRevokeRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/vins/staticRouteAccessRevoke" - - 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 -} diff --git a/pkg/cloudapi/vins/static_route_add.go b/pkg/cloudapi/vins/static_route_add.go deleted file mode 100644 index 1776e2d..0000000 --- a/pkg/cloudapi/vins/static_route_add.go +++ /dev/null @@ -1,56 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for add static route -type StaticRouteAddRequest struct { - // VINS ID - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Destination network - // Required: true - Destination string `url:"destination" json:"destination" validate:"required"` - - // Destination network mask in 255.255.255.255 format - // Required: true - Netmask string `url:"netmask" json:"netmask" validate:"required"` - - // Next hop host, IP address from ViNS ID free IP pool - // Required: true - Gateway string `url:"gateway" json:"gateway" validate:"required"` - - // List of Compute IDs which have access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// StaticRouteAdd add new static route to ViNS -func (v VINS) StaticRouteAdd(ctx context.Context, req StaticRouteAddRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/vins/staticRouteAdd" - - 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 -} diff --git a/pkg/cloudapi/vins/static_route_del.go b/pkg/cloudapi/vins/static_route_del.go deleted file mode 100644 index 6674e8d..0000000 --- a/pkg/cloudapi/vins/static_route_del.go +++ /dev/null @@ -1,44 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for remove static route from ViNS -type StaticRouteDelRequest struct { - // ViNS ID to remove static route from - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Route ID to remove, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` -} - -// Remove static route from ViNS -func (v VINS) StaticRouteDel(ctx context.Context, req StaticRouteDelRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/vins/staticRouteDel" - - 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 -} diff --git a/pkg/cloudapi/vins/static_route_list.go b/pkg/cloudapi/vins/static_route_list.go deleted file mode 100644 index 47f96e4..0000000 --- a/pkg/cloudapi/vins/static_route_list.go +++ /dev/null @@ -1,42 +0,0 @@ -package vins - -import ( - "context" - "encoding/json" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for static route list -type StaticRouteListRequest struct { - // ViNS ID to show list of static routes - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` -} - -// Show list of static routes for ViNS -func (v VINS) StaticRouteList(ctx context.Context, req StaticRouteListRequest) (*ListStaticRoutes, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return nil, validators.ValidationError(validationError) - } - } - - url := "/cloudapi/vins/staticRouteList" - - res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return nil, err - } - - list := ListStaticRoutes{} - - err = json.Unmarshal(res, &list) - if err != nil { - return nil, err - } - - return &list, nil -} diff --git a/pkg/cloudbroker/compute/set_custom_fields.go b/pkg/cloudbroker/compute/set_custom_fields.go deleted file mode 100644 index aea4d9e..0000000 --- a/pkg/cloudbroker/compute/set_custom_fields.go +++ /dev/null @@ -1,43 +0,0 @@ -package compute - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) -// Request struct for setting customFields values for the Compute -type SetCustomFieldsRequest struct { - // ID of the compute - // Required: true - ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` - - // Custom fields for Compute. Must be dict. - // Required: true - CustomFields string `url:"customFields" json:"customFields" validate:"required"` -} - -// SetCustomFields sets customFields values for the Compute -func (c Compute) SetCustomFields(ctx context.Context, req SetCustomFieldsRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/compute/setCustomFields" - - 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/extnet/create.go b/pkg/cloudbroker/extnet/create.go index 6745d17..48fd109 100644 --- a/pkg/cloudbroker/extnet/create.go +++ b/pkg/cloudbroker/extnet/create.go @@ -2,24 +2,12 @@ package extnet import ( "context" - "encoding/json" "net/http" "strconv" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) -type Route struct { - // Destination network - Destination string `url:"destination" json:"destination" validate:"required"` - - //Destination network mask in 255.255.255.255 format - Netmask string `url:"netmask" json:"netmask" validate:"required"` - - //Next hop host, IP address from ViNS ID free IP pool - Gateway string `url:"gateway" json:"gateway" validate:"required"` -} - // Request struct for create external network type CreateRequest struct { // External network name @@ -82,15 +70,6 @@ type CreateRequest struct { // OpenvSwith bridge name for ExtNet connection // Required: false OVSBridge string `url:"ovsBridge,omitempty" json:"ovsBridge,omitempty"` - - // List of static routes, each item must have destination, netmask, and gateway fields - // Required: false - Routes []Route `url:"-" json:"routes,omitempty" validate:"omitempty,dive"` -} - -type wrapperCreateRequest struct { - CreateRequest - Routes []string `url:"routes,omitempty"` } // Create creates new external network into platform @@ -102,31 +81,9 @@ func (e ExtNet) Create(ctx context.Context, req CreateRequest) (uint64, error) { } } - var routes []string - - if len(req.Routes) != 0 { - routes = make([]string, 0, len(req.Routes)) - - for r := range req.Routes { - b, err := json.Marshal(req.Routes[r]) - if err != nil { - return 0, err - } - - routes = append(routes, string(b)) - } - } else { - routes = []string{} - } - - reqWrapped := wrapperCreateRequest{ - CreateRequest: req, - Routes: routes, - } - url := "/cloudbroker/extnet/create" - res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { return 0, err } diff --git a/pkg/cloudbroker/extnet/models.go b/pkg/cloudbroker/extnet/models.go index c5f0830..bcb35c5 100644 --- a/pkg/cloudbroker/extnet/models.go +++ b/pkg/cloudbroker/extnet/models.go @@ -151,33 +151,3 @@ type RecordExtNet struct { // List reservations Reservations ListReservations `json:"reservations"` } - -// List of static routes -type ListStaticRoutes struct { - // Data - Data []ItemRoutes `json:"data"` - - // Entry count - EntryCount uint64 `json:"entryCount"` -} - -// Detailed information about Routes -type ItemRoutes struct { - //Compute Id - ComputeIds []uint64 `json:"computeIds"` - - // Destination network - Destination string `json:"destination"` - - //Next hop host, IP address from ViNS ID free IP pool - Gateway string `json:"gateway"` - - // GUID - GUID string `json:"guid"` - - // ID - ID uint64 `json:"id"` - - //Destination network mask in 255.255.255.255 format - Netmask string `json:"netmask"` -} \ No newline at end of file diff --git a/pkg/cloudbroker/extnet/static_route_access_grant.go b/pkg/cloudbroker/extnet/static_route_access_grant.go deleted file mode 100644 index c75a152..0000000 --- a/pkg/cloudbroker/extnet/static_route_access_grant.go +++ /dev/null @@ -1,48 +0,0 @@ -package extnet - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for grant access to static route to Compute/ViNS -type StaticRouteAccessGrantRequest struct { - // ExtNet ID to grant access - // Required: true - ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` - - // Route ID to grant access, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` - - // List of Compute IDs to grant access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// Grant access to static route to Compute/ViNS -func (v ExtNet) StaticRouteAccessGrant(ctx context.Context, req StaticRouteAccessGrantRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/extnet/staticRouteAccessGrant" - - 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 -} diff --git a/pkg/cloudbroker/extnet/static_route_access_revoke.go b/pkg/cloudbroker/extnet/static_route_access_revoke.go deleted file mode 100644 index 91be311..0000000 --- a/pkg/cloudbroker/extnet/static_route_access_revoke.go +++ /dev/null @@ -1,48 +0,0 @@ -package extnet - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for revoke access to static route to Compute/ViNS -type StaticRouteAccessRevokeRequest struct { - // ExtNet ID to revoke access - // Required: true - ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` - - // Route ID to revoke access, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` - - // List of Compute IDs to revoke access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// Revoke access to static route to Compute/ViNS -func (v ExtNet) StaticRouteAccessRevoke(ctx context.Context, req StaticRouteAccessRevokeRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/extnet/staticRouteAccessRevoke" - - 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 -} diff --git a/pkg/cloudbroker/extnet/static_route_add.go b/pkg/cloudbroker/extnet/static_route_add.go deleted file mode 100644 index 6f418cc..0000000 --- a/pkg/cloudbroker/extnet/static_route_add.go +++ /dev/null @@ -1,56 +0,0 @@ -package extnet - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for add static route -type StaticRouteAddRequest struct { - // ExtNet ID to add static route - // Required: true - ExtNetId uint64 `url:"extnetId" json:"extnetId" validate:"required"` - - // Destination network - // Required: true - Destination string `url:"destination" json:"destination" validate:"required"` - - // Destination network mask in 255.255.255.255 format - // Required: true - Netmask string `url:"netmask" json:"netmask" validate:"required"` - - // Next hop host, IP address from ViNS ID free IP pool - // Required: true - Gateway string `url:"gateway" json:"gateway" validate:"required"` - - // List of Compute IDs which have access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// StaticRouteAdd add new static route to ViNS -func (v ExtNet) StaticRouteAdd(ctx context.Context, req StaticRouteAddRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/extnet/staticRouteAdd" - - 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 -} diff --git a/pkg/cloudbroker/extnet/static_route_del.go b/pkg/cloudbroker/extnet/static_route_del.go deleted file mode 100644 index f6c49f6..0000000 --- a/pkg/cloudbroker/extnet/static_route_del.go +++ /dev/null @@ -1,44 +0,0 @@ -package extnet - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for remove static route from ViNS -type StaticRouteDelRequest struct { - // ExtNet ID to remove static route from - // Required: true - ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` - - // Route ID to remove, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` -} - -// Remove static route from ViNS -func (v ExtNet) StaticRouteDel(ctx context.Context, req StaticRouteDelRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/extnet/staticRouteDel" - - 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 -} diff --git a/pkg/cloudbroker/extnet/static_route_list.go b/pkg/cloudbroker/extnet/static_route_list.go deleted file mode 100644 index 9c411a4..0000000 --- a/pkg/cloudbroker/extnet/static_route_list.go +++ /dev/null @@ -1,42 +0,0 @@ -package extnet - -import ( - "context" - "encoding/json" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for static route list -type StaticRouteListRequest struct { - // ExtNet ID to show list of static routes - // Required: true - ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` -} - -// Show list of static routes for ViNS -func (v ExtNet) StaticRouteList(ctx context.Context, req StaticRouteListRequest) (*ListStaticRoutes, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return nil, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/extnet/staticRouteList" - - res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return nil, err - } - - list := ListStaticRoutes{} - - err = json.Unmarshal(res, &list) - if err != nil { - return nil, err - } - - return &list, nil -} diff --git a/pkg/cloudbroker/k8s/create.go b/pkg/cloudbroker/k8s/create.go index a9eb876..b2d5ad9 100644 --- a/pkg/cloudbroker/k8s/create.go +++ b/pkg/cloudbroker/k8s/create.go @@ -8,8 +8,6 @@ import ( "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) -// type Params []string - // Request struct for create K8S type CreateRequest struct { // Name of kubernetes cluster @@ -102,77 +100,16 @@ type CreateRequest struct { // Required: false ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"` - // ID of the ViNS to connect k8s cluster. If nothing is specified, ViNS will be created automatically - // Required: false - VinsId uint64 `url:"vinsId,omitempty" json:"vinsId,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"` - // Custom sysctl values for Load Balancer instance. Applied on boot - // Required: false - LbSysctlParams string `url:"-" json:"lbSysctlParams,omitempty" validate:"omitempty,dive"` - - // Use Highly Available schema for LB deploy - // Required: false - HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"` - - // Optional extra Subject Alternative Names (SANs) to use for the API Server serving certificate. Can be both IP addresses and DNS names - // Required: false - AdditionalSANs []string `url:"additionalSANs,omitempty" json:"additionalSANs,omitempty"` - - // Is used to define settings and actions that should be performed before any other component in the cluster starts. - // It allows you to configure things like node registration, network setup, and other initialization tasks. insert a valid JSON string with all levels of nesting - // Required: false - InitConfiguration string `url:"initConfiguration,omitempty" json:"initConfiguration,omitempty"` - - // Is used to define global settings and configurations for the entire cluster. - // It includes parameters such as cluster name, DNS settings, authentication methods, and other cluster-wide configurations. - // Insert a valid JSON string with all levels of nesting - // Required: false - ClusterConfiguration string `url:"clusterConfiguration,omitempty" json:"clusterConfiguration,omitempty"` - - // Is used to configure the behavior and settings of the Kubelet, which is the primary node agent that runs on each node in the cluster. - // It includes parameters such as node IP address, resource allocation, pod eviction policies, and other Kubelet-specific configurations. - // Insert a valid JSON string with all levels of nesting - // Required: false - KubeletConfiguration string `url:"kubeletConfiguration,omitempty" json:"kubeletConfiguration,omitempty"` - - // Is used to configure the behavior and settings of the Kube-proxy, which is responsible for network proxying and load balancing within the cluster. - // It includes parameters such as proxy mode, cluster IP ranges, and other Kube-proxy specific configurations. - // Insert a valid JSON string with all levels of nesting - // Required: false - KubeProxyConfiguration string `url:"kubeProxyConfiguration,omitempty" json:"kubeProxyConfiguration,omitempty"` - - // Is used to configure the behavior and settings for joining a node to a cluster. - // It includes parameters such as the cluster's control plane endpoint, token, and certificate key. insert a valid JSON string with all levels of nesting - // Required: false - JoinConfiguration string `url:"joinConfiguration,omitempty" json:"joinConfiguration,omitempty"` - // Text description of this kubernetes cluster // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` - - // Meta data for working group computes, format YAML "user_data": 1111 - // Required: false - UserData string `url:"userData,omitempty" json:"userData,omitempty"` - - // Use only selected ExtNet for infrastructure connections - // Required: false - ExtNetOnly bool `url:"extnetOnly,omitempty" json:"extnetOnly,omitempty"` - - // Insert ssl certificate in x509 pem format - // Required: false - OidcCertificate string `url:"oidcCertificate,omitempty" json:"oidcCertificate,omitempty"` } -// type wrapperCreateRequest struct { -// CreateRequest -// Params []string `url:"lbSysctlParams,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) @@ -182,28 +119,6 @@ func (k K8S) Create(ctx context.Context, req CreateRequest) (string, error) { } } - // var params []string - - // if len(req.LbSysctlParams) != 0 { - // params = make([]string, 0, len(req.LbSysctlParams)) - - // for r := range req.LbSysctlParams { - // b, err := json.Marshal(req.LbSysctlParams[r]) - // if err != nil { - // return "", err - // } - - // params = append(params, string(b)) - // } - // } else { - // params = []string{} - // } - - // reqWrapped := wrapperCreateRequest{ - // CreateRequest: req, - // Params: params, - // } - url := "/cloudbroker/k8s/create" res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, req) diff --git a/pkg/cloudbroker/k8s/get_worker_nodes_meta_data.go b/pkg/cloudbroker/k8s/get_worker_nodes_meta_data.go deleted file mode 100644 index 536d628..0000000 --- a/pkg/cloudbroker/k8s/get_worker_nodes_meta_data.go +++ /dev/null @@ -1,38 +0,0 @@ -package k8s - -import ( - "context" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for get worker group metadata by ID -type GetWorkerNodesMetaDataRequest struct { - // Kubernetes cluster ID - // Required: true - K8SID uint64 `url:"k8sId" json:"k8sId" validate:"required"` - - // ID of the workers compute group - // Required: true - WorkersGroupID uint64 `url:"workersGroupId" json:"workersGroupId" validate:"required"` -} - -// Get worker group metadata by ID -func (k K8S) GetWorkerNodesMetaData(ctx context.Context, req GetWorkerNodesMetaDataRequest) (string, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return "", validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/k8s/getWorkerNodesMetaData" - - res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return "", err - } - - return string(res), nil -} diff --git a/pkg/cloudbroker/k8s/models.go b/pkg/cloudbroker/k8s/models.go index fd686b5..953b017 100644 --- a/pkg/cloudbroker/k8s/models.go +++ b/pkg/cloudbroker/k8s/models.go @@ -2,9 +2,6 @@ package k8s // Deteiled information type ItemDetailedInfo struct { - // External Ip - ExternalIp string `json:"externalip"` - // ID ID uint64 `json:"id"` @@ -14,7 +11,7 @@ type ItemDetailedInfo struct { // Status Status string `json:"status"` - // Tech status + // Status TechStatus string `json:"techStatus"` } diff --git a/pkg/cloudbroker/k8s/update_worker_nodes_meta_data.go b/pkg/cloudbroker/k8s/update_worker_nodes_meta_data.go deleted file mode 100644 index cb0e81a..0000000 --- a/pkg/cloudbroker/k8s/update_worker_nodes_meta_data.go +++ /dev/null @@ -1,48 +0,0 @@ -package k8s - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for add worker to a kubernetes cluster -type UpdateWorkerNodesMetaDataRequest struct { - // Kubernetes cluster ID - // Required: true - K8SID uint64 `url:"k8sId" json:"k8sId" validate:"required"` - - // ID of the workers compute group - // Required: true - WorkersGroupID uint64 `url:"workersGroupId" json:"workersGroupId" validate:"required"` - - // Meta data for working group computes, format YAML "user_data": 1111 - // Required: true - UserData string `url:"userData" json:"userData" validate:"required"` -} - -// WorkerAdd adds worker nodes to a kubernetes cluster -func (k K8S) UpdateWorkerNodesMetaData(ctx context.Context, req UpdateWorkerNodesMetaDataRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/k8s/updateWorkerNodesMetaData" - - res, err := k.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/kvmppc/create.go b/pkg/cloudbroker/kvmppc/create.go index 083a7d7..15915c7 100644 --- a/pkg/cloudbroker/kvmppc/create.go +++ b/pkg/cloudbroker/kvmppc/create.go @@ -79,11 +79,7 @@ type CreateRequest struct { // Start VM upon success // Required: false - Start bool `url:"start" json:"start"` - - // Stack ID - // Required: false - StackID uint64 `url:"stackId,omitempty" json:"stackId,omitempty"` + Start bool `url:"start,omitempty" json:"start,omitempty"` // System name // Required: false @@ -92,10 +88,6 @@ type CreateRequest struct { // Compute purpose // Required: false IPAType string `url:"ipaType,omitempty" json:"ipaType,omitempty"` - - // Reason for action - // Required: false - Reason string `url:"reason,omitempty" json:"reason,omitempty"` } type wrapperCreateRequest struct { diff --git a/pkg/cloudbroker/kvmppc/mass_create.go b/pkg/cloudbroker/kvmppc/mass_create.go index d3848ca..41ff703 100644 --- a/pkg/cloudbroker/kvmppc/mass_create.go +++ b/pkg/cloudbroker/kvmppc/mass_create.go @@ -64,7 +64,7 @@ type MassCreateRequest struct { // Start after create of not // Required: false - Start bool `url:"start" json:"start"` + Start bool `url:"start,omitempty" json:"start,omitempty"` // Reason to action // Required: false diff --git a/pkg/cloudbroker/kvmx86/create.go b/pkg/cloudbroker/kvmx86/create.go index 9f1b4a7..987721b 100644 --- a/pkg/cloudbroker/kvmx86/create.go +++ b/pkg/cloudbroker/kvmx86/create.go @@ -79,7 +79,7 @@ type CreateRequest struct { // Start VM upon success // Required: false - Start bool `url:"start" json:"start"` + Start bool `url:"start,omitempty" json:"start,omitempty"` // Stack ID // Required: false @@ -97,10 +97,6 @@ type CreateRequest struct { // Required: false CustomField string `url:"customFields,omitempty" json:"customFields,omitempty"` - //Type of compute Stateful (KVM_X86) or Stateless (SVA_KVM_X86) - // Required: false - Driver string `url:"driver,omitempty" json:"driver,omitempty"` - // Reason for action // Required: false Reason string `url:"reason,omitempty" json:"reason,omitempty"` diff --git a/pkg/cloudbroker/kvmx86/create_blank.go b/pkg/cloudbroker/kvmx86/create_blank.go index acfeb25..62d7515 100644 --- a/pkg/cloudbroker/kvmx86/create_blank.go +++ b/pkg/cloudbroker/kvmx86/create_blank.go @@ -50,10 +50,6 @@ type CreateBlankRequest struct { // Text description of this VM // Required: false Description string `url:"desc,omitempty" json:"desc,omitempty"` - - //Type of compute Stateful (KVM_X86) or Stateless (SVA_KVM_X86) - // Required: false - Driver string `url:"driver,omitempty" json:"driver,omitempty"` } type wrapperCreateBlankRequest struct { diff --git a/pkg/cloudbroker/kvmx86/mass_create.go b/pkg/cloudbroker/kvmx86/mass_create.go index d8768a8..30d8671 100644 --- a/pkg/cloudbroker/kvmx86/mass_create.go +++ b/pkg/cloudbroker/kvmx86/mass_create.go @@ -64,7 +64,7 @@ type MassCreateRequest struct { // Start after create of not // Required: false - Start bool `url:"start" json:"start"` + Start bool `url:"start,omitempty" json:"start,omitempty"` // Reason to action // Required: false diff --git a/pkg/cloudbroker/lb/create.go b/pkg/cloudbroker/lb/create.go index df30ec2..7048fe0 100644 --- a/pkg/cloudbroker/lb/create.go +++ b/pkg/cloudbroker/lb/create.go @@ -2,16 +2,12 @@ package lb import ( "context" - "encoding/json" - "errors" "net/http" "strconv" "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" ) -type Params []string - // Request struct for create load balancer type CreateRequest struct { // ID of the resource group where this load balancer instance will be located @@ -24,20 +20,12 @@ type CreateRequest struct { Name string `url:"name" json:"name" validate:"required"` // External network to connect this load balancer to - // Required: false - ExtNetID uint64 `url:"extnetId" json:"extnetId"` + // Required: true + ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"` // Internal network (VINS) to connect this load balancer to - // Required: false - VINSID uint64 `url:"vinsId" json:"vinsId"` - - // Custom sysctl values for Load Balancer instance. Applied on boot - // Required: false - SysctlParams Params `url:"-" json:"sysctlParams,omitempty" validate:"omitempty,dive"` - - // Use Highly Available schema for LB deploy - // Required: false - HighlyAvailable bool `url:"highlyAvailable,omitempty" json:"highlyAvailable,omitempty"` + // Required: true + VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` // Start now Load balancer // Required: false @@ -48,11 +36,6 @@ type CreateRequest struct { Description string `url:"desc,omitempty" json:"desc,omitempty"` } -type wrapperCreateRequest struct { - CreateRequest - Params []string `url:"sysctlParams,omitempty"` -} - // Create method will create a new load balancer instance func (lb LB) Create(ctx context.Context, req CreateRequest) (uint64, error) { err := validators.ValidateRequest(req) @@ -62,35 +45,9 @@ func (lb LB) Create(ctx context.Context, req CreateRequest) (uint64, error) { } } - if req.ExtNetID == 0 && req.VINSID == 0 { - return 0, errors.New("vinsId and extNetId cannot be both in the value 0") - } - - var params []string - - if len(req.SysctlParams) != 0 { - params = make([]string, 0, len(req.SysctlParams)) - - for r := range req.SysctlParams { - b, err := json.Marshal(req.SysctlParams[r]) - if err != nil { - return 0, err - } - - params = append(params, string(b)) - } - } else { - params = []string{} - } - - reqWrapped := wrapperCreateRequest{ - CreateRequest: req, - Params: params, - } - url := "/cloudbroker/lb/create" - res, err := lb.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) + res, err := lb.client.DecortApiCall(ctx, http.MethodPost, url, req) if err != nil { return 0, err } diff --git a/pkg/cloudbroker/lb/make_highly_available.go b/pkg/cloudbroker/lb/make_highly_available.go deleted file mode 100644 index f78b516..0000000 --- a/pkg/cloudbroker/lb/make_highly_available.go +++ /dev/null @@ -1,40 +0,0 @@ -package lb - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for make Load Balancer Highly available -type HighlyAvailableRequest struct { - // ID of the LB instance - // Required: true - LBID uint64 `url:"lbId" json:"lbId" validate:"required"` -} - -// Make Load Balancer Highly available -func (l LB) HighlyAvailable(ctx context.Context, req HighlyAvailableRequest) (uint64, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return 0, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/lb/makeHighlyAvailable" - - res, err := l.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 -} diff --git a/pkg/cloudbroker/lb/models.go b/pkg/cloudbroker/lb/models.go index a184757..d2b89f4 100644 --- a/pkg/cloudbroker/lb/models.go +++ b/pkg/cloudbroker/lb/models.go @@ -192,9 +192,6 @@ type RecordLB struct { // Name Name string `json:"name"` - // Part K8s - PartK8s bool `json:"partK8s"` - // Primary node PrimaryNode Node `json:"primaryNode"` @@ -207,9 +204,6 @@ type RecordLB struct { // Status Status string `json:"status"` - // Sysctl Params - SysctlParams []string `json:"sysctlParams"` - // Tech status TechStatus string `json:"techStatus"` @@ -285,9 +279,6 @@ type ItemLBList struct { // Status Status string `json:"status"` - // Sysctl Params - SysctlParams []string `json:"sysctlParams"` - // Tech status TechStatus string `json:"techStatus"` diff --git a/pkg/cloudbroker/lb/updateSysctParams.go b/pkg/cloudbroker/lb/updateSysctParams.go deleted file mode 100644 index 018f5e8..0000000 --- a/pkg/cloudbroker/lb/updateSysctParams.go +++ /dev/null @@ -1,72 +0,0 @@ -package lb - -import ( - "context" - "encoding/json" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for update sysct params for lb -type UpdateSysctParamsRequest struct { - // ID of the LB instance - // Required: true - LBID uint64 `url:"lbId" json:"lbId" validate:"required"` - - // Custom sysctl values for Load Balancer instance. Applied on boot - // Required: true - SysctlParams Params `url:"-" json:"sysctlParams" validate:"required,dive"` -} - -type wrapperUpdateSysctParamsRequest struct { - UpdateSysctParamsRequest - Params []string `url:"sysctlParams" validate:"required"` -} - -// Create method will create a new load balancer instance -func (l LB) UpdateSysctParams(ctx context.Context, req UpdateSysctParamsRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - var params []string - - if len(req.SysctlParams) != 0 { - params = make([]string, 0, len(req.SysctlParams)) - - for r := range req.SysctlParams { - b, err := json.Marshal(req.SysctlParams[r]) - if err != nil { - return false, err - } - - params = append(params, string(b)) - } - } else { - params = []string{} - } - - reqWrapped := wrapperUpdateSysctParamsRequest{ - UpdateSysctParamsRequest: req, - Params: params, - } - - url := "/cloudbroker/lb/updateSysctParams" - - res, err := l.client.DecortApiCall(ctx, http.MethodPost, url, reqWrapped) - 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 cf7d66b..7658d87 100644 --- a/pkg/cloudbroker/vins/models.go +++ b/pkg/cloudbroker/vins/models.go @@ -411,19 +411,8 @@ type InfoVNF struct { Type string `json:"type"` } -// List of static routes -type ListStaticRoutes struct { - // Data - Data []ItemRoutes `json:"data"` - - // Entry count - EntryCount uint64 `json:"entryCount"` -} - -// List of Routes type ListRoutes []ItemRoutes -// Detailed information about Routes type ItemRoutes struct { //Compute Id ComputeIds []uint64 `json:"computeIds"` @@ -435,7 +424,7 @@ type ItemRoutes struct { Gateway string `json:"gateway"` // GUID - GUID string `json:"guid"` + GUID uint64 `json:"guid"` // ID ID uint64 `json:"id"` diff --git a/pkg/cloudbroker/vins/static_route_access_grant.go b/pkg/cloudbroker/vins/static_route_access_grant.go deleted file mode 100644 index 10a139e..0000000 --- a/pkg/cloudbroker/vins/static_route_access_grant.go +++ /dev/null @@ -1,48 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for grant access to static route to Compute/ViNS -type StaticRouteAccessGrantRequest struct { - // ViNS ID to grant access - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Route ID to grant access, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` - - // List of Compute IDs to grant access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// Grant access to static route to Compute/ViNS -func (v VINS) StaticRouteAccessGrant(ctx context.Context, req StaticRouteAccessGrantRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/vins/staticRouteAccessGrant" - - 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 -} diff --git a/pkg/cloudbroker/vins/static_route_access_revoke.go b/pkg/cloudbroker/vins/static_route_access_revoke.go deleted file mode 100644 index e18a859..0000000 --- a/pkg/cloudbroker/vins/static_route_access_revoke.go +++ /dev/null @@ -1,48 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for revoke access to static route to Compute/ViNS -type StaticRouteAccessRevokeRequest struct { - // ViNS ID to revoke access - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Route ID to revoke access, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` - - // List of Compute IDs to revoke access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// Revoke access to static route to Compute/ViNS -func (v VINS) StaticRouteAccessRevoke(ctx context.Context, req StaticRouteAccessRevokeRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/vins/staticRouteAccessRevoke" - - 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 -} diff --git a/pkg/cloudbroker/vins/static_route_add.go b/pkg/cloudbroker/vins/static_route_add.go deleted file mode 100644 index b2ad2ce..0000000 --- a/pkg/cloudbroker/vins/static_route_add.go +++ /dev/null @@ -1,56 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for add static route -type StaticRouteAddRequest struct { - // VINS ID - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Destination network - // Required: true - Destination string `url:"destination" json:"destination" validate:"required"` - - // Destination network mask in 255.255.255.255 format - // Required: true - Netmask string `url:"netmask" json:"netmask" validate:"required"` - - // Next hop host, IP address from ViNS ID free IP pool - // Required: true - Gateway string `url:"gateway" json:"gateway" validate:"required"` - - // List of Compute IDs which have access to this route - // Required: false - ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"` -} - -// StaticRouteAdd add new static route to ViNS -func (v VINS) StaticRouteAdd(ctx context.Context, req StaticRouteAddRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/vins/staticRouteAdd" - - 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 -} diff --git a/pkg/cloudbroker/vins/static_route_del.go b/pkg/cloudbroker/vins/static_route_del.go deleted file mode 100644 index d01e50d..0000000 --- a/pkg/cloudbroker/vins/static_route_del.go +++ /dev/null @@ -1,44 +0,0 @@ -package vins - -import ( - "context" - "net/http" - "strconv" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for remove static route from ViNS -type StaticRouteDelRequest struct { - // ViNS ID to remove static route from - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` - - // Route ID to remove, can be found in staticRouteList - // Required: true - RouteId uint64 `url:"routeId" json:"routeId" validate:"required"` -} - -// Remove static route from ViNS -func (v VINS) StaticRouteDel(ctx context.Context, req StaticRouteDelRequest) (bool, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return false, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/vins/staticRouteDel" - - 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 -} diff --git a/pkg/cloudbroker/vins/static_route_list.go b/pkg/cloudbroker/vins/static_route_list.go deleted file mode 100644 index 40ba122..0000000 --- a/pkg/cloudbroker/vins/static_route_list.go +++ /dev/null @@ -1,42 +0,0 @@ -package vins - -import ( - "context" - "encoding/json" - "net/http" - - "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" -) - -// Request struct for static route list -type StaticRouteListRequest struct { - // ViNS ID to show list of static routes - // Required: true - VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"` -} - -// Show list of static routes for ViNS -func (v VINS) StaticRouteList(ctx context.Context, req StaticRouteListRequest) (*ListStaticRoutes, error) { - err := validators.ValidateRequest(req) - if err != nil { - for _, validationError := range validators.GetErrors(err) { - return nil, validators.ValidationError(validationError) - } - } - - url := "/cloudbroker/vins/staticRouteList" - - res, err := v.client.DecortApiCall(ctx, http.MethodPost, url, req) - if err != nil { - return nil, err - } - - list := ListStaticRoutes{} - - err = json.Unmarshal(res, &list) - if err != nil { - return nil, err - } - - return &list, nil -}