From a3711057baf601cd3db676236ee863d26162b063 Mon Sep 17 00:00:00 2001 From: Nikita Sorokin Date: Tue, 22 Aug 2023 15:28:39 +0300 Subject: [PATCH] v1.5.4 --- CHANGELOG.md | 13 +- pkg/cloudbroker/flipgoup.go | 10 ++ pkg/cloudbroker/flipgroup/compute_add.go | 44 +++++ pkg/cloudbroker/flipgroup/compute_remove.go | 44 +++++ pkg/cloudbroker/flipgroup/create.go | 71 ++++++++ pkg/cloudbroker/flipgroup/delete.go | 40 +++++ pkg/cloudbroker/flipgroup/edit.go | 48 ++++++ pkg/cloudbroker/flipgroup/flipgroup.go | 18 +++ pkg/cloudbroker/flipgroup/get.go | 42 +++++ pkg/cloudbroker/flipgroup/list.go | 65 ++++++++ pkg/cloudbroker/flipgroup/models.go | 169 ++++++++++++++++++++ pkg/cloudbroker/flipgroup/serialize.go | 43 +++++ pkg/cloudbroker/image/models.go | 16 +- pkg/cloudbroker/stack.go | 10 ++ pkg/cloudbroker/stack/get.go | 42 +++++ pkg/cloudbroker/stack/list.go | 53 ++++++ pkg/cloudbroker/stack/models.go | 164 +++++++++++++++++++ pkg/cloudbroker/stack/stack.go | 16 ++ 18 files changed, 900 insertions(+), 8 deletions(-) create mode 100644 pkg/cloudbroker/flipgoup.go create mode 100644 pkg/cloudbroker/flipgroup/compute_add.go create mode 100644 pkg/cloudbroker/flipgroup/compute_remove.go create mode 100644 pkg/cloudbroker/flipgroup/create.go create mode 100644 pkg/cloudbroker/flipgroup/delete.go create mode 100644 pkg/cloudbroker/flipgroup/edit.go create mode 100644 pkg/cloudbroker/flipgroup/flipgroup.go create mode 100644 pkg/cloudbroker/flipgroup/get.go create mode 100644 pkg/cloudbroker/flipgroup/list.go create mode 100644 pkg/cloudbroker/flipgroup/models.go create mode 100644 pkg/cloudbroker/flipgroup/serialize.go create mode 100644 pkg/cloudbroker/stack.go create mode 100644 pkg/cloudbroker/stack/get.go create mode 100644 pkg/cloudbroker/stack/list.go create mode 100644 pkg/cloudbroker/stack/models.go create mode 100644 pkg/cloudbroker/stack/stack.go diff --git a/CHANGELOG.md b/CHANGELOG.md index 9c5c88a..0405059 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,9 @@ -## Version 1.5.3 +## Version 1.5.4 -### Bugfix -- 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 +### Feature +- Added cloudbroker/stack group of endpoints support. Added the possibility to get information about stacks (list handler) and about a specific stack by ID (get handler) +- Added cloudbroker/flipgroup group of endpoints support. Added the possibility to get information about flipgroup (list handler) and about a specific flipgroup by ID (get handler), add and remote compute, create, edit and delete flipgroup. -- 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 \ No newline at end of file +### Bugfix +- Fixed the field image/models/history.guid, added a custom unmarshall. Fixed an error with get information about images (handlers - list, get) in cloudbroker \ No newline at end of file diff --git a/pkg/cloudbroker/flipgoup.go b/pkg/cloudbroker/flipgoup.go new file mode 100644 index 0000000..8047fef --- /dev/null +++ b/pkg/cloudbroker/flipgoup.go @@ -0,0 +1,10 @@ +package cloudbroker + +import ( + "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/flipgroup" +) + +// Accessing the FLIPGroup method group +func (cb *CloudBroker) FLIPGroup() *flipgroup.FLIPGroup { + return flipgroup.New(cb.client) +} diff --git a/pkg/cloudbroker/flipgroup/compute_add.go b/pkg/cloudbroker/flipgroup/compute_add.go new file mode 100644 index 0000000..fac50d3 --- /dev/null +++ b/pkg/cloudbroker/flipgroup/compute_add.go @@ -0,0 +1,44 @@ +package flipgroup + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// Request struct for add compute instance +type ComputeAddRequest struct { + // ID of the Floating IP group to add compute instance to + // Required: true + FLIPGroupID uint64 `url:"flipgroupId" json:"flipgroupId" validate:"required"` + + // ID of the compute instance to add to this group + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` +} + +// ComputeAdd add compute instance to the Floating IP group +func (f FLIPGroup) ComputeAdd(ctx context.Context, req ComputeAddRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + for _, validationError := range validators.GetErrors(err) { + return false, validators.ValidationError(validationError) + } + } + + url := "/cloudbroker/flipgroup/computeAdd" + + res, err := f.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/flipgroup/compute_remove.go b/pkg/cloudbroker/flipgroup/compute_remove.go new file mode 100644 index 0000000..3c90c35 --- /dev/null +++ b/pkg/cloudbroker/flipgroup/compute_remove.go @@ -0,0 +1,44 @@ +package flipgroup + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// Request struct for remove compute instance +type ComputeRemoveRequest struct { + // ID of the Floating IP group to remove compute instance from + // Required: true + FLIPGroupID uint64 `url:"flipgroupId" json:"flipgroupId" validate:"required"` + + // ID of the compute instance to remove + // Required: true + ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"` +} + +// ComputeRemove remove compute instance from the Floating IP group +func (f FLIPGroup) ComputeRemove(ctx context.Context, req ComputeRemoveRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + for _, validationError := range validators.GetErrors(err) { + return false, validators.ValidationError(validationError) + } + } + + url := "/cloudbroker/flipgroup/computeRemove" + + res, err := f.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/flipgroup/create.go b/pkg/cloudbroker/flipgroup/create.go new file mode 100644 index 0000000..5165a99 --- /dev/null +++ b/pkg/cloudbroker/flipgroup/create.go @@ -0,0 +1,71 @@ +package flipgroup + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// Request struct for create FLIPGroup +type CreateRequest struct { + // Account ID + // Required: true + AccountID uint64 `url:"accountId" json:"accountId" validate:"required"` + + // FLIPGroup name + // Required: true + Name string `url:"name" json:"name" validate:"required"` + + // Network type + // Should be one of: + // - EXTNET + // - VINS + // Required: true + NetType string `url:"netType" json:"netType" validate:"computeNetType"` + + // ID of external network or VINS + // Required: true + NetID uint64 `url:"netId" json:"netId" validate:"required"` + + // Type of client + // - 'compute' + // - 'vins' (will be later) + // Required: true + ClientType string `url:"clientType" json:"clientType" validate:"flipgroupClientType"` + + // IP address to associate with this group. If empty, the platform will autoselect IP address + // Required: false + IP string `url:"ip,omitempty" json:"ip,omitempty"` + + // Text description of this FLIPGorup instance + // Required: false + Description string `url:"desc,omitempty" json:"desc,omitempty"` +} + +// Create method will create a new FLIPGorup in the specified Account +func (f FLIPGroup) Create(ctx context.Context, req CreateRequest) (*RecordFLIPGroupCreated, error) { + err := validators.ValidateRequest(req) + if err != nil { + for _, validationError := range validators.GetErrors(err) { + return nil, validators.ValidationError(validationError) + } + } + + url := "/cloudbroker/flipgroup/create" + + res, err := f.client.DecortApiCall(ctx, http.MethodPost, url, req) + if err != nil { + return nil, err + } + + info := RecordFLIPGroupCreated{} + + err = json.Unmarshal(res, &info) + if err != nil { + return nil, err + } + + return &info, nil +} diff --git a/pkg/cloudbroker/flipgroup/delete.go b/pkg/cloudbroker/flipgroup/delete.go new file mode 100644 index 0000000..64b2f94 --- /dev/null +++ b/pkg/cloudbroker/flipgroup/delete.go @@ -0,0 +1,40 @@ +package flipgroup + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// Request struct for delete FLIPGroup +type DeleteRequest struct { + // FLIPGroup ID + // Required: true + FLIPGroupID uint64 `url:"flipgroupId" json:"flipgroupId" validate:"required"` +} + +// Delete method wil delete Floating IP group +func (f FLIPGroup) Delete(ctx context.Context, req DeleteRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + for _, validationError := range validators.GetErrors(err) { + return false, validators.ValidationError(validationError) + } + } + + url := "/cloudbroker/flipgroup/delete" + + res, err := f.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/flipgroup/edit.go b/pkg/cloudbroker/flipgroup/edit.go new file mode 100644 index 0000000..febf21c --- /dev/null +++ b/pkg/cloudbroker/flipgroup/edit.go @@ -0,0 +1,48 @@ +package flipgroup + +import ( + "context" + "net/http" + "strconv" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// Request struct for edit FLIPGroup +type EditRequest struct { + // FLIPGroup ID + // Required: true + FLIPGroupID uint64 `url:"flipgroupId" json:"flipgroupId" validate:"required"` + + // FLIPGroup name + // Required: false + Name string `url:"name,omitempty" json:"name,omitempty"` + + // FLIPGroup description + // Required: false + Description string `url:"desc,omitempty" json:"desc,omitempty"` +} + +// Edit edits FLIPGroup fields +func (f FLIPGroup) Edit(ctx context.Context, req EditRequest) (bool, error) { + err := validators.ValidateRequest(req) + if err != nil { + for _, validationError := range validators.GetErrors(err) { + return false, validators.ValidationError(validationError) + } + } + + url := "/cloudbroker/flipgroup/edit" + + res, err := f.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/flipgroup/flipgroup.go b/pkg/cloudbroker/flipgroup/flipgroup.go new file mode 100644 index 0000000..4fa8c0f --- /dev/null +++ b/pkg/cloudbroker/flipgroup/flipgroup.go @@ -0,0 +1,18 @@ +// API to manage FLIPGroup instances +package flipgroup + +import ( + "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces" +) + +// Structure for creating request to FLIPGroup +type FLIPGroup struct { + client interfaces.Caller +} + +// Builder for FLIPGroup endpoints +func New(client interfaces.Caller) *FLIPGroup { + return &FLIPGroup{ + client: client, + } +} diff --git a/pkg/cloudbroker/flipgroup/get.go b/pkg/cloudbroker/flipgroup/get.go new file mode 100644 index 0000000..78c9a3b --- /dev/null +++ b/pkg/cloudbroker/flipgroup/get.go @@ -0,0 +1,42 @@ +package flipgroup + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// Request struct for get information about FLIPGroup +type GetRequest struct { + // FLIPGroup ID + // Required: true + FLIPGroupID uint64 `url:"flipgroupId" json:"flipgroupId" validate:"required"` +} + +// Get gets details of the specified Floating IP group +func (f FLIPGroup) Get(ctx context.Context, req GetRequest) (*RecordFLIPGroup, error) { + err := validators.ValidateRequest(req) + if err != nil { + for _, validationError := range validators.GetErrors(err) { + return nil, validators.ValidationError(validationError) + } + } + + url := "/cloudbroker/flipgroup/get" + + res, err := f.client.DecortApiCall(ctx, http.MethodPost, url, req) + if err != nil { + return nil, err + } + + info := RecordFLIPGroup{} + + err = json.Unmarshal(res, &info) + if err != nil { + return nil, err + } + + return &info, nil +} diff --git a/pkg/cloudbroker/flipgroup/list.go b/pkg/cloudbroker/flipgroup/list.go new file mode 100644 index 0000000..57ca2b9 --- /dev/null +++ b/pkg/cloudbroker/flipgroup/list.go @@ -0,0 +1,65 @@ +package flipgroup + +import ( + "context" + "encoding/json" + "net/http" +) + +// Request struct for get list FLIPGroup available to the current user +type ListRequest struct { + // Find by name + // Required: false + Name string `url:"name,omitempty" json:"name,omitempty"` + + // Find by vinsId + // Required: false + VINSID uint64 `url:"vinsId,omitempty" json:"vinsId,omitempty"` + + // Find by VINS name + // Required: false + VINSName string `url:"vinsName,omitempty" json:"vinsName,omitempty"` + + // Find by extnetId + // Required: false + ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"` + + // Find by IP + // Reuqired: false + ByIP string `url:"byIp,omitempty" json:"byIp,omitempty"` + + // Find by resource group ID + // Reuqired: false + RGID uint64 `url:"rgId,omitempty" json:"rgId,omitempty"` + + // Find by id + // Required: false + ByID uint64 `url:"by_id,omitempty" json:"by_id,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"` +} + +// List gets list FLIPGroup managed cluster instances available to the current user +func (f FLIPGroup) List(ctx context.Context, req ListRequest) (*ListFLIPGroups, error) { + url := "/cloudbroker/flipgroup/list" + + res, err := f.client.DecortApiCall(ctx, http.MethodPost, url, req) + if err != nil { + return nil, err + } + + list := ListFLIPGroups{} + + err = json.Unmarshal(res, &list) + if err != nil { + return nil, err + } + + return &list, nil +} diff --git a/pkg/cloudbroker/flipgroup/models.go b/pkg/cloudbroker/flipgroup/models.go new file mode 100644 index 0000000..904536c --- /dev/null +++ b/pkg/cloudbroker/flipgroup/models.go @@ -0,0 +1,169 @@ +package flipgroup + +// Main information about FLIPGroup +type RecordFLIPGroupCreated struct { + // Default GW + DefaultGW string `json:"defaultGW"` + + // ID + ID uint64 `json:"id"` + + // IP + IP string `json:"ip"` + + // Name + Name string `json:"name"` + + // Network mask + NetMask uint64 `json:"netmask"` +} + +type RecordFLIPGroup struct { + // Account ID + AccountID uint64 `json:"accountId"` + + // Account name + AccountName string `json:"accountName"` + + // List of client IDs + ClientIDs []uint64 `json:"clientIds"` + + // Client names + ClientNames []string `json:"clientNames"` + + // Client type + ClientType string `json:"clientType"` + + // Connection ID + ConnID uint64 `json:"connId"` + + // Connection type + ConnType string `json:"connType"` + + // Created by + CreatedBy string `json:"createdBy"` + + // Created time + CreatedTime uint64 `json:"createdTime"` + + // Default GW + DefaultGW string `json:"defaultGW"` + + // Deleted by + DeletedBy string `json:"deletedBy"` + + // Deleted time + DeletedTime uint64 `json:"deletedTime"` + + // Description + Description string `json:"desc"` + + // Grid ID + GID uint64 `json:"gid"` + + // GUID + GUID uint64 `json:"guid"` + + // ID + ID uint64 `json:"id"` + + // IP + IP string `json:"ip"` + + // Milestones + Milestones uint64 `json:"milestones"` + + // Name + Name string `json:"name"` + + // Network ID + NetID uint64 `json:"netId"` + + // Network type + NetType string `json:"netType"` + + // Network + Network string `json:"network"` + + // Resource group ID + RGID uint64 `json:"rgId"` + + // Resource group name + RGName string `json:"rgName"` + + // Status + Status string `json:"status"` + + // Updated by + UpdatedBy string `json:"updatedBy"` + + // Updated time + UpdatedTime uint64 `json:"updatedTime"` +} + +// Detailed information about FLIPGroup +type ItemFLIPGroup struct { + // CKey + CKey string `json:"_ckey"` + + // Meta + Meta []interface{} `json:"_meta"` + + // Account ID + AccountID uint64 `json:"accountId"` + + // List of client IDs + ClientIDs []uint64 `json:"clientIds"` + + // Client type + ClientType string `json:"clientType"` + + // Connection ID + ConnID uint64 `json:"connId"` + + // Connection type + ConnType string `json:"connType"` + + // Default GW + DefaultGW string `json:"defaultGW"` + + // Description + Description string `json:"desc"` + + // Grid ID + GID uint64 `json:"gid"` + + // GUID + GUID uint64 `json:"guid"` + + // ID + ID uint64 `json:"id"` + + // IP + IP string `json:"ip"` + + // Milestones + Milestones uint64 `json:"milestones"` + + // Name + Name string `json:"name"` + + // Network ID + NetID uint64 `json:"netId"` + + // Network type + NetType string `json:"netType"` + + // NetMask + NetMask uint64 `json:"netmask"` + + // Status + Status string `json:"status"` +} + +// List of FLIPGroup +type ListFLIPGroups struct { + Data []ItemFLIPGroup `json:"data"` + + EntryCount uint64 `json:"entryCount"` +} diff --git a/pkg/cloudbroker/flipgroup/serialize.go b/pkg/cloudbroker/flipgroup/serialize.go new file mode 100644 index 0000000..4eaa6e1 --- /dev/null +++ b/pkg/cloudbroker/flipgroup/serialize.go @@ -0,0 +1,43 @@ +package flipgroup + +import ( + "encoding/json" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/serialization" +) + +// 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 (lfg ListFLIPGroups) Serialize(params ...string) (serialization.Serialized, error) { + if len(lfg.Data) == 0 { + return []byte{}, nil + } + + if len(params) > 1 { + prefix := params[0] + indent := params[1] + + return json.MarshalIndent(lfg, prefix, indent) + } + + return json.Marshal(lfg) +} + +// 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 (ifg ItemFLIPGroup) Serialize(params ...string) (serialization.Serialized, error) { + if len(params) > 1 { + prefix := params[0] + indent := params[1] + + return json.MarshalIndent(ifg, prefix, indent) + } + + return json.Marshal(ifg) +} diff --git a/pkg/cloudbroker/image/models.go b/pkg/cloudbroker/image/models.go index 87a28db..3a4e955 100644 --- a/pkg/cloudbroker/image/models.go +++ b/pkg/cloudbroker/image/models.go @@ -162,7 +162,7 @@ type ListACL []ACL // History information type History struct { // GUID - GUID uint64 `json:"guid"` + GUID GUID `json:"guid"` // ID ID uint64 `json:"id"` @@ -171,6 +171,20 @@ type History struct { Timestamp uint64 `json:"timestamp"` } +type GUID string + +func (r *GUID) UnmarshalJSON(b []byte) error { + + if b[0] == '"' { + *r = GUID(string(b[1:len(b)-1])) + return nil + } + + *r = GUID(string(b)) + + return nil +} + // List history type ListHistory []History diff --git a/pkg/cloudbroker/stack.go b/pkg/cloudbroker/stack.go new file mode 100644 index 0000000..ef18143 --- /dev/null +++ b/pkg/cloudbroker/stack.go @@ -0,0 +1,10 @@ +package cloudbroker + +import ( + "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/stack" +) + +// Accessing the Stack method group +func (cb *CloudBroker) Stack() *stack.Stack { + return stack.New(cb.client) +} diff --git a/pkg/cloudbroker/stack/get.go b/pkg/cloudbroker/stack/get.go new file mode 100644 index 0000000..55f2e61 --- /dev/null +++ b/pkg/cloudbroker/stack/get.go @@ -0,0 +1,42 @@ +package stack + +import ( + "context" + "encoding/json" + "net/http" + + "repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators" +) + +// Request struct for get list 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 := "/cloudbroker/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/cloudbroker/stack/list.go b/pkg/cloudbroker/stack/list.go new file mode 100644 index 0000000..cd16d1f --- /dev/null +++ b/pkg/cloudbroker/stack/list.go @@ -0,0 +1,53 @@ +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 := "/cloudbroker/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/cloudbroker/stack/models.go b/pkg/cloudbroker/stack/models.go new file mode 100644 index 0000000..39ecf12 --- /dev/null +++ b/pkg/cloudbroker/stack/models.go @@ -0,0 +1,164 @@ +package stack + +// Main information about stack +type InfoStack struct { + // CKey + Ckey string `json:"_ckey"` + + // Meta + Meta []interface{} `json:"_meta"` + + //API URL + APIURL string `json:"apiUrl"` + + //API key + Apikey string `json:"apikey"` + + // App ID + AppID string `json:"appId"` + + // CPU allocation ratio + CPUAllocationRatio float64 `json:"cpu_allocation_ratio"` + + // Description + Description string `json:"desc"` + + // Descr + Descr string `json:"descr"` + + // Drivers + Drivers []string `json:"drivers"` + + // Eco + Eco interface{} `json:"eco"` + + // Error + Error uint64 `json:"error"` + + // Grid ID + GID uint64 `json:"gid"` + + // GID + GUID uint64 `json:"guid"` + + // ID + ID uint64 `json:"id"` + // List image IDs + Images []uint64 `json:"images"` + + // Login + Login string `json:"login"` + + // Mem allocation ratio + MemAllocationRatio float64 `json:"mem_allocation_ratio"` + + // Name + Name string `json:"name"` + + // Packegas + Packages Packages `json:"packages"` + + //Password + Password string `json:"passwd"` + + // Reference ID + ReferenceID string `json:"referenceId"` + + // Status + Status string `json:"status"` + + // Type + Type string `json:"type"` +} + +// List of stacks +type ListStacks struct { + + //List + Data []InfoStack `json:"data"` + + //Entry count + EntryCount uint64 `json:"entryCount"` +} + +// Package +type Packages struct { + + // LibvirtBin + LibvirtBin LibvirtBin `json:"libvirt-bin"` + + // Lvm2Lockd + Lvm2Lockd Lvm2Lockd `json:"lvm2-lockd"` + + // OpenvswitchCommon + OpenvswitchCommon OpenvswitchCommon `json:"openvswitch-common"` + + // OpenvswitchSwitch + OpenvswitchSwitch OpenvswitchSwitch `json:"openvswitch-switch"` + + // QemuSystemX86 + QemuSystemX86 QemuSystemX86 `json:"qemu-system-x86"` + + // Sanlock + Sanlock Sanlock `json:"sanlock"` +} + +// LibvirtBin +type LibvirtBin struct { + + // InstalledSize + InstalledSize string `json:"installed_size"` + + // Version + Ver string `json:"ver"` +} + +// Lvm2Lockd +type Lvm2Lockd struct { + + // InstalledSize + InstalledSize string `json:"installed_size"` + + // Version + Ver string `json:"ver"` +} + +// OpenvswitchCommon +type OpenvswitchCommon struct { + + // InstalledSize + InstalledSize string `json:"installed_size"` + + // Version + Ver string `json:"ver"` +} + +// OpenvswitchSwitch +type OpenvswitchSwitch struct { + + // InstalledSize + InstalledSize string `json:"installed_size"` + + // Version + Ver string `json:"ver"` +} + +// QemuSystemX86 +type QemuSystemX86 struct { + + // InstalledSize + InstalledSize string `json:"installed_size"` + + // Version + Ver string `json:"ver"` +} + +// Sanlock +type Sanlock struct { + + // InstalledSize + InstalledSize string `json:"installed_size"` + + // Version + Ver string `json:"ver"` +} diff --git a/pkg/cloudbroker/stack/stack.go b/pkg/cloudbroker/stack/stack.go new file mode 100644 index 0000000..94c5d89 --- /dev/null +++ b/pkg/cloudbroker/stack/stack.go @@ -0,0 +1,16 @@ +// 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, + } +}