This commit is contained in:
asteam
2025-09-26 19:17:30 +03:00
parent 48e2b0f2f9
commit 1ccc37a104
1022 changed files with 6440 additions and 1688 deletions

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// AccessGrantRequest struct to grant access to SEP

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// AccessGrantToPoolRequest struct to grant access to pool SEP

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// AccessRevokeRequest struct to revoke access to SEP

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// AccessRevokeToPoolRequest struct to revoke access to pool SEP

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// AddConsumerNodesRequest struct to add consumer nodes

View File

@@ -4,7 +4,7 @@ import (
"context"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// AddPoolRequest struct to add pool to storage endpoint (SEP)

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// AddProviderNodesRequest struct to add provider nodes

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// ConfigFieldEditRequest struct to edit config fields

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// ConfigInsertRequest struct to insert config

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// ConfigValidateRequest struct to validate config

View File

@@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// ConsumptionRequest struct to get consumption info

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// CreateRequest struct to create SEP object

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// DecommissionRequest struct for decommission

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// DelConsumerNodesRequest struct to exclude consumer nodes
@@ -17,6 +17,11 @@ type DelConsumerNodesRequest struct {
// List of consumer node IDs
// Required: true
ConsumerNIDs []uint64 `url:"consumer_nids" json:"consumer_nids" validate:"min=1"`
// The force flag must be set to true only if the node will never come back online
// Default: false
// Required: true
Force bool `url:"force" json:"force" validate:"required"`
}
// DelConsumerNodes excludes consumer nodes from SEP parameters

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// DelPoolRequest struct to delete pool from storage endpoint (SEP)

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// DeleteRequest struct to delete SEP

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// DisableRequest struct to disable SEP

View File

@@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// DiskListRequest struct to get list of disk IDs

View File

@@ -5,7 +5,7 @@ import (
"net/http"
"strconv"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// EnableRequest struct to enable SEP

View File

@@ -69,3 +69,85 @@ func (lsep ListSEP) FindOne() RecordSEP {
return lsep.Data[0]
}
// FilterBySEPID returns ListAvailableSEP with the specified SEPID.
func (sl ListAvailableSEP) FilterBySEPID(sepID uint64) ListAvailableSEP {
predicate := func(sd SEPData) bool {
return sd.SEPID == sepID
}
return sl.FilterFunc(predicate)
}
// FilterBySEPName returns ListAvailableSEP with the specified SEPName.
func (sl ListAvailableSEP) FilterBySEPName(SEPName string) ListAvailableSEP {
predicate := func(sd SEPData) bool {
return sd.SEPName == SEPName
}
return sl.FilterFunc(predicate)
}
// FilterBySEPType returns ListAvailableSEP with the specified SEPType.
func (sl ListAvailableSEP) FilterBySEPType(SEPType string) ListAvailableSEP {
predicate := func(sd SEPData) bool {
return sd.SEPType == SEPType
}
return sl.FilterFunc(predicate)
}
// FilterByPoolType returns ListAvailableSEP where at least one pool has the specified type.
func (sl ListAvailableSEP) FilterByPoolType(poolType string) ListAvailableSEP {
predicate := func(sd SEPData) bool {
for _, pool := range sd.Pools {
for _, pt := range pool.Types {
if pt == poolType {
return true
}
}
}
return false
}
return sl.FilterFunc(predicate)
}
// FilterBySystemPool returns ListAvailableSEP where at least one pool is a system pool.
func (sl ListAvailableSEP) FilterBySystemPool(isSystem bool) ListAvailableSEP {
predicate := func(sd SEPData) bool {
for _, pool := range sd.Pools {
if pool.System == isSystem {
return true
}
}
return false
}
return sl.FilterFunc(predicate)
}
// FilterFunc allows filtering ListAvailableSEP based on a user-defined predicate.
func (sl ListAvailableSEP) FilterFunc(predicate func(SEPData) bool) ListAvailableSEP {
var result ListAvailableSEP
for _, item := range sl.Data {
if predicate(item) {
result.Data = append(result.Data, item)
}
}
result.EntryCount = uint64(len(result.Data))
return result
}
// FindOne returns the first found SEPData.
// If nothing is found, returns an empty struct.
func (sl ListAvailableSEP) FindOne() SEPData {
if len(sl.Data) == 0 {
return SEPData{}
}
return sl.Data[0]
}

View File

@@ -5,13 +5,7 @@ import "testing"
var seps = ListSEP{
Data: []RecordSEP{
{
CKey: "",
Meta: []interface{}{
"osismodel",
"cloudbroker",
"sep",
1,
},
Config: map[string]interface{}{
"API_IPs": []string{
"10.212.3.61",
@@ -39,13 +33,7 @@ var seps = ListSEP{
Type: "DES",
},
{
CKey: "",
Meta: []interface{}{
"osismodel",
"cloudbroker",
"sep",
1,
},
Config: map[string]interface{}{
"API_IPs": []string{
"10.212.3.64",
@@ -74,13 +62,7 @@ var seps = ListSEP{
Type: "DES",
},
{
CKey: "",
Meta: []interface{}{
"osismodel",
"cloudbroker",
"sep",
1,
},
Config: map[string]interface{}{
"API_IPs": []string{
"10.212.3.67",
@@ -185,3 +167,116 @@ func TestFilterFunc(t *testing.T) {
}
}
}
var availableSeps = ListAvailableSEP{
EntryCount: 3,
Data: []SEPData{
{
SEPID: 1,
SEPName: "sep_1",
SEPType: "TATLIN",
Pools: []Pool{
{
Name: "pool_1",
Types: []string{"DES"},
System: false,
},
},
},
{
SEPID: 2,
SEPName: "sep_2",
SEPType: "SHARED",
Pools: []Pool{
{
Name: "pool_2",
Types: []string{"DES"},
System: true,
},
},
},
{
SEPID: 3,
SEPName: "sep_3",
SEPType: "DES",
Pools: []Pool{
{
Name: "pool_3",
Types: []string{"DES"},
System: false,
},
},
},
},
}
func TestFilterBySEPID(t *testing.T) {
actual := availableSeps.FilterBySEPID(1).FindOne()
if actual.SEPID != 1 {
t.Fatal("expected SEPID 1, found: ", actual.SEPID)
}
}
func TestFilterBySEPName(t *testing.T) {
actual := availableSeps.FilterBySEPName("sep_2").FindOne()
if actual.SEPName != "sep_2" {
t.Fatal("expected SEPName 'sep_2', found: ", actual.SEPName)
}
}
func TestFilterBySEPType(t *testing.T) {
actual := availableSeps.FilterBySEPType("TATLIN").FindOne()
if actual.SEPType != "TATLIN" {
t.Fatal("expected SEPType 'TATLIN', found: ", actual.SEPType)
}
}
func TestFilterByPoolType(t *testing.T) {
actual := availableSeps.FilterByPoolType("DES")
if len(actual.Data) != 3 {
t.Fatal("expected 3 found, actual: ", len(actual.Data))
}
for _, item := range actual.Data {
found := false
for _, pool := range item.Pools {
for _, poolType := range pool.Types {
if poolType == "DES" {
found = true
break
}
}
if found {
break
}
}
if !found {
t.Fatal("expected Pool type 'DES', not found in SEP: ", item.SEPID)
}
}
}
func TestFilterBySystemPool(t *testing.T) {
actual := availableSeps.FilterBySystemPool(true)
if len(actual.Data) != 1 {
t.Fatal("expected 1 found, actual: ", len(actual.Data))
}
for _, item := range actual.Data {
found := false
for _, pool := range item.Pools {
if pool.System {
found = true
break
}
}
if !found {
t.Fatal("expected System pool, not found in SEP: ", item.SEPID)
}
}
}

View File

@@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// GetRequest struct to get SEP parameters

View File

@@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// GetConfigRequest struct to get SEP config

View File

@@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// GetPoolRequest struct to get SEP pool config by name

View File

@@ -0,0 +1,36 @@
package sep
import (
"context"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// GetTemplateRequest struct to get template of SEP
type GetTemplateRequest struct {
// Type of SEP
// Required: true
SepType string `url:"sep_type" json:"sep_type" validate:"required,sepType"`
// Language of template
// Required: true
Language string `url:"lang" json:"lang" validate:"required,language"`
}
// GetTemplate gets data to sep template
func (s SEP) GetTemplate(ctx context.Context, req GetTemplateRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/sep/getTemplate"
res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return "", err
}
return string(res), nil
}

View File

@@ -5,7 +5,7 @@ import (
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// ListRequest struct to get list of SEPs

View File

@@ -0,0 +1,51 @@
package sep
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// ListAvailableSEPAndPoolsRequest struct to get dict with entry count and list of dict with SEPs and pools details accessible by the Account and RG
type ListAvailableSEPAndPoolsRequest struct {
// Account ID
// Required: true
AccountID uint64 `url:"account_id" json:"account_id" validate:"required"`
// RG ID
// Required: false
RGID uint64 `url:"rg_id,omitempty" json:"rg_id,omitempty"`
}
// ListAvailableSEPAndPools get dict with entry count and list of dict with SEPs and pools details accessible by the Account and RG
func (s SEP) ListAvailableSEPAndPools(ctx context.Context, req ListAvailableSEPAndPoolsRequest) (*ListAvailableSEP, error) {
res, err := s.ListAvailableSEPAndPoolsRaw(ctx, req)
if err != nil {
return nil, err
}
list := ListAvailableSEP{}
err = json.Unmarshal(res, &list)
if err != nil {
return nil, err
}
return &list, nil
}
// ListRaw gets list as an array of bytes
func (s SEP) ListAvailableSEPAndPoolsRaw(ctx context.Context, req ListAvailableSEPAndPoolsRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/sep/listAvailableSepAndPools"
res, err := s.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -152,3 +152,36 @@ type ListSEP struct {
// Entry count
EntryCount uint64 `json:"entryCount"`
}
type Pool struct {
// Pool name
Name string `json:"name"`
// Pool types
Types []string `json:"types"`
// System
System bool `json:"system"`
}
type SEPData struct {
// SEP ID
SEPID uint64 `json:"sepId"`
// SEP name
SEPName string `json:"sepName"`
// Sep type
SEPType string `json:"sepType"`
// Pools
Pools []Pool `json:"pools"`
}
type ListAvailableSEP struct {
// Entry count
EntryCount uint64 `json:"entryCount"`
// Data
Data []SEPData `json:"data"`
}

View File

@@ -2,7 +2,7 @@
package sep
import (
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/interfaces"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/interfaces"
)
// Structure for creating request to storage endpoint provider

View File

@@ -3,7 +3,7 @@ package sep
import (
"encoding/json"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/serialization"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/serialization"
)
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
@@ -41,3 +41,39 @@ func (rsep RecordSEP) Serialize(params ...string) (serialization.Serialized, err
return json.Marshal(rsep)
}
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
//
// In order to serialize with indent make sure to follow these guidelines:
// - First argument -> prefix
// - Second argument -> indent
func (lsep ListAvailableSEP) Serialize(params ...string) (serialization.Serialized, error) {
if len(lsep.Data) == 0 {
return []byte{}, nil
}
if len(params) > 1 {
prefix := params[0]
indent := params[1]
return json.MarshalIndent(lsep, prefix, indent)
}
return json.Marshal(lsep)
}
// Serialize returns JSON-serialized []byte. Used as a wrapper over json.Marshal and json.MarshalIndent functions.
//
// In order to serialize with indent make sure to follow these guidelines:
// - First argument -> prefix
// - Second argument -> indent
func (rsep SEPData) Serialize(params ...string) (serialization.Serialized, error) {
if len(params) > 1 {
prefix := params[0]
indent := params[1]
return json.MarshalIndent(rsep, prefix, indent)
}
return json.Marshal(rsep)
}

View File

@@ -6,7 +6,7 @@ import (
"strconv"
"strings"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// SharedLockStartRequest struct to start shared locks

View File

@@ -6,7 +6,7 @@ import (
"strconv"
"strings"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v10/internal/validators"
"repository.basistech.ru/BASIS/dynamix-golang-sdk/v11/internal/validators"
)
// SharedLockStopRequest struct to stop shared locks