v1.5.0-gamma2

This commit is contained in:
2023-07-07 12:40:03 +03:00
parent 20fd7ab50c
commit 7c787f6fce
111 changed files with 2905 additions and 1505 deletions

View File

@@ -34,11 +34,6 @@ type CreateRequest struct {
// Required: true
MasterDriver string `url:"masterDriver" json:"masterDriver" validate:"driver"`
// Network plugins
// Values of slice must be flannel, weawenet or calico
//Required: true
NetworkPlugins []string `url:"networkPlugins" json:"networkPlugins" validate:"required,networkPlugins"`
// Image ID for worker K8S node
// Required: true
WorkerImageID uint64 `url:"workerImageId" json:"workerImageId" validate:"required"`
@@ -51,10 +46,6 @@ type CreateRequest struct {
// Required: true
WorkerDriver string `url:"workerDriver" json:"workerDriver" validate:"driver"`
// Image ID for load balancer node
// Required: true
LBImageID uint64 `url:"lbImageId" json:"lbImageId" validate:"required"`
// List of account IDs, which have access to this item.
// If empty, any account has access
// Required: false
@@ -62,11 +53,16 @@ type CreateRequest struct {
// Policy limit on maximum number of master nodes
// Required: true
MaxMasterCount uint64 `url:"maxMasterCount" json:"maxMasterCount"`
MaxMasterCount uint64 `url:"maxMasterCount" json:"maxMasterCount" validate:"required"`
// Policy limit on maximum number of worker nodes
// Required: true
MaxWorkerCount uint64 `url:"maxWorkerCount" json:"maxWorkerCount"`
MaxWorkerCount uint64 `url:"maxWorkerCount" json:"maxWorkerCount" validate:"required"`
// Network plugins
// Values of slice must be flannel, weawenet or calico
//Required: true
NetworkPlugins []string `url:"networkPlugins" json:"networkPlugins" validate:"required,networkPlugins"`
}
// Create creates a new K8CI instance

View File

@@ -58,21 +58,23 @@ func (lkc ListK8CI) FilterByMasterImageID(masterImageID uint64) ListK8CI {
func (lkc ListK8CI) FilterFunc(predicate func(ItemK8CI) bool) ListK8CI {
var result ListK8CI
for _, item := range lkc {
for _, item := range lkc.Data {
if predicate(item) {
result = append(result, item)
result.Data = append(result.Data, item)
}
}
result.EntryCount = uint64(len(result.Data))
return result
}
// FindOne returns first found ItemK8CI
// If none was found, returns an empty struct.
func (lkc ListK8CI) FindOne() ItemK8CI {
if len(lkc) == 0 {
if len(lkc.Data) == 0 {
return ItemK8CI{}
}
return lkc[0]
return lkc.Data[0]
}

View File

@@ -3,66 +3,69 @@ package k8ci
import "testing"
var k8ciItems = ListK8CI{
ItemK8CI{
CreatedTime: 123902139,
RecordK8CI: RecordK8CI{
Description: "",
GID: 0,
GUID: 1,
ID: 1,
LBImageID: 5,
MasterDriver: "KVM_X86",
MasterImageID: 120,
MaxMasterCount: 2,
MaxWorkerCount: 3,
Name: "purple_snake",
SharedWith: []interface{}{},
Status: "ENABLED",
Version: "1",
WorkerDriver: "KVM_X86",
WorkerImageID: 120,
},
},
ItemK8CI{
CreatedTime: 123902232,
RecordK8CI: RecordK8CI{
Description: "",
GID: 0,
GUID: 2,
ID: 2,
LBImageID: 10,
MasterDriver: "KVM_X86",
MasterImageID: 121,
MaxMasterCount: 3,
MaxWorkerCount: 5,
Name: "green_giant",
SharedWith: []interface{}{},
Status: "DISABLED",
Version: "2",
WorkerDriver: "KVM_X86",
WorkerImageID: 121,
},
},
ItemK8CI{
CreatedTime: 123902335,
RecordK8CI: RecordK8CI{
Description: "",
GID: 0,
GUID: 3,
ID: 3,
LBImageID: 12,
MasterDriver: "KVM_X86",
MasterImageID: 98,
MaxMasterCount: 5,
MaxWorkerCount: 9,
Name: "magenta_cloud",
SharedWith: []interface{}{},
Status: "ENABLED",
Version: "3",
WorkerDriver: "KVM_X86",
WorkerImageID: 98,
Data: []ItemK8CI{
{
CreatedTime: 123902139,
RecordK8CI: RecordK8CI{
Description: "",
GID: 0,
GUID: 1,
ID: 1,
LBImageID: 5,
MasterDriver: "KVM_X86",
MasterImageID: 120,
MaxMasterCount: 2,
MaxWorkerCount: 3,
Name: "purple_snake",
SharedWith: []interface{}{},
Status: "ENABLED",
Version: "1",
WorkerDriver: "KVM_X86",
WorkerImageID: 120,
},
},
{
CreatedTime: 123902232,
RecordK8CI: RecordK8CI{
Description: "",
GID: 0,
GUID: 2,
ID: 2,
LBImageID: 10,
MasterDriver: "KVM_X86",
MasterImageID: 121,
MaxMasterCount: 3,
MaxWorkerCount: 5,
Name: "green_giant",
SharedWith: []interface{}{},
Status: "DISABLED",
Version: "2",
WorkerDriver: "KVM_X86",
WorkerImageID: 121,
},
},
{
CreatedTime: 123902335,
RecordK8CI: RecordK8CI{
Description: "",
GID: 0,
GUID: 3,
ID: 3,
LBImageID: 12,
MasterDriver: "KVM_X86",
MasterImageID: 98,
MaxMasterCount: 5,
MaxWorkerCount: 9,
Name: "magenta_cloud",
SharedWith: []interface{}{},
Status: "ENABLED",
Version: "3",
WorkerDriver: "KVM_X86",
WorkerImageID: 98,
},
},
},
EntryCount: 3,
}
func TestFilterByID(t *testing.T) {
@@ -84,11 +87,11 @@ func TestFilterByName(t *testing.T) {
func TestFilterByStatus(t *testing.T) {
actual := k8ciItems.FilterByStatus("ENABLED")
if len(actual) != 2 {
t.Fatal("expected 2 found, actual: ", len(actual))
if len(actual.Data) != 2 {
t.Fatal("expected 2 found, actual: ", len(actual.Data))
}
for _, item := range actual {
for _, item := range actual.Data {
if item.Status != "ENABLED" {
t.Fatal("expected Status 'ENABLED', found: ", item.Status)
}
@@ -124,11 +127,11 @@ func TestFilterFunc(t *testing.T) {
return ikc.CreatedTime > 123902139
})
if len(actual) != 2 {
t.Fatal("expected 2 found, actual: ", len(actual))
if len(actual.Data) != 2 {
t.Fatal("expected 2 found, actual: ", len(actual.Data))
}
for _, item := range actual {
for _, item := range actual.Data {
if item.CreatedTime < 123902139 {
t.Fatal("expected CreatedTime greater than 123902139, found: ", item.CreatedTime)
}
@@ -138,7 +141,7 @@ func TestFilterFunc(t *testing.T) {
func TestSortingByCreatedTime(t *testing.T) {
actual := k8ciItems.SortByCreatedTime(true)
if actual[0].CreatedTime != 123902335 && actual[2].CreatedTime != 123902139 {
if actual.Data[0].CreatedTime != 123902335 && actual.Data[2].CreatedTime != 123902139 {
t.Fatal("expected inverse sort, found normal")
}
}

View File

@@ -8,6 +8,30 @@ import (
// Request struct for get list information about images
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 status
// Required: false
Status string `url:"status,omitempty" json:"status,omitempty"`
// Find by worker driver
// Required: false
WorkerDriver string `url:"workerDriver,omitempty" json:"workerDriver,omitempty"`
// Find by master driver
// Required: false
MasterDriver string `url:"masterDriver,omitempty" json:"masterDriver,omitempty"`
// Find by network plugin
// Required: false
NetworkPlugins string `url:"netPlugins,omitempty" json:"masterDrnetPluginsiver,omitempty"`
// List disabled items as well
// Required: false
IncludeDisabled bool `url:"includeDisabled,omitempty" json:"includeDisabled,omitempty"`
@@ -22,7 +46,7 @@ type ListRequest struct {
}
// List gets list all k8ci catalog items available to the current user
func (k K8CI) List(ctx context.Context, req ListRequest) (ListK8CI, error) {
func (k K8CI) List(ctx context.Context, req ListRequest) (*ListK8CI, error) {
url := "/cloudbroker/k8ci/list"
res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, req)
@@ -37,5 +61,5 @@ func (k K8CI) List(ctx context.Context, req ListRequest) (ListK8CI, error) {
return nil, err
}
return list, nil
return &list, nil
}

View File

@@ -8,6 +8,26 @@ import (
// Request struct for get list information about deleted images
type ListDeletedRequest 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 worker driver
// Required: false
WorkerDriver string `url:"workerDriver,omitempty" json:"workerDriver,omitempty"`
// Find by master driver
// Required: false
MasterDriver string `url:"masterDriver,omitempty" json:"masterDriver,omitempty"`
// Find by network plugin
// Required: false
NetworkPlugins string `url:"netPlugins,omitempty" json:"masterDrnetPluginsiver,omitempty"`
// Page number
// Required: false
Page uint64 `url:"page,omitempty" json:"page,omitempty"`
@@ -18,7 +38,7 @@ type ListDeletedRequest struct {
}
// ListDeleted gets list all deleted k8ci catalog items available to the current user
func (k K8CI) ListDeleted(ctx context.Context, req ListDeletedRequest) (ListK8CI, error) {
func (k K8CI) ListDeleted(ctx context.Context, req ListDeletedRequest) (*ListK8CI, error) {
url := "/cloudbroker/k8ci/listDeleted"
res, err := k.client.DecortApiCall(ctx, http.MethodPost, url, req)
@@ -33,5 +53,5 @@ func (k K8CI) ListDeleted(ctx context.Context, req ListDeletedRequest) (ListK8CI
return nil, err
}
return list, nil
return &list, nil
}

View File

@@ -9,7 +9,13 @@ type ItemK8CI struct {
}
// List K8CI
type ListK8CI []ItemK8CI
type ListK8CI struct {
//Data
Data []ItemK8CI `json:"data"`
// Entry count
EntryCount uint64 `json:"entryCount"`
}
// Detailed information about K8CI
type RecordK8CI struct {

View File

@@ -12,7 +12,7 @@ import (
// - First argument -> prefix
// - Second argument -> indent
func (lkc ListK8CI) Serialize(params ...string) (serialization.Serialized, error) {
if len(lkc) == 0 {
if len(lkc.Data) == 0 {
return []byte{}, nil
}

View File

@@ -6,16 +6,16 @@ import "sort"
//
// If inverse param is set to true, the order is reversed.
func (lkc ListK8CI) SortByCreatedTime(inverse bool) ListK8CI {
if len(lkc) < 2 {
if len(lkc.Data) < 2 {
return lkc
}
sort.Slice(lkc, func(i, j int) bool {
sort.Slice(lkc.Data, func(i, j int) bool {
if inverse {
return lkc[i].CreatedTime > lkc[j].CreatedTime
return lkc.Data[i].CreatedTime > lkc.Data[j].CreatedTime
}
return lkc[i].CreatedTime < lkc[j].CreatedTime
return lkc.Data[i].CreatedTime < lkc.Data[j].CreatedTime
})
return lkc