parent
							
								
									c95208ee97
								
							
						
					
					
						commit
						68d24d41c4
					
				| @ -0,0 +1,21 @@ | ||||
| linters: | ||||
|   enable: | ||||
|     - bodyclose | ||||
|     - decorder | ||||
|     - dogsled | ||||
|     - errorlint | ||||
|     - exportloopref | ||||
|     - gocognit | ||||
|     - goconst | ||||
|     - gocyclo | ||||
|     - gosec | ||||
|     - ifshort | ||||
|     - makezero | ||||
|     - nestif | ||||
|     - nilerr | ||||
|     - prealloc | ||||
|     - unconvert | ||||
|     - unparam | ||||
| 
 | ||||
| issues: | ||||
|   max-same-issues: 0 | ||||
| @ -0,0 +1,9 @@ | ||||
| package client | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/rudecs/decort-sdk/account" | ||||
| ) | ||||
| 
 | ||||
| func (dc *decortClient) Account() *account.Account { | ||||
| 	return account.New(dc) | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/rudecs/decort-sdk/interfaces" | ||||
| ) | ||||
| 
 | ||||
| type Account struct { | ||||
| 	client interfaces.Caller | ||||
| } | ||||
| 
 | ||||
| func New(client interfaces.Caller) *Account { | ||||
| 	return &Account{ | ||||
| 		client, | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,68 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AddUserRequest struct { | ||||
| 	AccountId  uint64 `url:"accountId"` | ||||
| 	UserId     string `url:"userId"` | ||||
| 	AccessType string `url:"accesstype"` | ||||
| } | ||||
| 
 | ||||
| func (arq AddUserRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.UserId == "" { | ||||
| 		return errors.New("validation-error: field UserId can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.AccessType == "" { | ||||
| 		return errors.New("validation-error: field AccessType can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	isValid := validators.StringInSlice(arq.AccessType, []string{"R", "RCX", "ARCXDU"}) | ||||
| 	if !isValid { | ||||
| 		return errors.New("validation-error: field AccessType can be only R, RCX or ARCXDU") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) AddUser(ctx context.Context, req AddUserRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/addUser" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, 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,54 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AuditsRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq AuditsRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Audits(ctx context.Context, req AuditsRequest, options ...opts.DecortOpts) (AccountAuditsList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/audits" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	auditsRaw, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	audits := AccountAuditsList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal([]byte(auditsRaw), &audits) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return audits, nil | ||||
| } | ||||
| @ -0,0 +1,65 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type CreateRequest struct { | ||||
| 	Name                   string `url:"name"` | ||||
| 	Username               string `url:"username"` | ||||
| 	EmailAddress           string `url:"emailaddress,omitempty"` | ||||
| 	MaxMemoryCapacity      uint   `url:"maxMemoryCapacity,omitempty"` | ||||
| 	MaxVDiskCapacity       uint   `url:"maxVDiskCapacity,omitempty"` | ||||
| 	MaxCPUCapacity         uint   `url:"maxCPUCapacity,omitempty"` | ||||
| 	MaxNetworkPeerTransfer uint   `url:"maxNetworkPeerTransfer,omitempty"` | ||||
| 	MaxNumPublicIP         uint   `url:"maxNumPublicIP,omitempty"` | ||||
| 	SendAccessEmails       bool   `url:"sendAccessEmails,omitempty"` | ||||
| 	GpuUnits               uint   `url:"gpu_units,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (arq CreateRequest) Validate() error { | ||||
| 	if arq.Name == "" { | ||||
| 		return errors.New("validation-error: field Name can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.Username == "" { | ||||
| 		return errors.New("validation-error: field Username can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Create(ctx context.Context, req CreateRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/create" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseUint(string(res), 10, 64) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,52 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DeleteRequest struct { | ||||
| 	AccountId   uint64 `url:"accountId"` | ||||
| 	Permanently bool   `url:"permanently,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (arq DeleteRequest) Validate() error { | ||||
| 
 | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId must be set") | ||||
| 	} | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Delete(ctx context.Context, req DeleteRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/delete" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, 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,58 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DeleteUserRequest struct { | ||||
| 	AccountId       uint64 `url:"accountId"` | ||||
| 	UserId          string `url:"userId"` | ||||
| 	RecursiveDelete bool   `url:"recursivedelete,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (arq DeleteUserRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.UserId == "" { | ||||
| 		return errors.New("validation-error: field UserId can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) DeleteUser(ctx context.Context, req DeleteUserRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/deleteUser" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, 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,80 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DisabelEnableRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq DisabelEnableRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Disable(ctx context.Context, req DisabelEnableRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/disable" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Enable(ctx context.Context, req DisabelEnableRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/enable" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, 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,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq GetRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Get(ctx context.Context, req GetRequest, options ...opts.DecortOpts) (*AccountWithResources, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/get" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	account := &AccountWithResources{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &account) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return account, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetConsumedAccountUnitsRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq GetConsumedAccountUnitsRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) GetConsumedAccountUnits(ctx context.Context, req GetConsumedAccountUnitsRequest, options ...opts.DecortOpts) (*ResourceLimits, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/getConsumedAccountUnits" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	rl := &ResourceLimits{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &rl) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return rl, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,64 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetConsumedCloudUnitsByTypeRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| 	CUType    string `url:"cutype"` | ||||
| } | ||||
| 
 | ||||
| func (arq GetConsumedCloudUnitsByTypeRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.CUType == "" { | ||||
| 		return errors.New("validation-error: field CUType can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	isValid := validators.StringInSlice(arq.CUType, []string{"CU_M", "CU_C", "CU_D", "CU_S", "CU_A", "CU_NO", "CU_I", "CU_NP"}) | ||||
| 	if !isValid { | ||||
| 		return errors.New("validation-error: field AccessType can be only CU_M, CU_C, CU_D, CU_S, CU_A, CU_NO, CU_I or CU_NP") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) GetConsumedCloudUnitsByType(ctx context.Context, req GetConsumedCloudUnitsByTypeRequest, options ...opts.DecortOpts) (float64, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/getConsumedCloudUnitsByType" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseFloat(string(res), 64) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,83 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetConsumtionRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| 	Start     uint64 `url:"start"` | ||||
| 	End       uint64 `url:"end"` | ||||
| } | ||||
| 
 | ||||
| func (arq GetConsumtionRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.Start == 0 { | ||||
| 		return errors.New("validation-error: field Start can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.End == 0 { | ||||
| 		return errors.New("validation-error: field End can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) GetConsumtion(ctx context.Context, req GetConsumtionRequest, options ...opts.DecortOpts) (string, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/getConsumtion" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	return string(res), nil | ||||
| 
 | ||||
| } | ||||
| 
 | ||||
| func (a Account) GetConsumtionGet(ctx context.Context, req GetConsumtionRequest, options ...opts.DecortOpts) (string, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/getConsumtion" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.GET, url, req) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	return string(res), nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetReservedAccountUnitsRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq GetReservedAccountUnitsRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) GetReservedAccountUnits(ctx context.Context, req GetReservedAccountUnitsRequest, options ...opts.DecortOpts) (*ResourceLimits, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/getReservedAccountUnits" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	rl := &ResourceLimits{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &rl) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return rl, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListRequest struct { | ||||
| 	Page uint64 `url:"page"` | ||||
| 	Size uint64 `url:"size"` | ||||
| } | ||||
| 
 | ||||
| func (a Account) List(ctx context.Context, req ListRequest, options ...opts.DecortOpts) (AccountCloudApiList, error) { | ||||
| 	url := "/account/list" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountList := AccountCloudApiList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListComputesRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq ListComputesRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) ListComputes(ctx context.Context, req ListComputesRequest, options ...opts.DecortOpts) (AccountComputesList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/listComputes" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountComputesList := AccountComputesList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountComputesList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountComputesList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListDeletedRequest struct { | ||||
| 	Page uint64 `url:"page"` | ||||
| 	Size uint64 `url:"size"` | ||||
| } | ||||
| 
 | ||||
| func (a Account) ListDeleted(ctx context.Context, req ListDeletedRequest, options ...opts.DecortOpts) (AccountCloudApiList, error) { | ||||
| 	url := "/account/listDeleted" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountList := AccountCloudApiList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListDisksRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq ListDisksRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) ListDisks(ctx context.Context, req ListDisksRequest, options ...opts.DecortOpts) (AccountDisksList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/listDisks" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountDisksList := AccountDisksList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountDisksList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountDisksList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListFlipGroupsRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq ListFlipGroupsRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) ListFlipGroups(ctx context.Context, req ListFlipGroupsRequest, options ...opts.DecortOpts) (AccountFlipGroupsList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/listFlipGroups" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountFlipGroupsList := AccountFlipGroupsList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountFlipGroupsList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountFlipGroupsList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListRGRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq ListRGRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) ListRG(ctx context.Context, req ListRGRequest, options ...opts.DecortOpts) (AccountRGList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/listRG" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountRGList := AccountRGList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountRGList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountRGList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListTemplatesRequest struct { | ||||
| 	AccountId      uint64 `url:"accountId"` | ||||
| 	IncludeDeleted bool   `url:"includedeleted"` | ||||
| } | ||||
| 
 | ||||
| func (arq ListTemplatesRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) ListTemplates(ctx context.Context, req ListTemplatesRequest, options ...opts.DecortOpts) (AccountTemplatesList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/listTemplates" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountTemplatesList := AccountTemplatesList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountTemplatesList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountTemplatesList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,55 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListVinsRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq ListVinsRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) ListVins(ctx context.Context, req ListVinsRequest, options ...opts.DecortOpts) (AccountVinsList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/listVins" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	accountVinsList := AccountVinsList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &accountVinsList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return accountVinsList, nil | ||||
| 
 | ||||
| } | ||||
| @ -0,0 +1,229 @@ | ||||
| package account | ||||
| 
 | ||||
| type AccountAclRecord struct { | ||||
| 	IsExplicit   bool   `json:"explicit"` | ||||
| 	GUID         string `json:"guid"` | ||||
| 	Rights       string `json:"right"` | ||||
| 	Status       string `json:"status"` | ||||
| 	Type         string `json:"type"` | ||||
| 	UgroupID     string `json:"userGroupId"` | ||||
| 	CanBeDeleted bool   `json:"canBeDeleted"` | ||||
| } | ||||
| 
 | ||||
| type ResourceLimits struct { | ||||
| 	CUC      float64 `json:"CU_C"` | ||||
| 	CUD      float64 `json:"CU_D"` | ||||
| 	CUI      float64 `json:"CU_I"` | ||||
| 	CUM      float64 `json:"CU_M"` | ||||
| 	CUNP     float64 `json:"CU_NP"` | ||||
| 	GpuUnits float64 `json:"gpu_units"` | ||||
| } | ||||
| 
 | ||||
| type AccountRecord struct { | ||||
| 	DCLocation        string             `json:"DCLocation"` | ||||
| 	CKey              string             `jspn:"_ckey"` | ||||
| 	Meta              []interface{}      `json:"_meta"` | ||||
| 	Acl               []AccountAclRecord `json:"acl"` | ||||
| 	Company           string             `json:"company"` | ||||
| 	CompanyUrl        string             `json:"companyurl"` | ||||
| 	CreatedBy         string             `jspn:"createdBy"` | ||||
| 	CreatedTime       int                `json:"createdTime"` | ||||
| 	DeactiovationTime float64            `json:"deactivationTime"` | ||||
| 	DeletedBy         string             `json:"deletedBy"` | ||||
| 	DeletedTime       int                `json:"deletedTime"` | ||||
| 	DisplayName       string             `json:"displayname"` | ||||
| 	GUID              int                `json:"guid"` | ||||
| 	ID                int                `json:"id"` | ||||
| 	Name              string             `json:"name"` | ||||
| 	ResourceLimits    ResourceLimits     `json:"resourceLimits"` | ||||
| 	SendAccessEmails  bool               `json:"sendAccessEmails"` | ||||
| 	ServiceAccount    bool               `json:"serviceAccount"` | ||||
| 	Status            string             `json:"status"` | ||||
| 	UpdatedTime       int                `json:"updatedTime"` | ||||
| 	Version           int                `json:"version"` | ||||
| 	Vins              []int              `json:"vins"` | ||||
| } | ||||
| 
 | ||||
| type AccountList []AccountRecord | ||||
| 
 | ||||
| type AccountCloudApi struct { | ||||
| 	Acl         []AccountAclRecord `json:"acl"` | ||||
| 	CreatedTime int                `json:"createdTime"` | ||||
| 	DeletedTime int                `json:"deletedTime"` | ||||
| 	ID          int                `json:"id"` | ||||
| 	Name        string             `json:"name"` | ||||
| 	Status      string             `json:"status"` | ||||
| 	UpdatedTime int                `json:"updatedTime"` | ||||
| } | ||||
| 
 | ||||
| type AccountCloudApiList []AccountCloudApi | ||||
| 
 | ||||
| type Resource struct { | ||||
| 	CPU        int `json:"cpu"` | ||||
| 	Disksize   int `json:"disksize"` | ||||
| 	Extips     int `json:"extips"` | ||||
| 	Exttraffic int `json:"exttraffic"` | ||||
| 	GPU        int `json:"gpu"` | ||||
| 	RAM        int `json:"ram"` | ||||
| } | ||||
| 
 | ||||
| type Resources struct { | ||||
| 	Current  Resource `json:"Current"` | ||||
| 	Reserved Resource `json:"Reserved"` | ||||
| } | ||||
| 
 | ||||
| type Computes struct { | ||||
| 	Started int `json:"started"` | ||||
| 	Stopped int `json:"stopped"` | ||||
| } | ||||
| 
 | ||||
| type Machines struct { | ||||
| 	Running int `json:"running"` | ||||
| 	Halted  int `json:"halted"` | ||||
| } | ||||
| 
 | ||||
| type AccountWithResources struct { | ||||
| 	Account | ||||
| 	Resources Resources `json:"Resources"` | ||||
| 	Computes  Computes  `json:"computes"` | ||||
| 	Machines  Machines  `json:"machines"` | ||||
| 	Vinses    int       `json:"vinses"` | ||||
| } | ||||
| 
 | ||||
| type AccountCompute struct { | ||||
| 	AccountId      int    `json:"accountId"` | ||||
| 	AccountName    string `json:"accountName"` | ||||
| 	CPUs           int    `json:"cpus"` | ||||
| 	CreatedBy      string `json:"createdBy"` | ||||
| 	CreatedTime    int    `json:"createdTime"` | ||||
| 	DeletedBy      string `json:"deletedBy"` | ||||
| 	DeletedTime    int    `json:"deletedTime"` | ||||
| 	ComputeId      int    `json:"id"` | ||||
| 	ComputeName    string `json:"name"` | ||||
| 	RAM            int    `json:"ram"` | ||||
| 	Registered     bool   `json:"registered"` | ||||
| 	RGId           int    `json:"rgId"` | ||||
| 	RGName         string `json:"rgName"` | ||||
| 	Status         string `json:"status"` | ||||
| 	TechStatus     string `json:"techStatus"` | ||||
| 	TotalDisksSize int    `json:"totalDisksSize"` | ||||
| 	UpdatedBy      string `json:"updatedBy"` | ||||
| 	UpdatedTime    int    `json:"updatedTime"` | ||||
| 	UserManaged    bool   `json:"userManaged"` | ||||
| 	VinsConnected  int    `json:"vinsConnected"` | ||||
| } | ||||
| 
 | ||||
| type AccountComputesList []AccountCompute | ||||
| 
 | ||||
| type AccountDisk struct { | ||||
| 	ID      int    `json:"id"` | ||||
| 	Name    string `json:"name"` | ||||
| 	Pool    string `json:"pool"` | ||||
| 	SepId   int    `json:"sepId"` | ||||
| 	SizeMax int    `json:"sizeMax"` | ||||
| 	Type    string `json:"type"` | ||||
| } | ||||
| 
 | ||||
| type AccountDisksList []AccountDisk | ||||
| 
 | ||||
| type AccountVin struct { | ||||
| 	AccountId   int    `json:"accountId"` | ||||
| 	AccountName string `json:"accountName"` | ||||
| 	Computes    int    `json:"computes"` | ||||
| 	CreatedBy   string `json:"createdBy"` | ||||
| 	CreatedTime int    `json:"createdTime"` | ||||
| 	DeletedBy   string `json:"deletedBy"` | ||||
| 	DeletedTime int    `json:"deletedTime"` | ||||
| 	ExternalIP  string `json:"externalIP"` | ||||
| 	ID          int    `json:"id"` | ||||
| 	Name        string `json:"name"` | ||||
| 	Network     string `json:"network"` | ||||
| 	PriVnfDevId int    `json:"priVnfDevId"` | ||||
| 	RGId        int    `json:"rgId"` | ||||
| 	RGName      string `json:"rgName"` | ||||
| 	Status      string `json:"status"` | ||||
| 	UpdatedBy   string `json:"updatedBy"` | ||||
| 	UpdatedTime int    `json:"updatedTime"` | ||||
| } | ||||
| 
 | ||||
| type AccountVinsList []AccountVin | ||||
| 
 | ||||
| type AccountAudit struct { | ||||
| 	Call         string  `json:"call"` | ||||
| 	ResponseTime float64 `json:"responsetime"` | ||||
| 	StatusCode   int     `json:"statuscode"` | ||||
| 	Timestamp    float64 `json:"timestamp"` | ||||
| 	User         string  `json:"user"` | ||||
| } | ||||
| 
 | ||||
| type AccountAuditsList []AccountAudit | ||||
| 
 | ||||
| type AccountRGComputes struct { | ||||
| 	Started int `json:"Started"` | ||||
| 	Stopped int `json:"Stopped"` | ||||
| } | ||||
| 
 | ||||
| type AccountRGResources struct { | ||||
| 	Consumed Resource `json:"Consumed"` | ||||
| 	Limits   Resource `json:"Limits"` | ||||
| 	Reserved Resource `json:"Reserved"` | ||||
| } | ||||
| 
 | ||||
| type AccountRG struct { | ||||
| 	Computes    AccountRGComputes  `json:"Computes"` | ||||
| 	Resources   AccountRGResources `json:"Resources"` | ||||
| 	CreatedBy   string             `json:"createdBy"` | ||||
| 	CreatedTime int                `json:"createdTime"` | ||||
| 	DeletedBy   string             `json:"deletedBy"` | ||||
| 	DeletedTime int                `json:"deletedTime"` | ||||
| 	RGID        int                `json:"id"` | ||||
| 	Milestones  int                `json:"milestones"` | ||||
| 	RGName      string             `json:"name"` | ||||
| 	Status      string             `json:"status"` | ||||
| 	UpdatedBy   string             `json:"updatedBy"` | ||||
| 	UpdatedTime int                `json:"updatedTime"` | ||||
| 	Vinses      int                `json:"vinses"` | ||||
| } | ||||
| 
 | ||||
| type AccountRGList []AccountRG | ||||
| 
 | ||||
| type AccountTemplate struct { | ||||
| 	UNCPath     string `json:"UNCPath"` | ||||
| 	AccountId   int    `json:"accountId"` | ||||
| 	Description string `json:"desc"` | ||||
| 	ID          int    `json:"id"` | ||||
| 	Name        string `json:"name"` | ||||
| 	Public      bool   `json:"public"` | ||||
| 	Size        int    `json:"size"` | ||||
| 	Status      string `json:"status"` | ||||
| 	Type        string `json:"type"` | ||||
| 	Username    string `json:"username"` | ||||
| } | ||||
| 
 | ||||
| type AccountTemplatesList []AccountTemplate | ||||
| 
 | ||||
| type AccountFlipGroup struct { | ||||
| 	AccountId   int    `json:"accountId"` | ||||
| 	ClientType  string `json:"clientType"` | ||||
| 	ConnType    string `json:"connType"` | ||||
| 	CreatedBy   string `json:"createdBy"` | ||||
| 	CreatedTime int    `json:"createdTime"` | ||||
| 	DefaultGW   string `json:"defaultGW"` | ||||
| 	DeletedBy   string `json:"deletedBy"` | ||||
| 	DeletedTime int    `json:"deletedTime"` | ||||
| 	Description string `json:"desc"` | ||||
| 	GID         int    `json:"gid"` | ||||
| 	GUID        int    `json:"guid"` | ||||
| 	ID          int    `json:"id"` | ||||
| 	IP          string `json:"ip"` | ||||
| 	Milestones  int    `json:"milestones"` | ||||
| 	Name        string `json:"name"` | ||||
| 	NetID       int    `json:"netId"` | ||||
| 	NetType     string `json:"netType"` | ||||
| 	NetMask     int    `json:"netmask"` | ||||
| 	Status      string `json:"status"` | ||||
| 	UpdatedBy   string `json:"updatedBy"` | ||||
| 	UpdatedTime int    `json:"updatedTime"` | ||||
| } | ||||
| 
 | ||||
| type AccountFlipGroupsList []AccountFlipGroup | ||||
| @ -0,0 +1,53 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type RestoreRequest struct { | ||||
| 	AccountId uint64 `url:"accountId"` | ||||
| } | ||||
| 
 | ||||
| func (arq RestoreRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Restore(ctx context.Context, req RestoreRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/restore" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, 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,60 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type UpdateRequest struct { | ||||
| 	AccountId              uint64 `url:"accountId"` | ||||
| 	Name                   string `url:"name,omitempty"` | ||||
| 	MaxMemoryCapacity      uint   `url:"maxMemoryCapacity,omitempty"` | ||||
| 	MaxVDiskCapacity       uint   `url:"maxVDiskCapacity,omitempty"` | ||||
| 	MaxCPUCapacity         uint   `url:"maxCPUCapacity,omitempty"` | ||||
| 	MaxNetworkPeerTransfer uint   `url:"maxNetworkPeerTransfer,omitempty"` | ||||
| 	MaxNumPublicIP         uint   `url:"maxNumPublicIP,omitempty"` | ||||
| 	SendAccessEmails       bool   `url:"sendAccessEmails,omitempty"` | ||||
| 	GpuUnits               uint   `url:"gpu_units,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (arq UpdateRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) Update(ctx context.Context, req UpdateRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/update" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, 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,68 @@ | ||||
| package account | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type UpdateUserRequest struct { | ||||
| 	AccountId  uint64 `url:"accountId"` | ||||
| 	UserId     string `url:"userId"` | ||||
| 	AccessType string `url:"accesstype"` | ||||
| } | ||||
| 
 | ||||
| func (arq UpdateUserRequest) Validate() error { | ||||
| 	if arq.AccountId == 0 { | ||||
| 		return errors.New("validation-error: field AccountId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.UserId == "" { | ||||
| 		return errors.New("validation-error: field UserId can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if arq.AccessType == "" { | ||||
| 		return errors.New("validation-error: field AccessType can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	isValid := validators.StringInSlice(arq.AccessType, []string{"R", "RCX", "ARCXDU"}) | ||||
| 	if !isValid { | ||||
| 		return errors.New("validation-error: field AccessType can be only R, RCX or ARCXDU") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (a Account) UpdateUser(ctx context.Context, req UpdateUserRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/account/updateUser" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 
 | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := a.client.DecortApiCall(ctx, typed.POST, 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,13 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import "github.com/rudecs/decort-sdk/interfaces" | ||||
| 
 | ||||
| type BService struct { | ||||
| 	client interfaces.Caller | ||||
| } | ||||
| 
 | ||||
| func New(client interfaces.Caller) *BService { | ||||
| 	return &BService{ | ||||
| 		client, | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,43 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type CreateRequest struct { | ||||
| 	Name    string `url:"name"` | ||||
| 	RGID    uint64 `url:"rgId"` | ||||
| 	SSHUser string `url:"sshUser,omitempty"` | ||||
| 	SSHKey  string `url:"sshKey,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq CreateRequest) Validate() error { | ||||
| 	if bsrq.Name == "" { | ||||
| 		return errors.New("field Name can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.RGID == 0 { | ||||
| 		return errors.New("field RGID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Create(ctx context.Context, req CreateRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/create" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseUint(string(res), 10, 64) | ||||
| } | ||||
| @ -0,0 +1,37 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DeleteRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	Permanently bool   `url:"permanently,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq DeleteRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Delete(ctx context.Context, req DeleteRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/delete" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,36 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DisableRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq DisableRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Disable(ctx context.Context, req DisableRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/delete" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,36 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type EnableRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq EnableRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Enable(ctx context.Context, req EnableRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/enable" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GetRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Get(ctx context.Context, req GetRequest, options ...opts.DecortOpts) (*BasicService, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/get" | ||||
| 	bsRaw, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	bs := &BasicService{} | ||||
| 	if err := json.Unmarshal(bsRaw, bs); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return bs, nil | ||||
| } | ||||
| @ -0,0 +1,75 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupAddRequest struct { | ||||
| 	ServiceID    uint64   `url:"serviceId"` | ||||
| 	Name         string   `url:"name"` | ||||
| 	Count        uint64   `url:"count"` | ||||
| 	CPU          uint64   `url:"cpu"` | ||||
| 	RAM          uint64   `url:"ram"` | ||||
| 	Disk         uint64   `url:"disk"` | ||||
| 	ImageID      uint64   `url:"imageId"` | ||||
| 	Driver       string   `url:"driver"` | ||||
| 	Role         string   `url:"role,omitempty"` | ||||
| 	VINSes       []uint64 `url:"vinses,omitempty"` | ||||
| 	Extnets      []uint64 `url:"extnets,omitempty"` | ||||
| 	TimeoutStart uint64   `url:"timeoutStart"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupAddRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Name == "" { | ||||
| 		return errors.New("field Name can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Count == 0 { | ||||
| 		return errors.New("field Count can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CPU == 0 { | ||||
| 		return errors.New("field CPU can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.RAM == 0 { | ||||
| 		return errors.New("field RAM can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Disk == 0 { | ||||
| 		return errors.New("field Disk can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.ImageID == 0 { | ||||
| 		return errors.New("field ImageID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Driver == "" { | ||||
| 		return errors.New("field Driver can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupAdd(ctx context.Context, req GroupAddRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupAdd" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseUint(string(res), 10, 64) | ||||
| } | ||||
| @ -0,0 +1,46 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupComputeRemoveRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| 	ComputeID   uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupComputeRemoveRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.ComputeID == 0 { | ||||
| 		return errors.New("field ComputeID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupComputeRemove(ctx context.Context, req GroupComputeRemoveRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupComputeRemove" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,46 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupGetRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupGetRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupGet(ctx context.Context, req GroupGetRequest, options ...opts.DecortOpts) (*Group, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupGet" | ||||
| 	groupRaw, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	group := &Group{} | ||||
| 	if err := json.Unmarshal(groupRaw, group); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return group, nil | ||||
| } | ||||
| @ -0,0 +1,46 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupParentAddRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| 	ParentID    uint64 `url:"parentId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupParentAddRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.ParentID == 0 { | ||||
| 		return errors.New("field ParentID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupParentAdd(ctx context.Context, req GroupParentAddRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupParentAdd" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,46 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupParentRemoveRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| 	ParentID    uint64 `url:"parentId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupParentRemoveRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.ParentID == 0 { | ||||
| 		return errors.New("field ParentID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupParentRemove(ctx context.Context, req GroupParentRemoveRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupParentRemove" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupRemoveRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupRemoveRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupRemove(ctx context.Context, req GroupRemoveRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupRemove" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 
 | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,52 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupResizeRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| 	Count       int64  `url:"count"` | ||||
| 	Mode        string `url:"mode"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupResizeRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Mode == "RELATIVE" && bsrq.Count == 0 { | ||||
| 		return errors.New("field Count can not be equal to 0 if Mode if 'RELATIVE'") | ||||
| 	} | ||||
| 
 | ||||
| 	if !validators.StringInSlice(bsrq.Mode, []string{"RELATIVE", "ABSOLUTE"}) { | ||||
| 		return errors.New("field Mode can only be one of 'RELATIVE' or 'ABSOLUTE'") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupResize(ctx context.Context, req GroupResizeRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupResize" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseUint(string(res), 10, 64) | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupStartRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupStartRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupStart(ctx context.Context, req GroupStartRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupStart" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupStopRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| 	Force       bool   `url:"force,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupStopRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupStop(ctx context.Context, req GroupStopRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupStop" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,47 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupUpdateRequest struct { | ||||
| 	ServiceID   uint64 `url:"serviceId"` | ||||
| 	CompGroupID uint64 `url:"compgroupId"` | ||||
| 	Name        string `url:"name,omitempty"` | ||||
| 	Role        string `url:"role,omitempty"` | ||||
| 	CPU         uint64 `url:"cpu,omitempty"` | ||||
| 	RAM         uint64 `url:"ram,omitempty"` | ||||
| 	Disk        uint64 `url:"disk,omitempty"` | ||||
| 	Force       bool   `url:"force,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupUpdateRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupUpdate(ctx context.Context, req GroupUpdateRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupUpdate" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupUpdateExtnetRequest struct { | ||||
| 	ServiceID   uint64   `url:"serviceId"` | ||||
| 	CompGroupID uint64   `url:"compgroupId"` | ||||
| 	Extnets     []uint64 `url:"extnets,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupUpdateExtnetRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupUpdateExtnet(ctx context.Context, req GroupUpdateExtnetRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupUpdateExtnet" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GroupUpdateVINSRequest struct { | ||||
| 	ServiceID   uint64   `url:"serviceId"` | ||||
| 	CompGroupID uint64   `url:"compgroupId"` | ||||
| 	VINSes      []uint64 `url:"vinses,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq GroupUpdateVINSRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.CompGroupID == 0 { | ||||
| 		return errors.New("field CompGroupID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) GroupUpdateVINS(ctx context.Context, req GroupUpdateVINSRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/groupUpdateVins" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,46 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListRequest struct { | ||||
| 	AccountID uint64 `url:"accountId,omitempty"` | ||||
| 	RGID      uint64 `url:"rgId,omitempty"` | ||||
| 	Page      uint64 `url:"page,omitempty"` | ||||
| 	Size      uint64 `url:"size,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (b BService) List(ctx context.Context, req ListRequest, options ...opts.DecortOpts) (BasicServiceList, error) { | ||||
| 	url := "/cloudapi/bservice/list" | ||||
| 	bsListRaw, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	bsList := BasicServiceList{} | ||||
| 	if err := json.Unmarshal(bsListRaw, &bsList); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return bsList, nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) ListDeleted(ctx context.Context, req ListRequest, options ...opts.DecortOpts) (BasicServiceList, error) { | ||||
| 	url := "/cloudapi/bservice/listDeleted" | ||||
| 	bsListRaw, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	bsList := BasicServiceList{} | ||||
| 	if err := json.Unmarshal(bsListRaw, &bsList); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return bsList, nil | ||||
| } | ||||
| @ -0,0 +1,123 @@ | ||||
| package bservice | ||||
| 
 | ||||
| type BasicService struct { | ||||
| 	AccountID     uint64     `json:"accountId"` | ||||
| 	AccountName   string     `json:"accountName"` | ||||
| 	BaseDomain    string     `json:"baseDomain"` | ||||
| 	Computes      []Compute  `json:"computes"` | ||||
| 	CPUTotal      uint64     `json:"cpuTotal"` | ||||
| 	CreatedBy     string     `json:"createdBy"` | ||||
| 	CreatedTime   uint64     `json:"createdTime"` | ||||
| 	DeletedBy     string     `json:"deletedBy"` | ||||
| 	DeletedTime   uint64     `json:"deletedTime"` | ||||
| 	DiskTotal     uint64     `json:"diskTotal"` | ||||
| 	GID           uint64     `json:"gid"` | ||||
| 	Groups        []uint64   `json:"groups"` | ||||
| 	GroupsName    []string   `json:"groupsName"` | ||||
| 	GUID          uint64     `json:"guid"` | ||||
| 	ID            uint64     `json:"id"` | ||||
| 	Milestones    uint64     `json:"milestones"` | ||||
| 	Name          string     `json:"name"` | ||||
| 	ParentSrvID   uint64     `json:"parentSrvId"` | ||||
| 	ParentSrvType string     `json:"parentSrvType"` | ||||
| 	RAMTotal      uint64     `json:"ramTotal"` | ||||
| 	RGID          uint64     `json:"rgId"` | ||||
| 	RGName        string     `json:"rgName"` | ||||
| 	Snapshots     []Snapshot `json:"snapshots"` | ||||
| 	SSHKey        string     `json:"sshKey"` | ||||
| 	SSHUser       string     `json:"sshUser"` | ||||
| 	Status        string     `json:"status"` | ||||
| 	TechStatus    string     `json:"techStatus"` | ||||
| 	UpdatedBy     string     `json:"updatedBy"` | ||||
| 	UpdatedTime   uint64     `json:"updatedTime"` | ||||
| 	UserManaged   bool       `json:"userManaged"` | ||||
| } | ||||
| 
 | ||||
| type Compute struct { | ||||
| 	CompGroupID   uint64 `json:"compgroupId"` | ||||
| 	CompGroupName string `json:"compgroupName"` | ||||
| 	CompGroupRole string `json:"compgroupRole"` | ||||
| 	ID            uint64 `json:"id"` | ||||
| 	Name          string `json:"name"` | ||||
| } | ||||
| 
 | ||||
| type Snapshot struct { | ||||
| 	GUID      string `json:"guid"` | ||||
| 	Label     string `json:"label"` | ||||
| 	Timestamp uint64 `json:"timestamp"` | ||||
| 	Valid     bool   `json:"valid"` | ||||
| } | ||||
| 
 | ||||
| type Group struct { | ||||
| 	AccountID    uint64         `json:"accountId"` | ||||
| 	AccountName  string         `json:"accountName"` | ||||
| 	Computes     []GroupCompute `json:"computes"` | ||||
| 	Consistency  bool           `json:"consistency"` | ||||
| 	CPU          uint64         `json:"cpu"` | ||||
| 	CreatedBy    string         `json:"createdBy"` | ||||
| 	CreatedTime  uint64         `json:"createdTime"` | ||||
| 	DeletedBy    string         `json:"deletedBy"` | ||||
| 	DeletedTime  uint64         `json:"deletedTime"` | ||||
| 	Disk         uint64         `json:"disk"` | ||||
| 	Driver       string         `json:"driver"` | ||||
| 	Extnets      []uint64       `json:"extnets"` | ||||
| 	GID          uint64         `json:"gid"` | ||||
| 	GUID         uint64         `json:"guid"` | ||||
| 	ID           uint64         `json:"id"` | ||||
| 	ImageID      uint64         `json:"imageId"` | ||||
| 	Milestones   uint64         `json:"milestones"` | ||||
| 	Name         string         `json:"name"` | ||||
| 	Parents      []uint64       `json:"parents"` | ||||
| 	RAM          uint64         `json:"ram"` | ||||
| 	RGID         uint64         `json:"rgId"` | ||||
| 	RGName       string         `json:"rgName"` | ||||
| 	Role         string         `json:"role"` | ||||
| 	SepID        uint64         `json:"sepId"` | ||||
| 	SeqNo        uint64         `json:"seqNo"` | ||||
| 	ServiceID    uint64         `json:"serviceId"` | ||||
| 	Status       string         `json:"status"` | ||||
| 	TechStatus   string         `json:"techStatus"` | ||||
| 	TimeoutStart uint64         `json:"timeoutStart"` | ||||
| 	UpdatedBy    string         `json:"updatedBy"` | ||||
| 	UpdatedTime  uint64         `json:"updatedTime"` | ||||
| 	VINSes       []uint64       `json:"vinses"` | ||||
| } | ||||
| 
 | ||||
| type GroupCompute struct { | ||||
| 	ID          uint64   `json:"id"` | ||||
| 	IPAddresses []string `json:"ipAddresses"` | ||||
| 	Name        string   `json:"name"` | ||||
| 	OSUsers     []OSUser `json:"osUsers"` | ||||
| } | ||||
| 
 | ||||
| type OSUser struct { | ||||
| 	Login    string `json:"login"` | ||||
| 	Password string `json:"password"` | ||||
| } | ||||
| 
 | ||||
| type BasicServiceShort struct { | ||||
| 	AccountID     uint64   `json:"accountId"` | ||||
| 	AccountName   string   `json:"accountName"` | ||||
| 	BaseDomain    string   `json:"baseDomain"` | ||||
| 	CreatedBy     string   `json:"createdBy"` | ||||
| 	CreatedTime   uint64   `json:"createdTime"` | ||||
| 	DeletedBy     string   `json:"deletedBy"` | ||||
| 	DeletedTime   uint64   `json:"deletedTime"` | ||||
| 	GID           uint64   `json:"gid"` | ||||
| 	Groups        []uint64 `json:"groups"` | ||||
| 	GUID          uint64   `json:"guid"` | ||||
| 	ID            uint64   `json:"id"` | ||||
| 	Name          string   `json:"name"` | ||||
| 	ParentSrvID   uint64   `json:"parentSrvId"` | ||||
| 	ParentSrvType string   `json:"parentSrvType"` | ||||
| 	RGID          uint64   `json:"rgId"` | ||||
| 	RGName        string   `json:"rgName"` | ||||
| 	SSHUser       string   `json:"sshUser"` | ||||
| 	Status        string   `json:"status"` | ||||
| 	TechStatus    string   `json:"techStatus"` | ||||
| 	UpdatedBy     string   `json:"updatedBy"` | ||||
| 	UpdatedTime   uint64   `json:"updatedTime"` | ||||
| 	UserManaged   bool     `json:"userManaged"` | ||||
| } | ||||
| 
 | ||||
| type BasicServiceList []BasicServiceShort | ||||
| @ -0,0 +1,36 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type RestoreRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq RestoreRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Restore(ctx context.Context, req RestoreRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/restore" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type SnapshotCreateRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| 	Label     string `url:"label"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq SnapshotCreateRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Label == "" { | ||||
| 		return errors.New("field Label can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) SnapshotCreate(ctx context.Context, req SnapshotCreateRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/snapshotCreate" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type SnapshotDeleteRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| 	Label     string `url:"label"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq SnapshotDeleteRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Label == "" { | ||||
| 		return errors.New("field Label can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) SnapshotDelete(ctx context.Context, req SnapshotDeleteRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/snapshotDelete" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type SnapshotListRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq SnapshotListRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) SnapshotList(ctx context.Context, req SnapshotListRequest, options ...opts.DecortOpts) ([]Snapshot, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/snapshotList" | ||||
| 	snapshotListRaw, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	snapshotList := []Snapshot{} | ||||
| 	if err := json.Unmarshal(snapshotListRaw, &snapshotList); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return snapshotList, nil | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type SnapshotRollbackRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| 	Label     string `url:"label"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq SnapshotRollbackRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if bsrq.Label == "" { | ||||
| 		return errors.New("field Label can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) SnapshotRollback(ctx context.Context, req SnapshotRollbackRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/snapshotRollback" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,36 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type StartRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq StartRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Start(ctx context.Context, req StartRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/start" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,36 @@ | ||||
| package bservice | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type StopRequest struct { | ||||
| 	ServiceID uint64 `url:"serviceId"` | ||||
| } | ||||
| 
 | ||||
| func (bsrq StopRequest) Validate() error { | ||||
| 	if bsrq.ServiceID == 0 { | ||||
| 		return errors.New("field ServiceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (b BService) Stop(ctx context.Context, req StopRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/bservice/stop" | ||||
| 	res, err := b.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return strconv.ParseBool(string(res)) | ||||
| } | ||||
| @ -0,0 +1,50 @@ | ||||
| package client | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"io/ioutil" | ||||
| 	"net/http" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/google/go-querystring/query" | ||||
| ) | ||||
| 
 | ||||
| type decortClient struct { | ||||
| 	decortUrl string | ||||
| 	client    *http.Client | ||||
| } | ||||
| 
 | ||||
| func New(config Config) *decortClient { | ||||
| 	return &decortClient{ | ||||
| 		decortUrl: config.DecortUrl, | ||||
| 		client:    newHttpClient(config), | ||||
| 	} | ||||
| } | ||||
| 
 | ||||
| func (dc *decortClient) DecortApiCall(ctx context.Context, method, url string, params interface{}) ([]byte, error) { | ||||
| 	values, err := query.Values(params) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	body := strings.NewReader(values.Encode()) | ||||
| 	req, _ := http.NewRequestWithContext(ctx, method, dc.decortUrl+"/restmachine"+url, body) | ||||
| 
 | ||||
| 	resp, err := dc.client.Do(req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 	defer resp.Body.Close() | ||||
| 
 | ||||
| 	respBytes, err := ioutil.ReadAll(resp.Body) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	if resp.StatusCode != 200 { | ||||
| 		return nil, errors.New(string(respBytes)) | ||||
| 	} | ||||
| 
 | ||||
| 	return respBytes, nil | ||||
| } | ||||
| @ -0,0 +1,9 @@ | ||||
| package client | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/rudecs/decort-sdk/compute" | ||||
| ) | ||||
| 
 | ||||
| func (dc *decortClient) Compute() *compute.Compute { | ||||
| 	return compute.New(dc) | ||||
| } | ||||
| @ -0,0 +1,49 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AffinityGroupCheckStartRequest struct { | ||||
| 	RGID          uint64 `url:"rgId"` | ||||
| 	AffinityLabel string `url:"affinityLabel"` | ||||
| } | ||||
| 
 | ||||
| func (crq AffinityGroupCheckStartRequest) Validate() error { | ||||
| 	if crq.RGID == 0 { | ||||
| 		return errors.New("validation-error: field RGID can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.AffinityLabel == "" { | ||||
| 		return errors.New("validation-error: field AffinityLabel can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AffinityGroupCheckStart(ctx context.Context, req AffinityGroupCheckStartRequest, options ...opts.DecortOpts) (string, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/affinityGroupCheckStart" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	return string(res), nil | ||||
| } | ||||
| @ -0,0 +1,51 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AffinityLabelRemoveRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq AffinityLabelRemoveRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AffinityLabelRemove(ctx context.Context, req AffinityLabelRemoveRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/affinityLabelRemove" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,55 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AffinityLabelSetRequest struct { | ||||
| 	ComputeId     uint64 `url:"computeId"` | ||||
| 	AffinityLabel string `url:"affinityLabel"` | ||||
| } | ||||
| 
 | ||||
| func (crq AffinityLabelSetRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.AffinityLabel == "" { | ||||
| 		return errors.New("validation-error: field AffinityLabel can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AffinityLabelSet(ctx context.Context, req AffinityLabelSetRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/affinityLabelSet" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,54 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AffinityRelationsRequest struct { | ||||
| 	ComputeId     uint64 `url:"computeId"` | ||||
| 	AffinityLabel string `url:"affinityLabel"` | ||||
| } | ||||
| 
 | ||||
| func (crq AffinityRelationsRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AffinityRelations(ctx context.Context, req AffinityRelationsRequest, options ...opts.DecortOpts) (*AffinityRelations, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/affinityRelations" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	relations := &AffinityRelations{} | ||||
| 
 | ||||
| 	err = json.Unmarshal([]byte(res), relations) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return relations, nil | ||||
| } | ||||
| @ -0,0 +1,91 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AffinityRuleAddRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	Topology  string `url:"topology"` | ||||
| 	Policy    string `url:"policy"` | ||||
| 	Mode      string `url:"mode"` | ||||
| 	Key       string `url:"key"` | ||||
| 	Value     string `url:"value"` | ||||
| } | ||||
| 
 | ||||
| func (crq AffinityRuleAddRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.Topology == "" { | ||||
| 		return errors.New("validation-error: field Topology can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator := validators.StringInSlice(crq.Topology, []string{"compute", "node"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Topology can be only compute or node") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Policy == "" { | ||||
| 		return errors.New("validation-error: field Policy can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Policy, []string{"RECOMMENDED", "REQUIRED"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Policy can be only RECOMMENDED or REQUIRED") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Mode == "" { | ||||
| 		return errors.New("validation-error: field Mode can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Mode, []string{"EQ", "NE", "ANY"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Mode can be only EQ, NE or ANY") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Key == "" { | ||||
| 		return errors.New("validation-error: field Key can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Value == "" { | ||||
| 		return errors.New("validation-error: field Value can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AffinityRuleAdd(ctx context.Context, req AffinityRuleAddRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/affinityRuleAdd" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,91 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AffinityRuleRemoveRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	Topology  string `url:"topology"` | ||||
| 	Policy    string `url:"policy"` | ||||
| 	Mode      string `url:"mode"` | ||||
| 	Key       string `url:"key"` | ||||
| 	Value     string `url:"value"` | ||||
| } | ||||
| 
 | ||||
| func (crq AffinityRuleRemoveRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.Topology == "" { | ||||
| 		return errors.New("validation-error: field Topology can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator := validators.StringInSlice(crq.Topology, []string{"compute", "node"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Topology can be only compute or node") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Policy == "" { | ||||
| 		return errors.New("validation-error: field Policy can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Policy, []string{"RECOMMENDED", "REQUIRED"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Policy can be only RECOMMENDED or REQUIRED") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Mode == "" { | ||||
| 		return errors.New("validation-error: field Mode can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Mode, []string{"EQ", "NE", "ANY"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Mode can be only EQ, NE or ANY") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Key == "" { | ||||
| 		return errors.New("validation-error: field Key can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Value == "" { | ||||
| 		return errors.New("validation-error: field Value can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AffinityRuleRemove(ctx context.Context, req AffinityRuleRemoveRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/affinityRuleRemove" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,51 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AffinityRulesClearRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq AffinityRulesClearRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AffinityRulesClear(ctx context.Context, req AffinityRulesClearRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/affinityRulesClear" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,91 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AntiAffinityRuleAddRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	Topology  string `url:"topology"` | ||||
| 	Policy    string `url:"policy"` | ||||
| 	Mode      string `url:"mode"` | ||||
| 	Key       string `url:"key"` | ||||
| 	Value     string `url:"value"` | ||||
| } | ||||
| 
 | ||||
| func (crq AntiAffinityRuleAddRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.Topology == "" { | ||||
| 		return errors.New("validation-error: field Topology can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator := validators.StringInSlice(crq.Topology, []string{"compute", "node"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Topology can be only compute or node") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Policy == "" { | ||||
| 		return errors.New("validation-error: field Policy can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Policy, []string{"RECOMMENDED", "REQUIRED"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Policy can be only RECOMMENDED or REQUIRED") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Mode == "" { | ||||
| 		return errors.New("validation-error: field Mode can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Mode, []string{"EQ", "NE", "ANY"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Mode can be only EQ, NE or ANY") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Key == "" { | ||||
| 		return errors.New("validation-error: field Key can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Value == "" { | ||||
| 		return errors.New("validation-error: field Value can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AntiAffinityRuleAdd(ctx context.Context, req AntiAffinityRuleAddRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/antiAffinityRuleAdd" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,91 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AntiAffinityRuleRemoveRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	Topology  string `url:"topology"` | ||||
| 	Policy    string `url:"policy"` | ||||
| 	Mode      string `url:"mode"` | ||||
| 	Key       string `url:"key"` | ||||
| 	Value     string `url:"value"` | ||||
| } | ||||
| 
 | ||||
| func (crq AntiAffinityRuleRemoveRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.Topology == "" { | ||||
| 		return errors.New("validation-error: field Topology can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator := validators.StringInSlice(crq.Topology, []string{"compute", "node"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Topology can be only compute or node") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Policy == "" { | ||||
| 		return errors.New("validation-error: field Policy can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Policy, []string{"RECOMMENDED", "REQUIRED"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Policy can be only RECOMMENDED or REQUIRED") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Mode == "" { | ||||
| 		return errors.New("validation-error: field Mode can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	validator = validators.StringInSlice(crq.Mode, []string{"EQ", "NE", "ANY"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Mode can be only EQ, NE or ANY") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Key == "" { | ||||
| 		return errors.New("validation-error: field Key can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Value == "" { | ||||
| 		return errors.New("validation-error: field Value can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AntiAffinityRuleRemove(ctx context.Context, req AntiAffinityRuleRemoveRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/antiAffinityRuleRemove" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,51 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AntiAffinityRulesClearRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq AntiAffinityRulesClearRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AntiAffinityRulesClear(ctx context.Context, req AntiAffinityRulesClearRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/antiAffinityRulesClear" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,56 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AttachGPURequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	VGPUID    uint64 `url:"vgpuId"` | ||||
| } | ||||
| 
 | ||||
| func (crq AttachGPURequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.VGPUID == 0 { | ||||
| 		return errors.New("validation-error: field VGPUID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AttachGPU(ctx context.Context, req AttachGPURequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/attachGpu" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseUint(string(res), 10, 64) | ||||
| 	if err != nil { | ||||
| 		return 0, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AttachPciDeviceRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	DeviceID  uint64 `url:"deviceId"` | ||||
| } | ||||
| 
 | ||||
| func (crq AttachPciDeviceRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DeviceID == 0 { | ||||
| 		return errors.New("validation-error: field DeviceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) AttachPciDevice(ctx context.Context, req AttachPciDeviceRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/attachPciDevice" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type AuditsRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq AuditsRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) Audits(ctx context.Context, req AuditsRequest, options ...opts.DecortOpts) (AuditList, error) { | ||||
| 	if err := req.Validate(); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/cloudapi/compute/audits" | ||||
| 	auditListRaw, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	auditList := AuditList{} | ||||
| 	if err := json.Unmarshal(auditListRaw, &auditList); err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return auditList, nil | ||||
| } | ||||
| @ -0,0 +1,50 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type CDEjectRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq CDEjectRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) CDEject(ctx context.Context, req CDEjectRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/cdEject" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,54 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type CDInsertRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	CDROMID   uint64 `url:"cdromId"` | ||||
| } | ||||
| 
 | ||||
| func (crq CDInsertRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.CDROMID == 0 { | ||||
| 		return errors.New("validation-error: field CDROMID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) CDInsert(ctx context.Context, req CDInsertRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/cdInsert" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,56 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type CloneRequest struct { | ||||
| 	ComputeId         uint64 `url:"computeId"` | ||||
| 	Name              string `url:"name"` | ||||
| 	SnapshotTimestamp uint64 `url:"snapshotTimestamp"` | ||||
| 	SnapshotName      string `url:"snapshotName"` | ||||
| } | ||||
| 
 | ||||
| func (crq CloneRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.Name == "" { | ||||
| 		return errors.New("validation-error: field Name can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) Clone(ctx context.Context, req CloneRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/clone" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseUint(string(res), 10, 64) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,15 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"github.com/rudecs/decort-sdk/interfaces" | ||||
| ) | ||||
| 
 | ||||
| type Compute struct { | ||||
| 	client interfaces.Caller | ||||
| } | ||||
| 
 | ||||
| func New(client interfaces.Caller) *Compute { | ||||
| 	return &Compute{ | ||||
| 		client, | ||||
| 	} | ||||
| } | ||||
| @ -0,0 +1,88 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type CreateTemplateRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	Name      string `url:"name"` | ||||
| 	Async     bool   `url:"async"` | ||||
| } | ||||
| 
 | ||||
| func (crq CreateTemplateRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Name == "" { | ||||
| 		return errors.New("validation-error: field Name can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) CreateTemplate(ctx context.Context, req CreateTemplateRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	req.Async = false | ||||
| 
 | ||||
| 	url := "/compute/createTemplate" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseUint(string(res), 10, 64) | ||||
| 	if err != nil { | ||||
| 		return 0, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) CreateTemplateAsync(ctx context.Context, req CreateTemplateRequest, options ...opts.DecortOpts) (string, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	req.Async = true | ||||
| 
 | ||||
| 	url := "/compute/createTemplate" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	result := strings.ReplaceAll(string(res), "\"", "") | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,52 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DeleteRequest struct { | ||||
| 	ComputeId   uint64 `url:"computeId"` | ||||
| 	Permanently bool   `url:"permanently,omitempty"` | ||||
| 	DetachDisks bool   `url:"detachDisks,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (crq DeleteRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) Delete(ctx context.Context, req DeleteRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/delete" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,52 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DetachGPURequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	VGPUID    int64  `url:"vgpuId,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (crq DetachGPURequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DetachGPU(ctx context.Context, req DetachGPURequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/detachGpu" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DetachPciDeviceRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	DeviceID  uint64 `url:"deviceId"` | ||||
| } | ||||
| 
 | ||||
| func (crq DetachPciDeviceRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DeviceID == 0 { | ||||
| 		return errors.New("validation-error: field DeviceID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DetachPciDevice(ctx context.Context, req DetachPciDeviceRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/detachPciDevice" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,51 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DisableRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq DisableRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) Disable(ctx context.Context, req DisableRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/disable" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,66 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DiskAddRequest struct { | ||||
| 	ComputeId   uint64 `url:"computeId"` | ||||
| 	DiskName    string `url:"diskName"` | ||||
| 	Size        uint64 `url:"size"` | ||||
| 	DiskType    string `url:"diskType,omitempty"` | ||||
| 	SepID       uint64 `url:"sepId,omitempty"` | ||||
| 	Pool        string `url:"pool,omitempty"` | ||||
| 	Description string `url:"desc,omitempty"` | ||||
| 	ImageID     uint64 `url:"imageId,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (crq DiskAddRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Size == 0 { | ||||
| 		return errors.New("validation-error: field Size can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DiskName == "" { | ||||
| 		return errors.New("validation-error: field DiskName can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DiskAdd(ctx context.Context, req DiskAddRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/diskAdd" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseUint(string(res), 10, 64) | ||||
| 	if err != nil { | ||||
| 		return 0, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DiskAttachRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	DiskID    uint64 `url:"diskId"` | ||||
| } | ||||
| 
 | ||||
| func (crq DiskAttachRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DiskID == 0 { | ||||
| 		return errors.New("validation-error: field DiskID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DiskAttach(ctx context.Context, req DiskAttachRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/diskAttach" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,57 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DiskDelRequest struct { | ||||
| 	ComputeId   uint64 `url:"computeId"` | ||||
| 	DiskID      uint64 `url:"diskId"` | ||||
| 	Permanently bool   `url:"permanently"` | ||||
| } | ||||
| 
 | ||||
| func (crq DiskDelRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DiskID == 0 { | ||||
| 		return errors.New("validation-error: field DiskID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DiskDel(ctx context.Context, req DiskDelRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/diskDel" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DiskDetachRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	DiskID    uint64 `url:"diskId"` | ||||
| } | ||||
| 
 | ||||
| func (crq DiskDetachRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DiskID == 0 { | ||||
| 		return errors.New("validation-error: field DiskID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DiskDetach(ctx context.Context, req DiskDetachRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/diskDetach" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,61 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DiskQOSRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	DiskID    uint64 `url:"diskId"` | ||||
| 	Limits    string `url:"limits"` | ||||
| } | ||||
| 
 | ||||
| func (crq DiskQOSRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DiskID == 0 { | ||||
| 		return errors.New("validation-error: field DiskID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Limits == "" { | ||||
| 		return errors.New("validation-error: field Limits can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DiskQOS(ctx context.Context, req DiskQOSRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/diskQos" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,61 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type DiskResizeRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	DiskID    uint64 `url:"diskId"` | ||||
| 	Size      uint64 `url:"size"` | ||||
| } | ||||
| 
 | ||||
| func (crq DiskResizeRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.DiskID == 0 { | ||||
| 		return errors.New("validation-error: field DiskID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Size == 0 { | ||||
| 		return errors.New("validation-error: field Size can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) DiskResize(ctx context.Context, req DiskResizeRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/diskResize" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,51 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type EnableRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq EnableRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) Enable(ctx context.Context, req EnableRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/enable" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, nil | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,52 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq GetRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) Get(ctx context.Context, req GetRequest, options ...opts.DecortOpts) (*ComputeRecord, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/get" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	compute := &ComputeRecord{} | ||||
| 	err = json.Unmarshal(res, compute) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return compute, nil | ||||
| } | ||||
| @ -0,0 +1,52 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetAuditsRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq GetAuditsRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) GetAudits(ctx context.Context, req GetAuditsRequest, options ...opts.DecortOpts) (AuditShortList, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/getAudits" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	auditsList := AuditShortList{} | ||||
| 	err = json.Unmarshal(res, &auditsList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return auditsList, nil | ||||
| } | ||||
| @ -0,0 +1,48 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strings" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetConsoleURLRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq GetConsoleURLRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) GetConsoleURL(ctx context.Context, req GetConsoleURLRequest, options ...opts.DecortOpts) (string, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/getConsoleUrl" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	result := strings.ReplaceAll(string(res), "\"", "") | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,74 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type GetLogRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	Path      string `url:"path"` | ||||
| } | ||||
| 
 | ||||
| func (crq GetLogRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.Path == "" { | ||||
| 		return errors.New("validation-error: field Path can not be empty") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) GetLog(ctx context.Context, req GetLogRequest, options ...opts.DecortOpts) (string, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/getLog" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	return string(res), nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) GetLogGet(ctx context.Context, req GetLogRequest, options ...opts.DecortOpts) (string, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/getLog" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.GET, url, req) | ||||
| 	if err != nil { | ||||
| 		return "", err | ||||
| 	} | ||||
| 
 | ||||
| 	return string(res), nil | ||||
| } | ||||
| @ -0,0 +1,42 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListRequest struct { | ||||
| 	IncludeDeleted bool   `url:"includedeleted,omitempty"` | ||||
| 	Page           uint64 `url:"page,omitempty"` | ||||
| 	Size           uint64 `url:"size,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (c Compute) List(ctx context.Context, req ListRequest, options ...opts.DecortOpts) (ComputeList, error) { | ||||
| 
 | ||||
| 	url := "/compute/list" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	computeList := ComputeList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &computeList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return computeList, nil | ||||
| } | ||||
| @ -0,0 +1,41 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListDeletedRequest struct { | ||||
| 	Page uint64 `url:"page,omitempty"` | ||||
| 	Size uint64 `url:"size,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (c Compute) ListDeleted(ctx context.Context, req ListDeletedRequest, options ...opts.DecortOpts) (ComputeList, error) { | ||||
| 
 | ||||
| 	url := "/compute/listDeleted" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	computeList := ComputeList{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &computeList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return computeList, nil | ||||
| } | ||||
| @ -0,0 +1,53 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListPCIDeviceRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq ListPCIDeviceRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) ListPCIDevice(ctx context.Context, req ListPCIDeviceRequest, options ...opts.DecortOpts) ([]interface{}, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/listPciDevice" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	pciDeviceList := []interface{}{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &pciDeviceList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return pciDeviceList, nil | ||||
| } | ||||
| @ -0,0 +1,53 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type ListVGPURequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq ListVGPURequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) ListVGPU(ctx context.Context, req ListVGPURequest, options ...opts.DecortOpts) ([]interface{}, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/listVgpu" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	pciDeviceList := []interface{}{} | ||||
| 
 | ||||
| 	err = json.Unmarshal(res, &pciDeviceList) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return pciDeviceList, nil | ||||
| } | ||||
| @ -0,0 +1,288 @@ | ||||
| package compute | ||||
| 
 | ||||
| //ACL for compute
 | ||||
| type UserList struct { | ||||
| 	AccountACL ACLList `json:"accountACL"` | ||||
| 	ComputeACL ACLList `json:"computeACL"` | ||||
| 	RGACL      ACLList `json:"rgACL"` | ||||
| } | ||||
| 
 | ||||
| type ACL struct { | ||||
| 	Explicit    bool   `json:"explicit"` | ||||
| 	GUID        string `json:"guid"` | ||||
| 	Rigth       string `json:"right"` | ||||
| 	Status      string `json:"status"` | ||||
| 	Type        string `json:"type"` | ||||
| 	UserGroupId string `json:"userGroupId"` | ||||
| } | ||||
| 
 | ||||
| type ACLList []ACL | ||||
| 
 | ||||
| type SnapshotUsage struct { | ||||
| 	Count     uint64  `json:"count,omitempty"` | ||||
| 	Stored    float64 `json:"stored"` | ||||
| 	Label     string  `json:"label,omitempty"` | ||||
| 	Timestamp uint64  `json:"timestamp,omitempty"` | ||||
| } | ||||
| 
 | ||||
| type SnapshotUsageList []SnapshotUsage | ||||
| 
 | ||||
| type Snapshot struct { | ||||
| 	Disks     []uint64 `json:"disks"` | ||||
| 	GUID      string   `json:"guid"` | ||||
| 	Label     string   `json:"label"` | ||||
| 	Timestamp uint64   `json:"timestamp"` | ||||
| } | ||||
| 
 | ||||
| type SnapshotList []Snapshot | ||||
| 
 | ||||
| type PFW struct { | ||||
| 	ID              uint64 `json:"id"` | ||||
| 	LocalIP         string `json:"localIp"` | ||||
| 	LocalPort       uint64 `json:"localPort"` | ||||
| 	Protocol        string `json:"protocol"` | ||||
| 	PublicPortEnd   uint64 `json:"publicPortEnd"` | ||||
| 	PublicPortStart uint64 `json:"publicPortStart"` | ||||
| 	VMID            uint64 `json:"vmId"` | ||||
| } | ||||
| 
 | ||||
| type PFWList []PFW | ||||
| 
 | ||||
| type AffinityRelations struct { | ||||
| 	OtherNode             []interface{} `json:"otherNode"` | ||||
| 	OtherNodeIndirect     []interface{} `json:"otherNodeIndirect"` | ||||
| 	OtherNodeIndirectSoft []interface{} `json:"otherNodeIndirectSoft"` | ||||
| 	OtherNodeSoft         []interface{} `json:"otherNodeSoft"` | ||||
| 	SameNode              []interface{} `json:"sameNode"` | ||||
| 	SameNodeSoft          []interface{} `json:"sameNodeSoft"` | ||||
| } | ||||
| 
 | ||||
| type NetAttach struct { | ||||
| 	ConnID      uint64   `json:"connId"` | ||||
| 	ConnType    string   `json:"connType"` | ||||
| 	DefGW       string   `json:"defGw"` | ||||
| 	FlipGroupID uint64   `json:"flipgroupId"` | ||||
| 	GUID        string   `json:"guid"` | ||||
| 	IPAddress   string   `json:"ipAddress"` | ||||
| 	ListenSSH   bool     `json:"listenSsh"` | ||||
| 	MAC         string   `json:"mac"` | ||||
| 	Name        string   `json:"name"` | ||||
| 	NetID       uint64   `json:"netId"` | ||||
| 	NetMask     uint64   `json:"netMask"` | ||||
| 	NetType     string   `json:"netType"` | ||||
| 	PCISlot     uint64   `json:"pciSlot"` | ||||
| 	QOS         QOS      `json:"qos"` | ||||
| 	Target      string   `json:"target"` | ||||
| 	Type        string   `json:"type"` | ||||
| 	VNFS        []uint64 `json:"vnfs"` | ||||
| } | ||||
| 
 | ||||
| type Audit struct { | ||||
| 	Call         string  `json:"call"` | ||||
| 	ResponseTime float64 `json:"responsetime"` | ||||
| 	StatusCode   uint64  `json:"statuscode"` | ||||
| 	Timestamp    float64 `json:"timestamp"` | ||||
| 	User         string  `json:"user"` | ||||
| } | ||||
| 
 | ||||
| type AuditList []Audit | ||||
| 
 | ||||
| type AuditShort struct { | ||||
| 	Epoch   float64 `json:"epoch"` | ||||
| 	Message string  `json:"message"` | ||||
| } | ||||
| 
 | ||||
| type AuditShortList []AuditShort | ||||
| 
 | ||||
| type Rule struct { | ||||
| 	GUID     string `json:"guid"` | ||||
| 	Key      string `json:"key"` | ||||
| 	Mode     string `json:"mode"` | ||||
| 	Policy   string `json:"policy"` | ||||
| 	Topology string `json:"topology"` | ||||
| 	Value    string `json:"value"` | ||||
| } | ||||
| 
 | ||||
| type RuleList []Rule | ||||
| 
 | ||||
| type ComputeRecord struct { | ||||
| 	ACL                    UserList               `json:"ACL"` | ||||
| 	AccountID              uint64                 `json:"accountId"` | ||||
| 	AccountName            string                 `json:"accountName"` | ||||
| 	AffinityLabel          string                 `json:"affinityLabel"` | ||||
| 	AffinityRules          RuleList               `json:"affinityRules"` | ||||
| 	AffinityWeight         uint64                 `json:"affinityWeight"` | ||||
| 	AntiAffinityRules      RuleList               `json:"antiAffinityRules"` | ||||
| 	Architecture           string                 `json:"arch"` | ||||
| 	BootOrder              []string               `json:"bootOrder"` | ||||
| 	BootDiskSize           uint64                 `json:"bootdiskSize"` | ||||
| 	CloneReference         uint64                 `json:"cloneReference"` | ||||
| 	Clones                 []uint64               `json:"clones"` | ||||
| 	ComputeCIID            uint64                 `json:"computeciId"` | ||||
| 	CPU                    uint64                 `json:"cpus"` | ||||
| 	CreatedBy              string                 `json:"createdBy"` | ||||
| 	CreatedTime            uint64                 `json:"createdTime"` | ||||
| 	CustomFields           map[string]interface{} `json:"customFields"` | ||||
| 	DeletedBy              string                 `json:"deletedBy"` | ||||
| 	DeletedTime            uint64                 `json:"deletedTime"` | ||||
| 	Description            string                 `json:"desc"` | ||||
| 	Devices                interface{}            `json:"devices"` | ||||
| 	Disks                  ComputeDiskList        `json:"disks"` | ||||
| 	Driver                 string                 `json:"driver"` | ||||
| 	GID                    uint64                 `json:"gid"` | ||||
| 	GUID                   uint64                 `json:"guid"` | ||||
| 	ID                     uint64                 `json:"id"` | ||||
| 	ImageID                uint64                 `json:"imageId"` | ||||
| 	ImageName              string                 `json:"imageName"` | ||||
| 	Intefaces              IntefaceList           `json:"interfaces"` | ||||
| 	LockStatus             string                 `json:"lockStatus"` | ||||
| 	ManagerID              uint64                 `json:"managerId"` | ||||
| 	ManagerType            string                 `json:"managerType"` | ||||
| 	MigrationJob           uint64                 `json:"migrationjob"` | ||||
| 	Milestones             uint64                 `json:"milestones"` | ||||
| 	Name                   string                 `json:"name"` | ||||
| 	NatableVinsID          uint64                 `json:"natableVinsId"` | ||||
| 	NatableVinsIP          string                 `json:"natableVinsIp"` | ||||
| 	NatableVinsName        string                 `json:"natableVinsName"` | ||||
| 	NatableVinsNetwork     string                 `json:"natableVinsNetwork"` | ||||
| 	NatableVinsNetworkName string                 `json:"natableVinsNetworkName"` | ||||
| 	OSUsers                OSUserList             `json:"osUsers"` | ||||
| 	Pinned                 bool                   `json:"pinned"` | ||||
| 	RAM                    uint64                 `json:"ram"` | ||||
| 	ReferenceID            string                 `json:"referenceId"` | ||||
| 	Registered             bool                   `json:"registered"` | ||||
| 	ResName                string                 `json:"resName"` | ||||
| 	RGID                   uint64                 `json:"rgId"` | ||||
| 	RGName                 string                 `json:"rgName"` | ||||
| 	SnapSets               SnapSetList            `json:"snapSets"` | ||||
| 	StatelessSepID         uint64                 `json:"statelessSepId"` | ||||
| 	StatelessSepType       string                 `json:"statelessSepType"` | ||||
| 	Status                 string                 `json:"status"` | ||||
| 	Tags                   map[string]string      `json:"tags"` | ||||
| 	TechStatus             string                 `json:"techStatus"` | ||||
| 	UpdatedBy              string                 `json:"updatedBy"` | ||||
| 	UpdatedTime            uint64                 `json:"updatedTime"` | ||||
| 	UserManaged            bool                   `json:"userManaged"` | ||||
| 	Userdata               interface{}            `json:"userdata"` | ||||
| 	VGPUs                  []uint64               `json:"vgpus"` | ||||
| 	VirtualImageID         uint64                 `json:"virtualImageId"` | ||||
| 	VirtualImageName       string                 `json:"virtualImageName"` | ||||
| } | ||||
| 
 | ||||
| type ComputeList []ComputeRecord | ||||
| 
 | ||||
| type OSUser struct { | ||||
| 	GUID     string `json:"guid"` | ||||
| 	Login    string `json:"login"` | ||||
| 	Password string `json:"password"` | ||||
| 	PubKey   string `json:"pubkey"` | ||||
| } | ||||
| 
 | ||||
| type OSUserList []OSUser | ||||
| 
 | ||||
| type SnapSet struct { | ||||
| 	Disks     []uint64 `json:"disks"` | ||||
| 	GUID      string   `json:"guid"` | ||||
| 	Label     string   `json:"label"` | ||||
| 	Timestamp uint64   `json:"timestamp"` | ||||
| } | ||||
| 
 | ||||
| type SnapSetList []SnapSet | ||||
| 
 | ||||
| type VNFInterface struct { | ||||
| 	ConnId      uint64   `json:"connId"` | ||||
| 	ConnType    string   `json:"connType"` | ||||
| 	DefGW       string   `json:"defGw"` | ||||
| 	FlipGroupId uint64   `json:"flipgroupId"` | ||||
| 	GUID        string   `json:"guid"` | ||||
| 	IPAddress   string   `json:"ipAddress"` | ||||
| 	ListenSSH   bool     `json:"listenSsh"` | ||||
| 	MAC         string   `json:"mac"` | ||||
| 	Name        string   `json:"name"` | ||||
| 	NetId       uint64   `json:"netId"` | ||||
| 	NetMask     uint64   `json:"netMask"` | ||||
| 	NetType     string   `json:"netType"` | ||||
| 	PCISlot     uint64   `json:"pciSlot"` | ||||
| 	QOS         QOS      `json:"qos"` | ||||
| 	Target      string   `json:"target"` | ||||
| 	Type        string   `json:"type"` | ||||
| 	VNFS        []uint64 `json:"vnfs"` | ||||
| } | ||||
| 
 | ||||
| type QOS struct { | ||||
| 	ERate   uint64 `json:"eRate"` | ||||
| 	GUID    string `json:"guid"` | ||||
| 	InBurst uint64 `json:"inBurst"` | ||||
| 	InRate  uint64 `json:"inRate"` | ||||
| } | ||||
| 
 | ||||
| type IntefaceList []VNFInterface | ||||
| 
 | ||||
| type ComputeDiskList []ComputeDisk | ||||
| 
 | ||||
| type ComputeDisk struct { | ||||
| 	Ckey                string                 `json:"_ckey"` | ||||
| 	Acl                 map[string]interface{} `json:"acl"` | ||||
| 	AccountID           int                    `json:"accountId"` | ||||
| 	Bootpartition       uint64                 `json:"bootPartition"` | ||||
| 	CreatedTime         uint64                 `json:"createdTime"` | ||||
| 	DeletedTime         uint64                 `json:"deletedTime"` | ||||
| 	Description         string                 `json:"desc"` | ||||
| 	DestructionTime     uint64                 `json:"destructionTime"` | ||||
| 	DiskPath            string                 `json:"diskPath"` | ||||
| 	GID                 uint64                 `json:"gid"` | ||||
| 	GUID                uint64                 `json:"guid"` | ||||
| 	ID                  uint64                 `json:"id"` | ||||
| 	ImageID             uint64                 `json:"imageId"` | ||||
| 	Images              []uint64               `json:"images"` | ||||
| 	IOTune              IOTune                 `json:"iotune"` | ||||
| 	IQN                 string                 `json:"iqn"` | ||||
| 	Login               string                 `json:"login"` | ||||
| 	Milestones          uint64                 `json:"milestones"` | ||||
| 	Name                string                 `json:"name"` | ||||
| 	Order               uint64                 `json:"order"` | ||||
| 	Params              string                 `json:"params"` | ||||
| 	ParentID            uint64                 `json:"parentId"` | ||||
| 	Passwd              string                 `json:"passwd"` | ||||
| 	PciSlot             uint64                 `json:"pciSlot"` | ||||
| 	Pool                string                 `json:"pool"` | ||||
| 	PurgeTime           uint64                 `json:"purgeTime"` | ||||
| 	RealityDeviceNumber uint64                 `json:"realityDeviceNumber"` | ||||
| 	ResID               string                 `json:"resId"` | ||||
| 	Role                string                 `json:"role"` | ||||
| 	SepID               int                    `json:"sepId"` // NOTE: absent from compute/get output
 | ||||
| 	SizeMax             int                    `json:"sizeMax"` | ||||
| 	SizeUsed            int                    `json:"sizeUsed"` // sum over all snapshots of this disk to report total consumed space
 | ||||
| 	Snapshots           SnapshotExtendList     `json:"snapshots"` | ||||
| 	Status              string                 `json:"status"` | ||||
| 	TechStatus          string                 `json:"techStatus"` | ||||
| 	Type                string                 `json:"type"` | ||||
| 	VMID                int                    `json:"vmid"` | ||||
| } | ||||
| 
 | ||||
| type SnapshotExtend struct { | ||||
| 	Guid        string `json:"guid"` | ||||
| 	Label       string `json:"label"` | ||||
| 	ResId       string `json:"resId"` | ||||
| 	SnapSetGuid string `json:"snapSetGuid"` | ||||
| 	SnapSetTime uint64 `json:"snapSetTime"` | ||||
| 	TimeStamp   uint64 `json:"timestamp"` | ||||
| } | ||||
| 
 | ||||
| type SnapshotExtendList []SnapshotExtend | ||||
| 
 | ||||
| type IOTune struct { | ||||
| 	ReadBytesSec     int `json:"read_bytes_sec"` | ||||
| 	ReadBytesSecMax  int `json:"read_bytes_sec_max"` | ||||
| 	ReadIopsSec      int `json:"read_iops_sec"` | ||||
| 	ReadIopsSecMax   int `json:"read_iops_sec_max"` | ||||
| 	SizeIopsSec      int `json:"size_iops_sec"` | ||||
| 	TotalBytesSec    int `json:"total_bytes_sec"` | ||||
| 	TotalBytesSecMax int `json:"total_bytes_sec_max"` | ||||
| 	TotalIopsSec     int `json:"total_iops_sec"` | ||||
| 	TotalIopsSecMax  int `json:"total_iops_sec_max"` | ||||
| 	WriteBytesSec    int `json:"write_bytes_sec"` | ||||
| 	WriteBytesSecMax int `json:"write_bytes_sec_max"` | ||||
| 	WriteIopsSec     int `json:"write_iops_sec"` | ||||
| 	WriteIopsSecMax  int `json:"write_iops_sec_max"` | ||||
| } | ||||
| @ -0,0 +1,57 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type MoveToRGRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	RGID      uint64 `url:"rgId"` | ||||
| 	Name      string `url:"name,omitempty"` | ||||
| 	Autostart bool   `url:"autostart,omitempty"` | ||||
| 	ForceStop bool   `url:"forceStop,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (crq MoveToRGRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.RGID == 0 { | ||||
| 		return errors.New("validation-error: field RGID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) MoveToRG(ctx context.Context, req MoveToRGRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/moveToRg" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,67 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"encoding/json" | ||||
| 	"errors" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type NetAttachRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	NetType   string `url:"netType"` | ||||
| 	NetID     uint64 `url:"netId"` | ||||
| 	IPAddr    string `url:"ipAddr,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (crq NetAttachRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.NetType == "" { | ||||
| 		return errors.New("validation-error: field NetType can not be empty") | ||||
| 	} | ||||
| 	validator := validators.StringInSlice(crq.NetType, []string{"EXTNET", "VINS"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field NetType can be only EXTNET or VINS") | ||||
| 	} | ||||
| 
 | ||||
| 	if crq.NetID == 0 { | ||||
| 		return errors.New("validation-error: field NetID can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) NetAttach(ctx context.Context, req NetAttachRequest, options ...opts.DecortOpts) (*NetAttach, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/netAttach" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	netAttach := &NetAttach{} | ||||
| 	err = json.Unmarshal(res, netAttach) | ||||
| 	if err != nil { | ||||
| 		return nil, err | ||||
| 	} | ||||
| 
 | ||||
| 	return netAttach, nil | ||||
| } | ||||
| @ -0,0 +1,52 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type NetDetachRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| 	IPAddr    string `url:"ipAddr,omitempty"` | ||||
| 	MAC       string `url:"mac,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (crq NetDetachRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) NetDetach(ctx context.Context, req NetDetachRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/netDetach" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,50 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type PauseRequest struct { | ||||
| 	ComputeId uint64 `url:"computeId"` | ||||
| } | ||||
| 
 | ||||
| func (crq PauseRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) Pause(ctx context.Context, req PauseRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/pause" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, 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,69 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/internal/validators" | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type PFWAddRequest struct { | ||||
| 	ComputeId       uint64 `url:"computeId"` | ||||
| 	PublicPortStart uint64 `url:"publicPortStart"` | ||||
| 	PublicPortEnd   uint64 `url:"publicPortEnd,omitempty"` | ||||
| 	LocalBasePort   uint64 `url:"localBasePort"` | ||||
| 	Proto           string `url:"proto"` | ||||
| } | ||||
| 
 | ||||
| func (crq PFWAddRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.PublicPortStart == 0 { | ||||
| 		return errors.New("validation-error: field PublicPortStart can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.LocalBasePort == 0 { | ||||
| 		return errors.New("validation-error: field LocalBasePort can not be empty or equal to 0") | ||||
| 	} | ||||
| 	if crq.Proto == "" { | ||||
| 		return errors.New("validation-error: field Proto can not be empty") | ||||
| 	} | ||||
| 	validator := validators.StringInSlice(crq.Proto, []string{"tcp", "udp"}) | ||||
| 	if !validator { | ||||
| 		return errors.New("validation-error: field Proto can be only tcp or udp") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) PFWAdd(ctx context.Context, req PFWAddRequest, options ...opts.DecortOpts) (uint64, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/pfwAdd" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseUint(string(res), 10, 64) | ||||
| 	if err != nil { | ||||
| 		return 0, err | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
| @ -0,0 +1,56 @@ | ||||
| package compute | ||||
| 
 | ||||
| import ( | ||||
| 	"context" | ||||
| 	"errors" | ||||
| 	"strconv" | ||||
| 
 | ||||
| 	"github.com/rudecs/decort-sdk/opts" | ||||
| 	"github.com/rudecs/decort-sdk/typed" | ||||
| ) | ||||
| 
 | ||||
| type PFWDelRequest struct { | ||||
| 	ComputeId       uint64 `url:"computeId"` | ||||
| 	PFWId           uint64 `url:"ruleId,omitempty"` | ||||
| 	PublicPortStart uint64 `url:"publicPortStart,omitempty"` | ||||
| 	PublicPortEnd   uint64 `url:"publicPortEnd,omitempty"` | ||||
| 	LocalBasePort   uint64 `url:"localBasePort,omitempty"` | ||||
| 	Proto           string `url:"proto,omitempty"` | ||||
| } | ||||
| 
 | ||||
| func (crq PFWDelRequest) Validate() error { | ||||
| 	if crq.ComputeId == 0 { | ||||
| 		return errors.New("validation-error: field ComputeId can not be empty or equal to 0") | ||||
| 	} | ||||
| 
 | ||||
| 	return nil | ||||
| } | ||||
| 
 | ||||
| func (c Compute) PFWDel(ctx context.Context, req PFWDelRequest, options ...opts.DecortOpts) (bool, error) { | ||||
| 	err := req.Validate() | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	url := "/compute/pfwDel" | ||||
| 	prefix := "/cloudapi" | ||||
| 
 | ||||
| 	option := opts.New(options) | ||||
| 	if option != nil { | ||||
| 		if option.IsAdmin { | ||||
| 			prefix = "/" + option.AdminValue | ||||
| 		} | ||||
| 	} | ||||
| 	url = prefix + url | ||||
| 	res, err := c.client.DecortApiCall(ctx, typed.POST, url, req) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	result, err := strconv.ParseBool(string(res)) | ||||
| 	if err != nil { | ||||
| 		return false, err | ||||
| 	} | ||||
| 
 | ||||
| 	return result, nil | ||||
| } | ||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in new issue