parent
1c59ca338a
commit
a3711057ba
@ -1,10 +1,9 @@
|
|||||||
## Version 1.5.3
|
## Version 1.5.4
|
||||||
|
|
||||||
### Bugfix
|
### Feature
|
||||||
- Add a fields SEPID and Pool in ListUnattachedRequest struct in cloudbroker/disks/listUnattached and cloudapi/disks/listUnattached
|
- 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 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
|
### 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
|
@ -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)
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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,
|
||||||
|
}
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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"`
|
||||||
|
}
|
@ -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)
|
||||||
|
}
|
@ -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)
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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
|
||||||
|
}
|
@ -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"`
|
||||||
|
}
|
@ -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,
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in new issue