Compare commits

..

3 Commits

Author SHA1 Message Date
1c59ca338a v1.5.3 2023-08-15 11:42:30 +03:00
f1529c9aac v1.5.2 2023-08-09 19:33:50 +03:00
040235f92f v1.5.1 2023-07-24 18:13:52 +03:00
19 changed files with 96 additions and 188 deletions

View File

@@ -1,162 +1,10 @@
## Version 1.5.0
### Feature
- Updated lists responses models in:
- - cloudapi/account/list
- - cloudbroker/account/list
- - cloudapi/bservice/list
- - cloudapi/compute/list
- - cloudbroker/compute/list
- - cloudapi/computeci/list
- - cloudapi/disks/list
- - cloudbroker/disks/list
- - cloudapi/extnet/list
- - cloudbroker/extnet/list
- - cloudapi/flipgroup/list
- - cloudapi/image/list
- - cloudbroker/image/list
- - cloudapi/k8ci/list
- - cloudbroker/k8ci/list
- - cloudapi/k8s/list
- - cloudapi/k8s/listDeleted
- - cloudbroker/k8s/list
- - cloudbroker/k8s/listDeleted
- - cloudapi/tasks/list
- - cloudbroker/tasks/list
- - cloudapi/rg/list
- - cloudbroker/rg/list
- - cloudapi/vins/list
- - cloudbroker/vins/list
- - cloudapi/account/listDeleted
- - cloudapi/account/listCompute
- - cloudapi/account/listDisks
- - cloudapi/account/listFlipGroups
- - cloudapi/account/listRG
- - cloudapi/account/listVINS
- - cloudapi/compute/listDeleted
- - cloudapi/disks/listDeleted
- - cloudapi/disks/listTypes
- - cloudapi/k8ci/listDeleted
- - cloudapi/lb/list
- - cloudapi/lb/listDeleted
- - cloudbroker/lb/list
- - cloudbroker/lb/listDeleted
- - cloudapi/rg/listComputes
- - cloudapi/rg/listDeleted
- - cloudapi/rg/listLb
- - cloudapi/rg/listPFW
- - cloudapi/rg/listVins
- - cloudapi/vins/listDeleted
- - cloudbroker/account/listComputes
- - cloudbroker/account/listDeleted
- - cloudbroker/account/listDisks
- - cloudbroker/account/listFlipGroups
- - cloudbroker/account/listRG
- - cloudbroker/account/listVINS
- - cloudbroker/compute/listDeleted
- - cloudapi/compute/listPciDevice
- - cloudbroker/compute/listPciDevice
- - cloudapi/compute/listVGpu
- - cloudbroker/compute/listVGpu
- - cloudbroker/disks/listTypes
- - cloudbroker/grid/list
- - cloudbroker/grid/listEmails
- - cloudbroker/k8ci/listDeleted
- - cloudbroker/pcidevice/list
- - cloudbroker/rg/affinityGroupsList
- - cloudbroker/rg/listDeleted
- - cloudbroker/rg/listComputes
- - cloudbroker/rg/listLB
- - cloudbroker/rg/listPfw
- - cloudbroker/rg/listResourceConsumption
- - cloudbroker/rg/listVins
- - cloudbroker/sep/list
- - cloudbroker/vgpu/list
- - cloudbroker/vins/extnetList
- - cloudbroker/vins/IpList
- - cloudbroker/vins/natRuleList
- - cloudapi/account/listTemplates
- - cloudapi/compute/pfwList
- - cloudapi/compute/sanpshotList
- - cloudapi/compute/userList
- - cloudapi/vins/extnetList
- - cloudapi/vins/ipList
- - cloudapi/vins/natRuleList
- - cloudapi/sizes/list
- - cloudapi/rg/affinityGroupsList
- - cloudapi/extnet/listComputes
- Added new endpoints:
- - cloudapi/rg/getResourceConsumption
- - cloudapi/rg/listResourceConsumption
- - cloudbroker/rg/getResourceConsumption
- - cloudbroker/rg/listResourceConsumption
- - cloudapi/account/getResourceConsumption
- - cloudapi/account/listResourceConsumption
- - cloudbroker/account/getResourceConsumption
- - cloudbroker/account/listResourceConsumption
- - cloudbroker/grid/getResourceConsumption
- - cloudbroker/grid/listResourceConsumption
- - cloudapi/compute/getCustomFields
- - cloudapi/compute/deleteCustomFields
- - cloudapi/compute/setCustomFields
- Added field CU_DM to ResourceLimits model (account, rg)
- Added field ReferenceID to SnapshotExtended model in cloudapi/compute/get
- Added field Interfaces in requests:
- - cloudapi/kvmppc/create
- - cloudapi/kvmppc/createBlank
- - cloudapi/kvmx86/create
- - cloudapi/kvmx86/createBlank
- - cloudbroker/kvmppc/create
- - cloudbroker/kvmppc/createBlank
- - cloudbroker/kvmx86/create
- - cloudbroker/kvmx86/createBlank
- Added UpdatedBy field to task model in cloudbroker/task/get
- Made optional fields in requests:
- - Reason (cloudbroker/account/delete)
- - Reason (cloudbroker/account/restore)
- - Gateway (cloudbroker/extnet/create)
- - Reason (cloudbroker/image/delete)
- - Num (cloudapi/k8s/workerAdd)
- - NetID (cloudbroker/vins/extnetConnect)
- Updated cloudapi/rg/get model
- Deleted field Username from cloudbroker/account/update request
- Deleted field EmailAddress from cloudbroker/account/update request
- Added field DiskType to cloudbroker/compute/diskAttach request
- Added field Reason to cloudbroker/compute/diskQos request
- Added field Enabled to cloudbroker/compute/netAttach response model
- Added field CPUAllocationRatio to cloudbroker/image/listStacks response model
- Added field Descr to cloudbroker/image/listStacks response model
- Added field MemAllocationRatio to cloudbroker/image/listStacks response model
- Updated cloudapi/k8s/workersGroupByName response model
- Deleted field LBImageID from cloudbroker/k8ci/create request
- Deleted field ImageID from cloudbroker/lb/create request
- Deleted field Reason from cloudbroker/vins/extnetList request
- Added field CustomFields to cloudapi/kvmx86/create request
- Added field Driver to cloudapi/kvmx86/create request
- Added field Driver to cloudapi/kvmx86/createBlank request
## Version 1.5.3
### Bugfix
- Changed the Excluded field type in cloudbroker/extnet/get response model
- Add a fields SEPID and Pool in ListUnattachedRequest struct in cloudbroker/disks/listUnattached and cloudapi/disks/listUnattached
- Delete a field Shared in ListUnattachedRequest struct in cloudbroker/disks/listUnattached
- Delete tag Required at field Permanently in DiskDelRequest struct in cloudbroker/compute/disk_del and cloudapi/compute/disk_del
- Delete tag omitempty at field Permanently in DeleteRequest struct in cloudbroker/image/delete

