From f1529c9aac8998d601d0fffdd2567daac700662c Mon Sep 17 00:00:00 2001 From: Nikita Sorokin Date: Wed, 9 Aug 2023 19:33:50 +0300 Subject: [PATCH] v1.5.2 --- CHANGELOG.md | 14 +++++++++++--- internal/client/legacy-http-client.go | 20 ++++++++++++++------ internal/client/legacy-transport.go | 20 ++++++++++++-------- internal/validators/custom.go | 11 ++++++++++- internal/validators/messages.go | 6 ++++++ internal/validators/validator.go | 5 +++++ pkg/cloudapi/disks/list.go | 8 ++++++++ pkg/cloudapi/k8s/create.go | 2 +- pkg/cloudbroker/account/delete_user.go | 2 +- pkg/cloudbroker/account/disable.go | 2 +- pkg/cloudbroker/account/enable.go | 2 +- pkg/cloudbroker/account/list_vins.go | 2 +- pkg/cloudbroker/disks/list.go | 8 ++++++++ pkg/cloudbroker/k8s/create.go | 2 +- 14 files changed, 80 insertions(+), 24 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5576b0a..b633f9f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,14 @@ -## Version 1.5.1 +## Version 1.5.2 ### Bugfix -- Changed StatelessSepID field type in cloudapi/compute/get and cloudapi/compute/list responde models +- Fix tag 'url' VINSID field in cloudbroker/account/list_vins -- Added oppurtunity to create compute without interface in cloudapi/cloubroker/kvm*/create* +- Made the field Reason not required in cloudbroker/account/enable and cloudbroker/account/disable + +- Made the field RecursiveDelete required in cloudbroker/account/deleteUser + +- Add a validator function to a workersGroupName field - must be 3 or more symbol + +- Add a token actuality check, add an error handler in client/client-transport and client/http-client + +- Add a fields SEPID and Pool in ListRequest struct in cloudbroker/disks/list and cloudapi/disks/list diff --git a/internal/client/legacy-http-client.go b/internal/client/legacy-http-client.go index 6754d2a..123df0c 100644 --- a/internal/client/legacy-http-client.go +++ b/internal/client/legacy-http-client.go @@ -4,6 +4,7 @@ import ( "crypto/tls" "net/http" "net/url" + "time" "repository.basistech.ru/BASIS/decort-golang-sdk/config" ) @@ -17,14 +18,21 @@ func NewLegacyHttpClient(cfg config.LegacyConfig) *http.Client { }, } + var expiredTime time.Time + + if cfg.Token != "" { + expiredTime = time.Now().AddDate(0, 0, 1) + } + return &http.Client{ Transport: &transportLegacy{ - base: transCfg, - username: url.QueryEscape(cfg.Username), - password: url.QueryEscape(cfg.Password), - retries: cfg.Retries, - token: cfg.Token, - decortURL: cfg.DecortURL, + base: transCfg, + username: url.QueryEscape(cfg.Username), + password: url.QueryEscape(cfg.Password), + retries: cfg.Retries, + token: cfg.Token, + decortURL: cfg.DecortURL, + expiryTime: expiredTime, }, Timeout: cfg.Timeout.Get(), diff --git a/internal/client/legacy-transport.go b/internal/client/legacy-transport.go index 5c4e36f..d2ddd1b 100644 --- a/internal/client/legacy-transport.go +++ b/internal/client/legacy-transport.go @@ -9,16 +9,17 @@ import ( ) type transportLegacy struct { - base http.RoundTripper - username string - password string - retries uint64 - token string - decortURL string + base http.RoundTripper + username string + password string + retries uint64 + token string + decortURL string + expiryTime time.Time } func (t *transportLegacy) RoundTrip(request *http.Request) (*http.Response, error) { - if t.token == "" { + if t.token == "" || time.Now().After(t.expiryTime) { body := fmt.Sprintf("username=%s&password=%s", t.username, t.password) bodyReader := strings.NewReader(body) @@ -39,6 +40,7 @@ func (t *transportLegacy) RoundTrip(request *http.Request) (*http.Response, erro token := string(tokenBytes) t.token = token + t.expiryTime = time.Now().AddDate(0, 0, 1) } tokenValue := fmt.Sprintf("&authkey=%s", t.token) @@ -63,7 +65,9 @@ func (t *transportLegacy) RoundTrip(request *http.Request) (*http.Response, erro err = fmt.Errorf("%s", respBytes) resp.Body.Close() } - + if err != nil { + return nil, fmt.Errorf("could not execute request: %w", err) + } time.Sleep(time.Second * 5) } return nil, fmt.Errorf("could not execute request: %w", err) diff --git a/internal/validators/custom.go b/internal/validators/custom.go index aa7349c..ee6db50 100644 --- a/internal/validators/custom.go +++ b/internal/validators/custom.go @@ -1,9 +1,10 @@ package validators import ( - "github.com/go-playground/validator/v10" "regexp" "strings" + + "github.com/go-playground/validator/v10" ) // computeDriverValidator is used to validate Driver field in kvmx86/kvmppc create. @@ -263,3 +264,11 @@ func strictLooseValidator(fe validator.FieldLevel) bool { return StringInSlice(fieldValue, strictLooseValues) } + +// name workerGroup must be more 3 symbol +func workerGroupNameValidator(fe validator.FieldLevel) bool { + fieldValue := fe.Field().String() + fieldValue = strings.Trim(fieldValue, " ") + + return len(fieldValue) >= 3 +} diff --git a/internal/validators/messages.go b/internal/validators/messages.go index aad0fc6..9cb72c8 100644 --- a/internal/validators/messages.go +++ b/internal/validators/messages.go @@ -127,6 +127,12 @@ func errorMessage(fe validator.FieldError) string { fe.Field(), joinValues(flipgroupClientTypeValues)) + // k8s Validators + case "workerGroupName": + return fmt.Sprintf("%s %s must be more 3 symbol", + prefix, + fe.Field()) + // KVM_X86/KVM_PPC Validators case "kvmNetType": return fmt.Sprintf("%s %s must be one of the following: %s", diff --git a/internal/validators/validator.go b/internal/validators/validator.go index 4161820..fd8017e 100644 --- a/internal/validators/validator.go +++ b/internal/validators/validator.go @@ -180,5 +180,10 @@ func registerAllValidators(validate *validator.Validate) error { return err } + err = validate.RegisterValidation("workerGroupName", workerGroupNameValidator) + if err != nil { + return err + } + return nil } diff --git a/pkg/cloudapi/disks/list.go b/pkg/cloudapi/disks/list.go index a69ecdb..b2baf7d 100644 --- a/pkg/cloudapi/disks/list.go +++ b/pkg/cloudapi/disks/list.go @@ -40,6 +40,14 @@ type ListRequest struct { // Required: false Type string `url:"type,omitempty" json:"type,omitempty"` + // Find by sep ID + // Required: false + SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` + + // Find by pool name + // Required: false + Pool string `url:"pool,omitempty" json:"pool,omitempty"` + // Page number // Required: false Page uint64 `url:"page,omitempty" json:"page,omitempty"` diff --git a/pkg/cloudapi/k8s/create.go b/pkg/cloudapi/k8s/create.go index fb9e0cc..d00edcf 100644 --- a/pkg/cloudapi/k8s/create.go +++ b/pkg/cloudapi/k8s/create.go @@ -24,7 +24,7 @@ type CreateRequest struct { // Name for first worker group created with cluster // Required: true - WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required"` + WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required,workerGroupName"` // Network plugin // Must be one of these values: flannel, weawenet, calico diff --git a/pkg/cloudbroker/account/delete_user.go b/pkg/cloudbroker/account/delete_user.go index ed1542d..4435130 100644 --- a/pkg/cloudbroker/account/delete_user.go +++ b/pkg/cloudbroker/account/delete_user.go @@ -20,7 +20,7 @@ type DeleteUserRequest struct { // Recursively revoke access rights from owned cloudspaces and vmachines // Required: false - RecursiveDelete bool `url:"recursivedelete,omitempty" json:"recursivedelete,omitempty"` + RecursiveDelete bool `url:"recursivedelete" json:"recursivedelete" validate:"required"` } // DeleteUser revokes user access from the account diff --git a/pkg/cloudbroker/account/disable.go b/pkg/cloudbroker/account/disable.go index c86d204..2ff8499 100644 --- a/pkg/cloudbroker/account/disable.go +++ b/pkg/cloudbroker/account/disable.go @@ -16,7 +16,7 @@ type DisableRequest struct { // Reason to disable // Required: true - Reason string `url:"reason" json:"reason" validate:"required"` + Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Disable disables an account diff --git a/pkg/cloudbroker/account/enable.go b/pkg/cloudbroker/account/enable.go index 5766de8..1088ef6 100644 --- a/pkg/cloudbroker/account/enable.go +++ b/pkg/cloudbroker/account/enable.go @@ -16,7 +16,7 @@ type EnableRequest struct { // Reason to enable // Required: true - Reason string `url:"reason" json:"reason" validate:"required"` + Reason string `url:"reason,omitempty" json:"reason,omitempty"` } // Enable enables an account diff --git a/pkg/cloudbroker/account/list_vins.go b/pkg/cloudbroker/account/list_vins.go index 02692fd..aa9abd2 100644 --- a/pkg/cloudbroker/account/list_vins.go +++ b/pkg/cloudbroker/account/list_vins.go @@ -16,7 +16,7 @@ type ListVINSRequest struct { // Find by VINS ID // Required: false - VINSID uint64 `url:"vins,omitempty" json:"vinsId,omitempty"` + VINSID uint64 `url:"vinsId,omitempty" json:"vinsId,omitempty"` // Find by name // Required: false diff --git a/pkg/cloudbroker/disks/list.go b/pkg/cloudbroker/disks/list.go index fcbadec..26e043e 100644 --- a/pkg/cloudbroker/disks/list.go +++ b/pkg/cloudbroker/disks/list.go @@ -40,6 +40,14 @@ type ListRequest struct { // Required: false Type string `url:"type,omitempty" json:"type,omitempty"` + // Find by sep ID + // Required: false + SEPID uint64 `url:"sepId,omitempty" json:"sepId,omitempty"` + + // Find by pool name + // Required: false + Pool string `url:"pool,omitempty" json:"pool,omitempty"` + // Page number // Required: false Page uint64 `url:"page,omitempty" json:"page,omitempty"` diff --git a/pkg/cloudbroker/k8s/create.go b/pkg/cloudbroker/k8s/create.go index 3bca12f..b2d5ad9 100644 --- a/pkg/cloudbroker/k8s/create.go +++ b/pkg/cloudbroker/k8s/create.go @@ -24,7 +24,7 @@ type CreateRequest struct { // Name for first worker group created with cluster // Required: true - WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required"` + WorkerGroupName string `url:"workerGroupName" json:"workerGroupName" validate:"required, workerGroupName"` // Network plugin // Must be one of these values: flunnel, weawenet, calico