View File

@@ -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(),

View File

@@ -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)

View File

@@ -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
}

View File

@@ -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",

View File

@@ -180,5 +180,10 @@ func registerAllValidators(validate *validator.Validate) error {
return err
}
err = validate.RegisterValidation("workerGroupName", workerGroupNameValidator)
if err != nil {
return err
}
return nil
}

View File

@@ -20,7 +20,7 @@ type DiskDelRequest struct {
// False if disk is to be deleted to recycle bin
// Required: true
Permanently bool `url:"permanently" json:"permanently" validate:"required"`
Permanently bool `url:"permanently" json:"permanently"`
}
// DiskDel delete disk and detach from compute

View File

@@ -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"`

View File

@@ -32,6 +32,14 @@ type ListUnattachedRequest struct {
// Required: false
AccountID uint64 `url:"accountId,omitempty" json:"accountId,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"`

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -20,7 +20,7 @@ type DiskDelRequest struct {
// False if disk is to be deleted to recycle bin
// Required: true
Permanently bool `url:"permanently" json:"permanently" validate:"required"`
Permanently bool `url:"permanently" json:"permanently"`
// Reason for action
// Required: false

View File

@@ -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"`

View File

@@ -24,10 +24,6 @@ type ListUnattachedRequest struct {
// Required: false
Status string `url:"status,omitempty" json:"status,omitempty"`
// Find by shared, true or false
// Required: false
Shared bool `url:"shared,omitempty" json:"shared,omitempty"`
// Type of the disks
// Required: false
Type string `url:"type,omitempty" json:"type,omitempty"`
@@ -36,6 +32,14 @@ type ListUnattachedRequest struct {
// Required: false
AccountID uint64 `url:"accountId,omitempty" json:"accountId,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"`

View File

@@ -20,7 +20,7 @@ type DeleteRequest struct {
// Whether to completely delete the image
// Required: false
Permanently bool `url:"permanently,omitempty" json:"permanently,omitempty"`
Permanently bool `url:"permanently" json:"permanently"`
}
// Delete deletes image by ID

View File

@@ -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