Compare commits

...

5 Commits

Author SHA1 Message Date
asteam
3f21a89e80 v1.10.2 2025-03-11 13:09:17 +03:00
cbce7f434f v1.10.1 2025-02-07 11:11:43 +03:00
e04dc42d2b v1.10.0 2024-12-27 11:35:22 +03:00
asteam
88eb9e8898 v1.9.2 2024-12-04 11:50:22 +03:00
9ec34c6bfc v1.9.1 2024-11-22 12:09:50 +03:00
84 changed files with 1844 additions and 498 deletions

1
.gitignore vendored
View File

@@ -6,4 +6,5 @@ cmd/
tests/platform_upgrade/.env
tests/platform_upgrade/input.json
tests/platform_upgrade/*.txt
tests/platform_upgrade/*.log
*.env

View File

@@ -1,131 +1,13 @@
## Version 1.9.0
## Version 1.10.2
### Feature
### Добавлено
#### account
- Delete field RecursiveDelete in DeleteUserRequest in cloudapi/account and cloudbroker/account
- Add field UniqPools in UpdateRequest in cloudapi/account
- Add field ClearUniqPools in UpdateRequest in cloudbroker/account
- Add field SortBy in listFlipGroups in cloudapi/account
- Change Ratio field from required to optional in SetCPUAllocationRatioRequest in cloudbroker/compute
#### prometheus
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-335 | Группа ручек cloudbroker/prometheus |
#### audit
- Add endpoint Get in cloudapi/audit
- Add endpoint ExportAuditsToFile in cloudbroker/audit
- Delete field Apitask in model RecordAudit in cloudbroker/audit
#### compute
- Add support DPDK network net type in NetAttach endpoints in cloudapi/compute and cloudbroker/compute
- Add field Force in CloneRequest in cloudapi/compute and cloudbroker/compute
- Change TargetStackID field from required to optional (add default 0 value) in PinToStackRequest in cloudbroker/compute
- Change return value type from bool to string in SnapshotDelete in cloudbroker/compute and cloudapi/compute
- Add field StatusCheck in MigrateStorageAbortRequest in cloudbroker/compute
- Add function SnapshotDeleteAsync in cloudapi/compute and cloudbroker/compute
- Add field StackID in ListRequest in cloudbroker/compute
- Add field NodeID in model RecordCompute in cloudbroker/compute
- Add function SetNetConfig in cloudbroker/compute
- Add field MTU in model RecordNetAttach in cloudapi/compute and cloudbroker/compute
- Change Mode field from required to optional in DiskMigrateRequest in cloudapi/compute
- Add field Chipset in model RecordCompute in cloudapi/compute and cloudbroker/compute
- Add field BusNumber in model RecordCompute, ItemComputeDisk, ItemDisk, InfoDisk in cloudapi/compute and cloudbroker/compute
- Add field ImageID in ListRequest in cloudbroker/compute
- Change Mode field from required to optional in DiskMigrateRequest in cloudbroker/compute
- Add field Chipset in ListRequest in cloudbroker/compute
- Add endpoints ChangeIP in cloudapi/compute and cloudbroker/compute
#### disks
- Change drivers field from optional to required in FromPlatformDiskRequest in cloudapi/disks, cloudbroker/disks
#### dpdknet
- Add endpoints List, Get in cloudapi/dpdk
- Add endpoints Create, Delete, Disable Enable, Get, List, Update in cloudbroker/dpdk
#### extnet
- Change StackId field from required to optional in DeviceMigrateRequest in cloudbroker/extnet
#### flipgroup
- Change ClientIDs field from []uint64 to []string in ListRequest, cloudapi/flipgroup
#### grid
- Change PasswordLength field from required to optional (add default 9 value) in SetPasswordPolicyRequest in cloudbroker/grid
- Set Default value (true) in fields Digits and Uppercase in SetPasswordPolicyRequest in cloudbroker/grid
- Add fields ckey, meta in model RecordGrid in cloudbroker/grid
- Change GID field from uint64 to string in ExecuteMaintenanceScriptRequest in cloudbroker/grid
- Add endpoints GetSettings and GetSettingsRaw in cloudbroker/grid
#### group
- Change StackId field from uint64 to string in ListRequest in cloudbroker/group
#### image:
- Change Drivers field from required to optional in CreateCDROMImageRequest in cloudbroker/image
- Add field Enabled in ListRequest in cloudapi/image and cloudbroker/image
- Delete field GID in SyncCreateRequest in cloudbroker/image
- Delete field Permanently in DeleteRequest in cloudapi/image and cloudbroker/image
- Delete field Permanently in DeleteImagesRequest in cloudbroker/image
#### k8s
- Add fields HighlyAvailableLB, AddressVip, ExtnetOnly, WithLB in model RecordK8S in cloudbroker/k8s and cloudapi/k8s
- Change MasterIds field from a slice of string to a slice of integers in DeleteMasterFromGroupRequest in cloudbroker/k8s and cloudapi/k8s
- Add field Chipset in WorkerAddRequest, WorkersGroupAddRequest in cloudapi/k8s, cloudbroker/k8s
- Add field Chipset in CreateRequest in cloudapi/k8s, cloudbroker/k8s
#### kvmx86
- Add support DPDK network interface in Create endpoints in cloudapi/kvmx86 and cloudbroker/kvmx8
- Add field Chipset in CreateRequest, CreateBlankRequest, MassCreateRequest, CreateBlankRequest in cloudapi/kvmx86 and cloudbroker/kvmx86
- Add function MassCreateAsync in cloudbroker/kvmx86
#### lb
- Change ExtNetID field from uint64 to int64 in CreateRequest, ItemLBList, RecordLB in cloudapi/lb, cloudbroker/lb
- Change ExtNetID, VINSID fields from required to optional in CreateRequest in cloudapi/lb
#### node
- Add field Force in EnableRequest in cloudbroker/node
- Add function EnableAsync in cloudbroker/node
#### rg
- Add endpoints removeDefNet in cloudapi/rg and cloudbroker/rg
- Add field ClearUniqPools in UpdateRequest in cloudbroker/rg and cloudapi/rg
- Add field UniqPools in UpdateRequest in cloudapi/rg
- Delete field IPCIDR in CreateRequest in cloudbroker/rg
#### sep
- Add endpoints SharedLockStart and SharedLockStop in cloudbroker/sep
#### user
- Add field GUID in models ItemAudit in cloudapi/user and cloudbroker/user
- Add fields MaxStatusCode and MinStatusCode in GetAuditRequest in cloudapi/user
#### vins
- Add field Computes in model ListVINS in cloudbroker/vins
- Add fields VNFDevId in ListRequest in cloudapi/vins and in ListDeletedRequest in cloudbroker/vins
- Add field MTU, LibvirtSettings in model ItemInterface in cloudapi/vins and cloudbroker/vins
- Add field BusNumber in model ItemInterface in cloudapi/vins and cloudbroker/vins
### Removed
#### common
- The reason field has been deleted everywhere
#### accounts
- The GetConsumption function was removed in cloudapi/account
#### grid
- The CheckVMs function was removed in cloudbroker/grid
- The CreateSystemSpace function was removed in cloudbroker/grid
#### image
- The Permanently field has been removed from DeleteCDROMImageRequest in cloudbroker/image
#### kvmppc
- The group has been completely deleted
#### sizes
- The group has been completely deleted
#### user
- The StatusCode field has been deleted from GetAuditRequest in cloudapi/user
### Bugfix
#### backup
- Fixed RestoreDisksFromBackupRequest in cloudbroker/backup
#### resmon
| Идентификатор<br>задачи | Описание |
| --- | --- |
| BGOS-336 | Группа ручек cloudbroker/resmon |

View File

@@ -14,6 +14,7 @@ Decort SDK - это библиотека, написанная на языке G
- Версия 1.7.х Decort-SDK соответствует 3.8.9 версии платформы
- Версия 1.8.х Decort-SDK соответствует 4.0.0 версии платформы
- Версия 1.9.х Decort-SDK соответствует 4.1.0 версии платформы
- Версия 1.10.х Decort-SDK соответствует 4.2.0 версии платформы
## Оглавление
@@ -141,6 +142,8 @@ go get -u repository.basistech.ru/BASIS/decort-golang-sdk
- `LB` - управление балансировщиками нагрузки;
- `Node` - управление нодами платформы;
- `PCIDevice` - управление устройствами;
- `Prometheus` - получение статистики prometheus;
- `Resmon` - получение статистики resource monitoring;
- `RG` - управление ресурсными группами аккаунта;
- `SEP` - управление storage endpoint (sep);
- `Stack` - получение информации о вычислительных узлах;
@@ -318,6 +321,8 @@ func main() {
- `pkg/cloudbroker/lb` - для `LB`
- `pkg/cloudbroker/node` - для `Node`
- `pkg/cloudbroker/pcidevice` - для `PCIDevice`
- `pkg/cloudbroker/prometheus` - для `Prometheus`
- `pkg/cloudbroker/resmon` - для `Resmon`
- `pkg/cloudbroker/rg` - для `RG`
- `pkg/cloudbroker/sep` - для `SEP`
- `pkg/cloudbroker/stack` - для `Stack`
@@ -504,6 +509,8 @@ func main() {
- `.LB()` - для работы с `LB`
- `.Node()` - для работы с `Node`
- `.PCIDevice()` - для работы с `PCIDevice`
- `.Prometheus()` - для работы с `Prometheus`
- `.Resmon()` - для работы с `Resmon`
- `.RG()` - для работы с `RG`
- `.SEP()` - для работы с `SEP`
- `.Stack()` - для работы с `Stack`

View File

@@ -1,62 +0,0 @@
# Decort SDK
Decort SDK is a library, written in GO (Golang) for interact with the **DECORT** API.
The library contents structures and methods for requesting to an user (cloudapi) and admin (cloudbroker) groups of API.
Also the library have structures for responses.
## Contents
- [Install](#install)
- [API List](#api-list)
- [Examples](#examples)
- [Examples2](#examples2)
## Install
```bash
go get -u repository.basistech.ru/BASIS/decort-golang-sdk
```
## API List
## Examples
```go
package main
import (
"context"
"fmt"
"log"
"repository.basistech.ru/BASIS/decort-golang-sdk/config"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/kvmx86"
)
func main() {
cfg := config.Config{
AppID: "<APPID>",
AppSecret: "<APPSECRET>",
SSOURL: "https://sso.digitalenergy.online",
DecortURL: "https://mr4.digitalenergy.online",
Retries: 5,
}
client := decort.New(cfg)
req := kvmx86.CreateRequest{
RGID: 123,
Name: "compute",
CPU: 4,
RAM: 4096,
ImageID: 321,
}
res, err := client.KVMX86().Create(context.Background(), req)
if err != nil {
log.Fatal(err)
}
fmt.Println(res)
}
```
## Examples2

View File

@@ -372,6 +372,27 @@ func urlValidartor(fl validator.FieldLevel) bool {
return err == nil
}
func chipsetValidator(fe validator.FieldLevel) bool {
fieldValue := fe.Field().String()
return IsInSlice(fieldValue, chipsetValues)
}
func preferredCPUValidator(fe validator.FieldLevel) bool {
fieldSlice, ok := fe.Field().Interface().([]int64)
if !ok {
return false
}
for _, value := range fieldSlice {
if value < -1 {
return false
}
}
return true
}
// ValidateRAM checks if request contains RAM value that is positive integer divisible by divisibility passed.
// It is recommended to pass constants.RAM_DIVISIBILITY as divisility arguement
func ValidateRAM(r interfaces.RequestWithRAM, divisibility uint64) error {

View File

@@ -94,6 +94,9 @@ func errorMessage(fe validator.FieldError) string {
case "mtu":
return fmt.Sprint(prefix, fe.Field(), "must be ", mtuMin, "-", mtuMax)
case "preferredCPU":
return fmt.Sprint(prefix, fe.Field(), "must be equal to or greater than", -1)
case "computex86NetType":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
@@ -299,6 +302,12 @@ func errorMessage(fe validator.FieldError) string {
prefix,
fe.Field(),
joinValues(kvmx86NetTypeValues))
case "chipset":
return fmt.Sprintf("%s %s must be one of the following: %s",
prefix,
fe.Field(),
joinValues(chipsetValues))
}
return fe.Error()

View File

@@ -256,5 +256,15 @@ func registerAllValidators(validate *validator.Validate) error {
return err
}
err = validate.RegisterValidation("chipset", chipsetValidator)
if err != nil {
return err
}
err = validate.RegisterValidation("preferredCPU", preferredCPUValidator)
if err != nil {
return err
}
return nil
}

View File

@@ -62,6 +62,8 @@ var (
ioEventFDValues = []string{"on", "off", "selected by hypervisor"}
eventIDxValues = []string{"on", "off", "selected by hypervisor"}
chipsetValues = []string{"i440fx", "Q35"}
)
const (

View File

@@ -42,7 +42,7 @@ func (c Compute) GetLogGet(ctx context.Context, req GetLogRequest) (string, erro
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi//compute/getLog"
url := "/cloudapi/compute/getLog"
res, err := c.client.DecortApiCall(ctx, http.MethodGet, url, req)
if err != nil {

View File

@@ -299,6 +299,9 @@ type RecordCompute struct {
// List anti affinity rules
AntiAffinityRules ListRules `json:"antiAffinityRules"`
// Auto start when node restarted
AutoStart bool `json:"autoStart"`
// Architecture
Architecture string `json:"arch"`
@@ -425,6 +428,9 @@ type RecordCompute struct {
// Pinned or not
Pinned bool `json:"pinned"`
// PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"`
// Number of RAM
RAM uint64 `json:"ram"`
@@ -484,6 +490,9 @@ type RecordCompute struct {
// Virtual image name
VirtualImageName string `json:"virtualImageName"`
// VNC password
VNCPassword string `json:"vncPasswd"`
}
// Information about libvirt settings
@@ -866,6 +875,9 @@ type ItemCompute struct {
// List anti affinity rules
AntiAffinityRules ListRules `json:"antiAffinityRules"`
// Auto start when node restarted
AutoStart bool `json:"autoStart"`
// Architecture
Architecture string `json:"arch"`
@@ -971,6 +983,9 @@ type ItemCompute struct {
// Pinned or not
Pinned bool `json:"pinned"`
// PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"`
// Number of RAM
RAM uint64 `json:"ram"`

View File

@@ -13,25 +13,30 @@ type PinToStackRequest struct {
// ID of the compute instance
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Auto start when node restarted
// Required: false
// Default: false
AutoStart bool `url:"autoStart" json:"autoStart"`
}
// PinToStack pin compute to current stack
func (c Compute) PinToStack(ctx context.Context, req PinToStackRequest) (uint64, error) {
func (c Compute) PinToStack(ctx context.Context, req PinToStackRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err))
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/compute/pinToStack"
res, err := c.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return 0, err
return false, err
}
result, err := strconv.ParseUint(string(res), 10, 64)
result, err := strconv.ParseBool(string(res))
if err != nil {
return 0, err
return false, err
}
return result, nil

View File

@@ -27,6 +27,10 @@ type ResizeRequest struct {
// Force compute resize
// Required: false
Force bool `url:"force,omitempty" json:"force,omitempty"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// GetRAM returns RAM field values

View File

@@ -37,12 +37,21 @@ type UpdateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node
// Required: false
// Default: false
HPBacked bool `url:"hpBacked" json:"hpBacked"`
// Auto start when node restarted
// Required: false
// Default: false
AutoStart bool `url:"autoStart" json:"autoStart"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// Update updates some properties of the compute

View File

@@ -19,31 +19,6 @@ type ResizeRequest struct {
Size uint64 `url:"size" json:"size" validate:"required"`
}
// Resize resizes disk
// Returns 200 if disk is resized online, else will return 202,
// in that case please stop and start your machine after changing the disk size, for your changes to be reflected.
// This method will not be used for disks, assigned to computes. Only unassigned disks and disks, assigned with "old" virtual machines.
func (d Disks) Resize(ctx context.Context, req ResizeRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/disks/resize"
res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}
// Resize2 resize disk
// Returns 200 if disk is resized online, else will return 202,
// in that case please stop and start your machine after changing the disk size, for your changes to be reflected.

View File

@@ -0,0 +1,50 @@
package extnet
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetRequest struct to get information about reserved address or address poll
type GetReservedIP struct {
// AccountID of the account whose reservation information we want to receive
// Required: true
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
// Field for specifying the ID of extnet whose reservation information we want to receive
// Required: false
ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"`
}
// GetReservedIP gets information about reserved address or address poll as a slice of RecordReservedIP struct
func (e ExtNet) GetReservedIP(ctx context.Context, req GetReservedIP) ([]RecordReservedIP, error) {
res, err := e.GetReservedIPRaw(ctx, req)
if err != nil {
return nil, err
}
reservedIP := make([]RecordReservedIP, 0)
err = json.Unmarshal(res, &reservedIP)
if err != nil {
return nil, err
}
return reservedIP, nil
}
// GetRaw gets detailed information about external network as an array of bytes
func (e ExtNet) GetReservedIPRaw(ctx context.Context, req GetReservedIP) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/extnet/getReservedIp"
res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -87,6 +87,9 @@ type QOS struct {
// Main information about reservations
type ItemReservation struct {
// Account ID
AccountID uint64 `json:"account_id"`
// ClientType
ClientType string `json:"clientType"`
@@ -226,3 +229,20 @@ type RecordExtNet struct {
// VNFs
VNFs VNFs `json:"vnfs"`
}
// Detailed information about reserved address or address pool
type RecordReservedIP struct {
ExtnetID int `json:"extnet_id"`
Reservations []Reservations `json:"reservations"`
}
type Reservations struct {
AccountID int `json:"account_id"`
ClientType string `json:"clientType"`
DomainName string `json:"domainname"`
Hostname string `json:"hostname"`
IP string `json:"ip"`
Mac string `json:"mac"`
Type string `json:"type"`
VMID int `json:"vmId"`
}

View File

@@ -44,7 +44,7 @@ type ListRequest struct {
// Find by list of clientIds
// Required: false
ClientIDs []string `url:"clientIds,omitempty" json:"clientIds,omitempty"`
ClientIDs []uint64 `url:"clientIds,omitempty" json:"clientIds,omitempty"`
// Page number
// Required: false

View File

@@ -165,7 +165,7 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
}
// GetRAM returns RAM field values

View File

@@ -24,7 +24,7 @@ type WorkerAddRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
}
// WorkerAdd adds worker nodes to a Kubernetes cluster

View File

@@ -3,7 +3,6 @@ package k8s
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
@@ -63,7 +62,7 @@ type WorkersGroupAddRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
}
// GetRAM returns RAM field values
@@ -77,23 +76,18 @@ func (r WorkersGroupAddRequest) GetRAM() map[string]uint64 {
}
// WorkersGroupAdd adds workers group to Kubernetes cluster
func (k8s K8S) WorkersGroupAdd(ctx context.Context, req WorkersGroupAddRequest) (uint64, error) {
func (k8s K8S) WorkersGroupAdd(ctx context.Context, req WorkersGroupAddRequest) (string, error) {
err := validators.ValidateRequest(req)
if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err))
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudapi/k8s/workersGroupAdd"
res, err := k8s.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return 0, err
return "", err
}
result, err := strconv.ParseUint(string(res), 10, 64)
if err != nil {
return 0, err
}
return result, nil
return string(res), nil
}

View File

@@ -26,6 +26,11 @@ type Interface struct {
// IP address to assign to this VM when connecting to the specified network
// Required: false
IPAddr string `url:"ipAddr,omitempty" json:"ipAddr,omitempty"`
// Maximum transmission unit, must be 1-9216
// Used only to DPDK net type
// Required: false
MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"`
}
// DataDisk detailed struct for DataDisks field in CreateRequest and CreateBlankRequest
@@ -153,12 +158,16 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node
// Required: false
// Default: false
HPBacked bool `url:"hpBacked" json:"hpBacked"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// GetRAM returns RAM field values

View File

@@ -63,11 +63,15 @@ type CreateBlankRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Text description of this VM
// Required: false
Description string `url:"desc,omitempty" json:"desc,omitempty"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// GetRAM returns RAM field values

View File

@@ -22,12 +22,12 @@ type CreateRequest struct {
Name string `url:"name" json:"name" validate:"required"`
// External network to connect this load balancer to
// Required: true
ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"`
// Required: true, can be 0
ExtNetID uint64 `url:"extnetId" json:"extnetId"`
// Internal network (VINS) to connect this load balancer to
// Required: true
VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"`
// Required: true, can be 0
VINSID uint64 `url:"vinsId" json:"vinsId"`
// Custom sysctl values for Load Balancer instance. Applied on boot
// Required: false

View File

@@ -208,6 +208,9 @@ type RecordVNFDev struct {
// List of VINS IDs
VINS []uint64 `json:"vins"`
// VNC password
VNCPassword string `json:"vncPasswd"`
}
// VNF config
@@ -793,17 +796,8 @@ type ListNATRules struct {
// Main information about reservation
type ItemReservation struct {
// Client type
ClientType string `json:"clientType"`
// Description
Description string `json:"desc"`
// Domain name
DomainName string `json:"domainname"`
// Hostname
Hostname string `json:"hostname"`
// Account ID
AccountID uint64 `json:"account_id"`
// IP
IP string `json:"ip"`

View File

@@ -25,10 +25,6 @@ type StaticRouteAddRequest struct {
// Next hop host, IP address from ViNS ID free IP pool
// Required: true
Gateway string `url:"gateway" json:"gateway" validate:"required"`
// List of Compute IDs which have access to this route
// Required: false
ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"`
}
// StaticRouteAdd adds new static route to ViNS

View File

@@ -9,7 +9,7 @@ import (
func (a Audit) ExportAuditsToFile(ctx context.Context) ([]byte, error) {
url := "/cloudbroker/audit/exportAuditsToFile"
res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, nil)
res, err := a.client.DecortApiCall(ctx, http.MethodGet, url, nil)
if err != nil {
return nil, err
}

View File

@@ -50,6 +50,10 @@ type ListRequest struct {
// Required: false
ImageID uint64 `url:"imageId,omitempty" json:"imageId,omitempty"`
// Find by CD image ID
// Required: false
CDImageID uint64 `url:"cdImageId,omitempty" json:"cdImageId,omitempty"`
// Find by external network name
// Required: false
ExtNetName string `url:"extNetName,omitempty" json:"extNetName,omitempty"`

View File

@@ -624,6 +624,9 @@ type InfoCompute struct {
// Anti affinity rules
AntiAffinityRules ListRules `json:"antiAffinityRules"`
// Auto start when node restarted
AutoStart bool `json:"autoStart"`
// Architecture
Arch string `json:"arch"`
@@ -729,6 +732,9 @@ type InfoCompute struct {
// Pinned
Pinned bool `json:"pinned"`
// PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"`
// Number of RAM
RAM uint64 `json:"ram"`
@@ -846,6 +852,9 @@ type RecordCompute struct {
// Anti affinity rules
AntiAffinityRules ListRules `json:"antiAffinityRules"`
// Auto start when node restarted
AutoStart bool `json:"autoStart"`
// Architecture
Arch string `json:"arch"`
@@ -975,6 +984,9 @@ type RecordCompute struct {
// Pinned
Pinned bool `json:"pinned"`
// PreferredCPU
PreferredCPU []int64 `json:"preferredCpu"`
// Number of RAM
RAM uint64 `json:"ram"`
@@ -1043,6 +1055,9 @@ type RecordCompute struct {
// VirtualImageName
VirtualImageName string `json:"virtualImageName"`
// VNC password
VNCPassword string `json:"vncPasswd"`
}
// Information about of disk IDs

View File

@@ -21,6 +21,11 @@ type PinToStackRequest struct {
// Try to migrate or not if compute in running states
// Required: false
Force bool `url:"force" json:"force"`
// Auto start when node restarted
// Required: false
// Default: false
AutoStart bool `url:"autoStart" json:"autoStart"`
}
// PinToStack pins compute to current stack

View File

@@ -27,6 +27,10 @@ type ResizeRequest struct {
// Force compute resize
// Required: false
Force bool `url:"force,omitempty" json:"force,omitempty"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// GetRAM returns RAM field values

View File

@@ -37,12 +37,21 @@ type UpdateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node
// Required: false
// Default: false
HPBacked bool `url:"hpBacked" json:"hpBacked"`
// Auto start when node restarted
// Required: false
// Default: false
AutoStart bool `url:"autoStart" json:"autoStart"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// Update updates some properties of the compute

View File

@@ -19,31 +19,6 @@ type ResizeRequest struct {
Size uint64 `url:"size" json:"size" validate:"required"`
}
// Resize resizes disk
// Returns 200 if disk is resized online, else will return 202,
// in that case please stop and start your machine after changing the disk size, for your changes to be reflected.
// This method will not be used for disks, assigned to computes. Only unassigned disks and disks, assigned with "old" virtual machines.
func (d Disks) Resize(ctx context.Context, req ResizeRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/disks/resize"
res, err := d.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}
// Resize2 resize disk
// Returns 200 if disk is resized online, else will return 202,
// in that case please stop and start your machine after changing the disk size, for your changes to be reflected.

View File

@@ -0,0 +1,50 @@
package extnet
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// AddReserveIPRequest struct to reserved address or address poll
type AddReserveIPRequest struct {
// AccountID to which a reserved address or address pool is added
// Required: true
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
// ExtNetID from which the address or address pool is reserved
// Required: true
ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"`
// Field for specifying the number of reserved addresses
// Required: false
IPCount uint64 `url:"ipCount,omitempty" json:"ipCount,omitempty"`
// List of IPs for specifying the desired address
// Required: false
IPs []string `url:"ips,omitempty" json:"ips,omitempty"`
}
// AddReserveIP reserves address or address poll to external network for account ID
func (e ExtNet) AddReserveIP(ctx context.Context, req AddReserveIPRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/extnet/addReservedIp"
res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

View File

@@ -0,0 +1,50 @@
package extnet
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// DelReserveIPRequest struct to delete reserved address or address poll
type DelReserveIPRequest struct {
// AccountID to which a reserved address or address pool is added
// Required: true
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
// ExtNetID from which the address or address pool is reserved
// Required: true
ExtNetID uint64 `url:"extnetId" json:"extnetId" validate:"required"`
// Field for specifying the number of reserved addresses
// Required: false
IPCount uint64 `url:"ipCount,omitempty" json:"ipCount,omitempty"`
// List of IPs for specifying the desired address
// Required: false
IPs []string `url:"ips,omitempty" json:"ips,omitempty"`
}
// DelReserveIP deletes reserved address or address poll to external network for account ID
func (e ExtNet) DelReserveIP(ctx context.Context, req DelReserveIPRequest) (bool, error) {
err := validators.ValidateRequest(req)
if err != nil {
return false, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/extnet/delReservedIp"
res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
if err != nil {
return false, err
}
result, err := strconv.ParseBool(string(res))
if err != nil {
return false, err
}
return result, nil
}

View File

@@ -0,0 +1,50 @@
package extnet
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// GetRequest struct to get information about reserved address or address poll
type GetReservedIP struct {
// AccountID of the account whose reservation information we want to receive
// Required: true
AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
// Field for specifying the ID of extnet whose reservation information we want to receive
// Required: false
ExtNetID uint64 `url:"extnetId,omitempty" json:"extnetId,omitempty"`
}
// GetReservedIP gets information about reserved address or address poll as a slice of RecordReservedIP struct
func (e ExtNet) GetReservedIP(ctx context.Context, req GetReservedIP) ([]RecordReservedIP, error) {
res, err := e.GetReservedIPRaw(ctx, req)
if err != nil {
return nil, err
}
reservedIP := make([]RecordReservedIP, 0)
err = json.Unmarshal(res, &reservedIP)
if err != nil {
return nil, err
}
return reservedIP, nil
}
// GetRaw gets detailed information about external network as an array of bytes
func (e ExtNet) GetReservedIPRaw(ctx context.Context, req GetReservedIP) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/extnet/getReservedIp"
res, err := e.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -17,6 +17,9 @@ type QOS struct {
// Main information about reservations
type ItemReservation struct {
// Account ID
AccountID uint64 `json:"account_id"`
// Client type
ClientType string `json:"clientType"`
@@ -238,3 +241,20 @@ type ItemRoutes struct {
//Destination network mask in 255.255.255.255 format
Netmask string `json:"netmask"`
}
// Detailed information about reserved address or address pool
type RecordReservedIP struct {
ExtnetID int `json:"extnet_id"`
Reservations []Reservations `json:"reservations"`
}
type Reservations struct {
AccountID int `json:"account_id"`
ClientType string `json:"clientType"`
DomainName string `json:"domainname"`
Hostname string `json:"hostname"`
IP string `json:"ip"`
Mac string `json:"mac"`
Type string `json:"type"`
VMID int `json:"vmId"`
}

View File

@@ -2,7 +2,6 @@ package grid
import (
"context"
"fmt"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
@@ -39,7 +38,7 @@ func (g Grid) GetDiagnosisGET(ctx context.Context, req GetDiagnosisRequest) (str
return "", validators.ValidationErrors(validators.GetErrors(err))
}
url := fmt.Sprintf("/cloudbroker/grid/getDiagnosis/?gid=%d", req.GID)
url := "/cloudbroker/grid/getDiagnosis"
res, err := g.client.DecortApiCall(ctx, http.MethodGet, url, req)
if err != nil {

View File

@@ -104,6 +104,9 @@ type RecordImage struct {
// Size
Size uint64 `json:"size"`
// SnapshotId
SnapshotID string `json:"snapshotId"`
// Status
Status string `json:"status"`
@@ -227,6 +230,9 @@ type ItemImage struct {
// Size
Size uint64 `json:"size"`
// SnapshotId
SnapshotID string `json:"snapshotId"`
// Status
Status string `json:"status"`

View File

@@ -167,7 +167,7 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
}
// GetRAM returns RAM values

View File

@@ -24,7 +24,7 @@ type WorkerAddRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
}
// WorkerAdd adds worker nodes to a kubernetes cluster

View File

@@ -65,7 +65,7 @@ type WorkersGroupAddRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
}
// GetRAM returns RAM field values

View File

@@ -26,6 +26,11 @@ type Interface struct {
// IP address to assign to this VM when connecting to the specified network
// Required: false
IPAddr string `url:"ipAddr,omitempty" json:"ipAddr,omitempty"`
// Maximum transmission unit, must be 1-9216
// Used only to DPDK net type
// Required: false
MTU uint64 `url:"mtu,omitempty" json:"mtu,omitempty" validate:"omitempty,mtu"`
}
// DataDisk detailed struct for DataDisks field in CreateRequest, CreateBlankRequest and MassCreateRequest
@@ -157,12 +162,16 @@ type CreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Use Huge Pages to allocate RAM of the virtual machine. The system must be pre-configured by allocating Huge Pages on the physical node
// Required: false
// Default: false
HPBacked bool `url:"hpBacked" json:"hpBacked"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// GetRAM returns RAM field values

View File

@@ -67,7 +67,11 @@ type CreateBlankRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
// Recommended isolated CPUs. Field is ignored if compute.cpupin=False or compute.pinned=False
// Required: false
PreferredCPU []int64 `url:"preferredCpu,omitempty" json:"preferredCpu,omitempty" validate:"omitempty,preferredCPU"`
}
// GetRAM returns RAM field values

View File

@@ -78,7 +78,7 @@ type MassCreateRequest struct {
// Type of the emulated system, Q35 or i440fx
// Required: false
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty"`
Chipset string `url:"chipset,omitempty" json:"chipset,omitempty" validate:"omitempty,chipset"`
}
type asyncWrapperMassCreateRequest struct {

View File

@@ -22,12 +22,12 @@ type CreateRequest struct {
Name string `url:"name" json:"name" validate:"required"`
// External network to connect this load balancer to
// Required: true
ExtNetID int64 `url:"extnetId" json:"extnetId" validate:"required"`
// Required: true, can be 0
ExtNetID int64 `url:"extnetId" json:"extnetId"`
// Internal network (VINS) to connect this load balancer to
// Required: true
VINSID uint64 `url:"vinsId" json:"vinsId" validate:"required"`
// Required: true, can be 0
VINSID uint64 `url:"vinsId" json:"vinsId"`
// Start now Load balancer
// Required: true

View File

@@ -11,6 +11,9 @@ type RecordNode struct {
// CPU Allocation Ratio
CPUAllocationRatio float64 `json:"cpu_allocation_ratio"`
// DPDK info
DPDK DPDK `json:"dpdk"`
// GID
GID uint64 `json:"gid"`
@@ -29,6 +32,12 @@ type RecordNode struct {
// NeedReboot
NeedReboot bool `json:"needReboot"`
// Netaddr
NetAddr NetAddr `json:"netaddr"`
// Network mode
NetworkMode string `json:"networkmode"`
// Nic Info
NicInfo ListNicInfo `json:"nicInfo"`
@@ -50,6 +59,18 @@ type RecordNode struct {
// Status
Status string `json:"status"`
// To active
ToActive Role `json:"to_active"`
// To installing
ToInstalling Role `json:"to_installing"`
// To maintenance
ToMaintenance Role `json:"to_maintenance"`
// To restricted
ToRestricted Role `json:"to_restricted"`
// Version
Version string `json:"version"`
}
@@ -122,6 +143,9 @@ type ItemNode struct {
// Description
Description string `json:"description"`
// DPDK
DPDK DPDK `json:"dpdk"`
// GID
GID uint64 `json:"gid"`
@@ -224,6 +248,9 @@ type ItemNode struct {
// Type
Type string `json:"type"`
//UEFI Firmware File
UEFIFirmwareFile string `json:"uefiFirmwareFile"`
// Version
Version string `json:"version"`
}
@@ -314,3 +341,42 @@ type ListNodes struct {
// Entry count
EntryCount uint64 `json:"entryCount"`
}
// Net address
type NetAddr struct {
// Name
Name string `json:"name"`
// IP list backplane1 node
IP []string `json:"ip"`
}
// DPDK info
type DPDK struct {
// Bridges
Bridges Bridges `json:"bridges"`
// hp memory
HPMemory map[string]uint64 `json:"hp_memory"`
// pmd cpu
PMDCPU []uint64 `json:"pmd_cpu"`
}
// Bridges
type Bridges struct {
Backplane1 Backplane1 `json:"backplane1"`
}
// Backplane1
type Backplane1 struct {
Interfaces []string `json:"interfaces"`
NumaNode uint64 `json:"numa_node"`
}
// Role
type Role struct {
Actor string `json:"actor"`
Reason string `json:"reason"`
Time uint64 `json:"time"`
}

View File

@@ -24,6 +24,10 @@ type SetVFsNumberRequest struct {
// Trust
// Required: true
Trust bool `url:"trust" json:"trust" validate:"required"`
// Enable spoof checking
// Required: true
Spoofchk bool `url:"spoofchk" json:"spoofchk" validate:"required"`
}
// SetVFsNumber sets number of VFs for individual NIC on node

View File

@@ -0,0 +1,8 @@
package cloudbroker
import "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/prometheus"
// Accessing the Prometheus method group
func (cb *CloudBroker) Prometheus() *prometheus.Prometheus {
return prometheus.New(cb.client)
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeCPULoadRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Per-second CPU time consumed by Compute in percent, average over the time step specified
func (p Prometheus) ComputeCPULoad(ctx context.Context, req ComputeCPULoadRequest) (*PrometheusData, error) {
res, err := p.ComputeCPULoadRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeCPULoadRaw(ctx context.Context, req ComputeCPULoadRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeCPUload"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,53 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeMemoryAvailableRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
}
// Available Memory
func (p Prometheus) ComputeMemoryAvailable(ctx context.Context, req ComputeMemoryAvailableRequest) (*PrometheusData, error) {
res, err := p.ComputeMemoryAvailableRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeMemoryAvailableRaw(ctx context.Context, req ComputeMemoryAvailableRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeMemoryAvailable"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,53 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeMemoryUnusedRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
}
// Unused Memory
func (p Prometheus) ComputeMemoryUnused(ctx context.Context, req ComputeMemoryUnusedRequest) (*PrometheusData, error) {
res, err := p.ComputeMemoryUnusedRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeMemoryUnusedRaw(ctx context.Context, req ComputeMemoryUnusedRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeMemoryUnused"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,53 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeMemoryUsableRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
}
// Usable Memory
func (p Prometheus) ComputeMemoryUsable(ctx context.Context, req ComputeMemoryUsableRequest) (*PrometheusData, error) {
res, err := p.ComputeMemoryUsableRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeMemoryUsableRaw(ctx context.Context, req ComputeMemoryUsableRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeMemoryUsable"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,53 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeMemoryUsageRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
}
// Memory Usage
func (p Prometheus) ComputeMemoryUsage(ctx context.Context, req ComputeMemoryUsageRequest) (*PrometheusData, error) {
res, err := p.ComputeMemoryUsageRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeMemoryUsageRaw(ctx context.Context, req ComputeMemoryUsageRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeMemoryUsage"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,53 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeMemoryUsedRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
}
// Used Memory
func (p Prometheus) ComputeMemoryUsed(ctx context.Context, req ComputeMemoryUsedRequest) (*PrometheusData, error) {
res, err := p.ComputeMemoryUsedRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeMemoryUsedRaw(ctx context.Context, req ComputeMemoryUsedRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeMemoryUsed"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeReadBytesRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Read Bytes
func (p Prometheus) ComputeReadBytes(ctx context.Context, req ComputeReadBytesRequest) (*PrometheusData, error) {
res, err := p.ComputeReadBytesRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeReadBytesRaw(ctx context.Context, req ComputeReadBytesRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeReadBytes"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeReadRequestsRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Read Requests
func (p Prometheus) ComputeReadRequests(ctx context.Context, req ComputeReadRequestsRequest) (*PrometheusData, error) {
res, err := p.ComputeReadRequestsRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeReadRequestsRaw(ctx context.Context, req ComputeReadRequestsRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeReadRequests"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeReceiveBytesRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Receive Bytes
func (p Prometheus) ComputeReceiveBytes(ctx context.Context, req ComputeReceiveBytesRequest) (*PrometheusData, error) {
res, err := p.ComputeReceiveBytesRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeReceiveBytesRaw(ctx context.Context, req ComputeReceiveBytesRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeReceiveBytes"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeReceivePacketsRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Receive Packets
func (p Prometheus) ComputeReceivePackets(ctx context.Context, req ComputeReceivePacketsRequest) (*PrometheusData, error) {
res, err := p.ComputeReceivePacketsRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeReceivePacketsRaw(ctx context.Context, req ComputeReceivePacketsRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeReceivePackets"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeTransmitBytesRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Transmit Bytes
func (p Prometheus) ComputeTransmitBytes(ctx context.Context, req ComputeTransmitBytesRequest) (*PrometheusData, error) {
res, err := p.ComputeTransmitBytesRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeTransmitBytesRaw(ctx context.Context, req ComputeTransmitBytesRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeTransmitBytes"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeTransmitPacketsRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Transmit Packets
func (p Prometheus) ComputeTransmitPackets(ctx context.Context, req ComputeTransmitPacketsRequest) (*PrometheusData, error) {
res, err := p.ComputeTransmitPacketsRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeTransmitPacketsRaw(ctx context.Context, req ComputeTransmitPacketsRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeTransmitPackets"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeWriteBytesRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Write Bytes
func (p Prometheus) ComputeWriteBytes(ctx context.Context, req ComputeWriteBytesRequest) (*PrometheusData, error) {
res, err := p.ComputeWriteBytesRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeWriteBytesRaw(ctx context.Context, req ComputeWriteBytesRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeWriteBytes"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,57 @@
package prometheus
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type ComputeWriteRequestsRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Time to loads of statistic in seconds
// Required: false
ForLast uint64 `url:"forLast,omitempty" json:"forLast,omitempty"`
// The reading interval in seconds
// Required: true
Step uint64 `url:"step,omitempty" json:"step,omitempty"`
// Number of zeros after the decimal point
// Required: true
DecimalPlaces uint64 `url:"decimalPlaces,omitempty" json:"decimalPlaces,omitempty"`
}
// Write Requests
func (p Prometheus) ComputeWriteRequests(ctx context.Context, req ComputeWriteRequestsRequest) (*PrometheusData, error) {
res, err := p.ComputeWriteRequestsRaw(ctx, req)
if err != nil {
return nil, err
}
info := PrometheusData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (p Prometheus) ComputeWriteRequestsRaw(ctx context.Context, req ComputeWriteRequestsRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/prometheus/computeWriteRequests"
res, err := p.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,13 @@
package prometheus
// PrometheusData represents an array of data points
type PrometheusData []PrometheusPoint
// PrometheusPoint represents a single data point
type PrometheusPoint struct {
// Value of the metric at a specific point in time
Value float64 `json:"value"`
// Timestamp the Unix timestamp.
Timestamp uint64 `json:"timestamp"`
}

View File

@@ -0,0 +1,17 @@
package prometheus
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
)
// Structure for creating request to prometheus
type Prometheus struct {
client interfaces.Caller
}
// Builder for prometheus endpoints
func New(client interfaces.Caller) *Prometheus {
return &Prometheus{
client: client,
}
}

10
pkg/cloudbroker/resmon.go Normal file
View File

@@ -0,0 +1,10 @@
package cloudbroker
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/resmon"
)
// Accessing the Resmon method group
func (cb *CloudBroker) Resmon() *resmon.Resmon {
return resmon.New(cb.client)
}

View File

@@ -0,0 +1,53 @@
package resmon
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type GetByComputeRequest struct {
// Compute ID
// Required: true
ComputeID uint64 `url:"computeId" json:"computeId" validate:"required"`
// Start of time period - unixtime
// Required: false
StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"`
// End of time period - unixtime
// Required: true
EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"`
}
// Get resource monitoring for the specified time period for the concrete compute instance
func (r Resmon) GetByCompute(ctx context.Context, req GetByComputeRequest) (*GetByComputeData, error) {
res, err := r.GetByComputeRaw(ctx, req)
if err != nil {
return nil, err
}
info := GetByComputeData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (r Resmon) GetByComputeRaw(ctx context.Context, req GetByComputeRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/resmon/getByCompute"
res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,49 @@
package resmon
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type GetByComputesRequest struct {
// Start of time period - unixtime
// Required: false
StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"`
// End of time period - unixtime
// Required: true
EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"`
}
// Get compute instances resource monitoring for the specified time period
func (r Resmon) GetByComputes(ctx context.Context, req GetByComputesRequest) (*GetByComputeData, error) {
res, err := r.GetByComputesRaw(ctx, req)
if err != nil {
return nil, err
}
info := GetByComputeData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (r Resmon) GetByComputesRaw(ctx context.Context, req GetByComputesRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/resmon/getByComputes"
res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,49 @@
package resmon
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type GetByGRIDRequest struct {
// Start of time period - unixtime
// Required: false
StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"`
// End of time period - unixtime
// Required: true
EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"`
}
// Get a grid resource monitoring for the specified time period
func (r Resmon) GetByGRID(ctx context.Context, req GetByGRIDRequest) (*GetByGRIDData, error) {
res, err := r.GetByGRIDRaw(ctx, req)
if err != nil {
return nil, err
}
info := GetByGRIDData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (r Resmon) GetByGRIDRaw(ctx context.Context, req GetByGRIDRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/resmon/getByGrid"
res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,53 @@
package resmon
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type GetByStackRequest struct {
// Stack ID
// Required: true
StackID uint64 `url:"stackId" json:"stackId" validate:"required"`
// Start of time period - unixtime
// Required: false
StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"`
// End of time period - unixtime
// Required: true
EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"`
}
// Get a grid resource monitoring for the specified time period
func (r Resmon) GetByStack(ctx context.Context, req GetByStackRequest) (*GetByStackData, error) {
res, err := r.GetByStackRaw(ctx, req)
if err != nil {
return nil, err
}
info := GetByStackData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (r Resmon) GetByStackRaw(ctx context.Context, req GetByStackRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/resmon/getByStack"
res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,49 @@
package resmon
import (
"context"
"encoding/json"
"net/http"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
type GetByStacksRequest struct {
// Start of time period - unixtime
// Required: false
StartTime uint64 `url:"starttime,omitempty" json:"starttime,omitempty"`
// End of time period - unixtime
// Required: true
EndTime uint64 `url:"endtime,omitempty" json:"endtime,omitempty"`
}
// Get a grid resource monitoring for the specified time period
func (r Resmon) GetByStacks(ctx context.Context, req GetByStacksRequest) (*GetByStackData, error) {
res, err := r.GetByStacksRaw(ctx, req)
if err != nil {
return nil, err
}
info := GetByStackData{}
err = json.Unmarshal(res, &info)
if err != nil {
return nil, err
}
return &info, nil
}
// GetRaw gets information about compute as an array of bytes
func (r Resmon) GetByStacksRaw(ctx context.Context, req GetByStacksRequest) ([]byte, error) {
err := validators.ValidateRequest(req)
if err != nil {
return nil, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/resmon/getByStacks"
res, err := r.client.DecortApiCall(ctx, http.MethodPost, url, req)
return res, err
}

View File

@@ -0,0 +1,89 @@
package resmon
// GetByComputeData represents an array of data points
type GetByComputeData []GetByComputePoint
type GetByComputePoint struct {
ID uint64 `json:"id"`
Name string `json:"name"`
ComputeID uint64 `json:"computeId"`
AccountID uint64 `json:"accountId"`
RGID uint64 `json:"rgId"`
Usage ComputeUsage `json:"usage"`
Disks []ItemDisk `json:"disks"`
UID string `json:"uid"`
StackID uint64 `json:"stackId"`
}
type ComputeUsage struct {
VCPUsConsumed uint64 `json:"vcpusConsumed"`
Storage uint64 `json:"storage"`
CPUTime uint64 `json:"cpuTime"`
ExtIPs uint64 `json:"extips"`
RAMConsumed uint64 `json:"ramConsumed"`
VCPUsReserved uint64 `json:"vcpusReserved"`
IsUp uint64 `json:"isUp"`
RAMConsumedReal uint64 `json:"ramConsumedReal"`
RAMReserved uint64 `json:"ramReserved"`
}
type ItemDisk struct {
Pool string `json:"pool"`
ResID string `json:"resId"`
SizeUsed uint64 `json:"sizeUsed"`
SizeMax uint64 `json:"sizeMax"`
}
// GetByGRIDData represents an array of data points
type GetByGRIDData []GetByGRIDPoint
type GetByGRIDPoint struct {
UID string `json:"uid"`
Total ItemTotalByGRID `json:"total"`
Storages map[string]ItemStorage `json:"storages"`
}
type ItemTotalByGRID struct {
StacksCPU uint64 `json:"stacksCPU"`
StorageCapacity uint64 `json:"storageCapacity"`
CPUPower uint64 `json:"cpuPower"`
CPUUtil uint64 `json:"cpuUtil"`
TotalMem uint64 `json:"totalMem"`
ReservedMem uint64 `json:"reservedMem"`
UsedMem uint64 `json:"usedMem"`
FreeMem uint64 `json:"freeMem"`
VCPUConsumed uint64 `json:"vcpuConsumed"`
}
type ItemStorage struct {
CapacityLimit uint64 `json:"capacityLimit"`
Consumed uint64 `json:"consumed"`
Type string `json:"type"`
UID string `json:"uid"`
}
// GetByStackData represents an array of data points
type GetByStackData []GetByStackPoint
type GetByStackPoint struct {
Usage StackUsage `json:"usage"`
CPUInfo CPUinfoByStack `json:"cpuInfo"`
Name string `json:"name"`
ID uint64 `json:"id"`
}
type StackUsage struct {
CPUPower uint64 `json:"cpuPower"`
UsedVCPUs uint64 `json:"usedVcpus"`
PCPU uint64 `json:"pcpu"`
UsedMem uint64 `json:"usedMem"`
CPUUtil uint64 `json:"cpuUtil"`
ReservedMem uint64 `json:"reservedMem"`
FreeMem uint64 `json:"freeMem"`
}
type CPUinfoByStack struct {
ClockSpeed uint64 `json:"clockSpeed"`
CoreCount uint64 `json:"coreCount"`
PhysCount uint64 `json:"physCount"`
}

View File

@@ -0,0 +1,15 @@
package resmon
import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
// Structure for creating request to resource monitoring
type Resmon struct {
client interfaces.Caller
}
// Builder for resource monitoring endpoints
func New(client interfaces.Caller) *Resmon {
return &Resmon{
client: client,
}
}

View File

@@ -25,7 +25,7 @@ type Total struct {
}
type ByPool struct {
// Disk count
DiskCount uint64 `json:"disk_count"`
@@ -101,12 +101,6 @@ type SEPConfig map[string]interface{}
// Detailed information about SEP
type RecordSEP struct {
// CKey
CKey string `json:"_ckey"`
// Meta
Meta []interface{} `json:"_meta"`
// Config
Config SEPConfig `json:"config"`
@@ -128,6 +122,9 @@ type RecordSEP struct {
// Milestones
Milestones uint64 `json:"milestones"`
// MultipathNum
MultipathNum uint64 `json:"multipathNum"`
// Name
Name string `json:"name"`

View File

@@ -1,38 +0,0 @@
package sep
import (
"context"
"net/http"
"strconv"
"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
)
// UpdateCapacityLimitRequest struct to update capacity limits
type UpdateCapacityLimitRequest struct {
// Storage endpoint provider ID
// Required: true
SEPID uint64 `url:"sep_id" json:"sep_id" validate:"required"`
}
// UpdateCapacityLimit updates SEP capacity limit
func (s SEP) UpdateCapacityLimit(ctx context.Context, req UpdateCapacityLimitRequest) (uint64, error) {
err := validators.ValidateRequest(req)
if err != nil {
return 0, validators.ValidationErrors(validators.GetErrors(err))
}
url := "/cloudbroker/sep/updateCapacityLimit"
res, err := s.client.DecortApiCall(ctx, http.MethodPost, 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
}

View File

@@ -30,6 +30,10 @@ type ListRequest struct {
// Required: false
RGID uint64 `url:"rgId,omitempty" json:"rgId,omitempty"`
// Find by id node
// Required: false
NID uint64 `url:"nid,omitempty" json:"nid,omitempty"`
// Find by account id
// Required: false
AccountID uint64 `url:"accountId,omitempty" json:"accountId,omitempty"`

View File

@@ -235,21 +235,15 @@ type VNFDev struct {
//List of VINS IDs
VINS []uint64 `json:"vins"`
// VNC password
VNCPassword string `json:"vncPasswd"`
}
// Main information about reservation
type ItemReservation struct {
// Client type
ClientType string `json:"clientType"`
// Description
Description string `json:"desc"`
// Domain name
DomainName string `json:"domainname"`
// Hostname
Hostname string `json:"hostname"`
// Account ID
AccountID uint64 `json:"account_id"`
// IP
IP string `json:"ip"`

View File

@@ -25,10 +25,6 @@ type StaticRouteAddRequest struct {
// Next hop host, IP address from ViNS ID free IP pool
// Required: true
Gateway string `url:"gateway" json:"gateway" validate:"required"`
// List of Compute IDs which have access to this route
// Required: false
ComputeIds []uint64 `url:"computeIds,omitempty" json:"computeIds,omitempty"`
}
// StaticRouteAdd adds new static route to ViNS

View File

@@ -20,6 +20,7 @@ import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/stack"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/tasks"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/vins"
node_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/node"
account_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/account"
audit_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/audit"
@@ -563,6 +564,26 @@ func TestGetListCloudbroker(t *testing.T) {
t.Errorf("Can not test LB get because LB list is empty")
}
// Node
// List
bytes, err = client.CloudBroker().Node().ListRaw(context.Background(), node_cb.ListRequest{})
if err != nil {
t.Error(err)
}
testLogs = append(testLogs, getResult("Node list", bytes, node_cb.ListNodes{}, t))
// Get
listNode, _ := client.CloudBroker().Node().List(context.Background(), node_cb.ListRequest{})
if len(listLB.Data) > 0 {
id := listNode.Data[0].ID
bytes, err = client.CloudBroker().Node().GetRaw(context.Background(), node_cb.GetRequest{NID: id})
if err != nil {
t.Error(err)
}
testLogs = append(testLogs, getResult("Node get", bytes, node_cb.RecordNode{}, t))
} else {
t.Errorf("Can not test Node get because LB list is empty")
}
// Pcidevice
// List
bytes, err = client.CloudBroker().PCIDevice().ListRaw(context.Background(), pcidevice_cb.ListRequest{})
@@ -684,10 +705,19 @@ func TestGetAllPaths(t *testing.T) {
decortUrls := readUrlFromDir("../../pkg", len(jsonUrls))
result := getMissingDecortUrls(jsonUrls, decortUrls)
if len(result) > 0 {
errorText := fmt.Sprintf("Below API handlers (%d in total) need to be added to decort-sdk:\n", len(result))
for _, r := range result {
missingUrls := getMissingDecortUrls(jsonUrls, decortUrls)
if len(missingUrls) > 0 {
errorText := fmt.Sprintf("Below API handlers (%d in total) need to be added to decort-sdk:\n", len(missingUrls))
for _, r := range missingUrls {
errorText += fmt.Sprintln(r)
}
t.Errorf(errorText)
}
deprecatedUrls := getDeprecatedDecortUrls(jsonUrls, decortUrls)
if len(deprecatedUrls) > 0 {
errorText := fmt.Sprintf("Below API handlers (%d in total) need to be delete to decort-sdk:\n", len(deprecatedUrls))
for _, r := range deprecatedUrls {
errorText += fmt.Sprintln(r)
}
t.Errorf(errorText)

View File

@@ -2,9 +2,11 @@ package test
import (
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/account"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/audit"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/bservice"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/compute"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/disks"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/dpdknet"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/extnet"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/flipgroup"
"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/image"
@@ -27,6 +29,7 @@ import (
backup_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/backup"
compute_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/compute"
disks_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/disks"
dpdknet_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/dpdknet"
extnet_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/extnet"
flipgroup_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/flipgroup"
grid_cb "repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudbroker/grid"
@@ -78,6 +81,9 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/account/update": account.UpdateRequest{},
"/restmachine/cloudapi/account/updateUser": account.UpdateUserRequest{},
//audit
"/restmachine/cloudapi/audit/get": audit.GetRequest{},
//bservice
"/restmachine/cloudapi/bservice/create": bservice.CreateRequest{},
"/restmachine/cloudapi/bservice/delete": bservice.DeleteRequest{},
@@ -107,7 +113,6 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/bservice/stop": bservice.StopRequest{},
// compute
"/restmachine/cloudapi/compute/affinityGroupCheckStart": compute.AffinityGroupCheckStartRequest{},
"/restmachine/cloudapi/compute/affinityLabelRemove": compute.AffinityLabelRemoveRequest{},
"/restmachine/cloudapi/compute/affinityLabelSet": compute.AffinityLabelSetRequest{},
"/restmachine/cloudapi/compute/affinityRelations": compute.AffinityRelationsRequest{},
@@ -203,7 +208,6 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/disks/replicationStatus": disks.ReplicationStatusRequest{},
"/restmachine/cloudapi/disks/replicationStop": disks.ReplicationStopRequest{},
"/restmachine/cloudapi/disks/replicationSuspend": disks.ReplicationSuspendRequest{},
"/restmachine/cloudapi/disks/resize": disks.ResizeRequest{},
"/restmachine/cloudapi/disks/resize2": disks.ResizeRequest{},
"/restmachine/cloudapi/disks/restore": disks.RestoreRequest{},
"/restmachine/cloudapi/disks/search": disks.SearchRequest{},
@@ -212,11 +216,16 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/disks/snapshotRollback": disks.SnapshotRollbackRequest{},
"/restmachine/cloudapi/disks/unshare": disks.UnshareRequest{},
//dpdknet
"/restmachine/cloudapi/dpdknet/get": dpdknet.GetRequest{},
"/restmachine/cloudapi/dpdknet/list": dpdknet.ListRequest{},
// extnet
"/restmachine/cloudapi/extnet/get": extnet.GetRequest{},
"/restmachine/cloudapi/extnet/getDefault": EmptyStruct{},
"/restmachine/cloudapi/extnet/list": extnet.ListRequest{},
"/restmachine/cloudapi/extnet/listComputes": extnet.ListComputesRequest{},
"/restmachine/cloudapi/extnet/get": extnet.GetRequest{},
"/restmachine/cloudapi/extnet/getDefault": EmptyStruct{},
"/restmachine/cloudapi/extnet/getReservedIp": extnet.GetReservedIP{},
"/restmachine/cloudapi/extnet/list": extnet.ListRequest{},
"/restmachine/cloudapi/extnet/listComputes": extnet.ListComputesRequest{},
// flipgroup
"/restmachine/cloudapi/flipgroup/computeAdd": flipgroup.ComputeAddRequest{},
@@ -353,34 +362,32 @@ func getRequestsMapCloudAPI() map[string]interface{} {
"/restmachine/cloudapi/vfpool/list": vfpool.ListRequest{},
// vins
"/restmachine/cloudapi/vins/audits": vins.AuditsRequest{},
"/restmachine/cloudapi/vins/createInAccount": vins.CreateInAccountRequest{},
"/restmachine/cloudapi/vins/createInRG": vins.CreateInRGRequest{},
"/restmachine/cloudapi/vins/delete": vins.DeleteRequest{},
"/restmachine/cloudapi/vins/disable": vins.DisableEnableRequest{},
"/restmachine/cloudapi/vins/dnsApply": vins.DNSApplyRequest{},
"/restmachine/cloudapi/vins/enable": vins.DisableEnableRequest{},
"/restmachine/cloudapi/vins/extNetConnect": vins.ExtNetConnectRequest{},
"/restmachine/cloudapi/vins/extNetDisconnect": vins.ExtNetDisconnectRequest{},
"/restmachine/cloudapi/vins/extNetList": vins.ExtNetListRequest{},
"/restmachine/cloudapi/vins/get": vins.GetRequest{},
"/restmachine/cloudapi/vins/ipList": vins.IPListRequest{},
"/restmachine/cloudapi/vins/ipRelease": vins.IPReleaseRequest{},
"/restmachine/cloudapi/vins/ipReserve": vins.IPReserveRequest{},
"/restmachine/cloudapi/vins/list": vins.ListRequest{},
"/restmachine/cloudapi/vins/listDeleted": vins.ListDeletedRequest{},
"/restmachine/cloudapi/vins/natRuleAdd": vins.NATRuleAddRequest{},
"/restmachine/cloudapi/vins/natRuleDel": vins.NATRuleDelRequest{},
"/restmachine/cloudapi/vins/natRuleList": vins.NATRuleListRequest{},
"/restmachine/cloudapi/vins/restore": vins.RestoreRequest{},
"/restmachine/cloudapi/vins/search": vins.SearchRequest{},
"/restmachine/cloudapi/vins/staticRouteAccessGrant": vins.StaticRouteAccessGrantRequest{},
"/restmachine/cloudapi/vins/staticRouteAccessRevoke": vins.StaticRouteAccessRevokeRequest{},
"/restmachine/cloudapi/vins/staticRouteAdd": vins.StaticRouteAddRequest{},
"/restmachine/cloudapi/vins/staticRouteDel": vins.StaticRouteDelRequest{},
"/restmachine/cloudapi/vins/staticRouteList": vins.StaticRouteListRequest{},
"/restmachine/cloudapi/vins/vnfdevRedeploy": vins.VNFDevRedeployRequest{},
"/restmachine/cloudapi/vins/vnfdevRestart": vins.VNFDevRestartRequest{},
"/restmachine/cloudapi/vins/audits": vins.AuditsRequest{},
"/restmachine/cloudapi/vins/createInAccount": vins.CreateInAccountRequest{},
"/restmachine/cloudapi/vins/createInRG": vins.CreateInRGRequest{},
"/restmachine/cloudapi/vins/delete": vins.DeleteRequest{},
"/restmachine/cloudapi/vins/disable": vins.DisableEnableRequest{},
"/restmachine/cloudapi/vins/dnsApply": vins.DNSApplyRequest{},
"/restmachine/cloudapi/vins/enable": vins.DisableEnableRequest{},
"/restmachine/cloudapi/vins/extNetConnect": vins.ExtNetConnectRequest{},
"/restmachine/cloudapi/vins/extNetDisconnect": vins.ExtNetDisconnectRequest{},
"/restmachine/cloudapi/vins/extNetList": vins.ExtNetListRequest{},
"/restmachine/cloudapi/vins/get": vins.GetRequest{},
"/restmachine/cloudapi/vins/ipList": vins.IPListRequest{},
"/restmachine/cloudapi/vins/ipRelease": vins.IPReleaseRequest{},
"/restmachine/cloudapi/vins/ipReserve": vins.IPReserveRequest{},
"/restmachine/cloudapi/vins/list": vins.ListRequest{},
"/restmachine/cloudapi/vins/listDeleted": vins.ListDeletedRequest{},
"/restmachine/cloudapi/vins/natRuleAdd": vins.NATRuleAddRequest{},
"/restmachine/cloudapi/vins/natRuleDel": vins.NATRuleDelRequest{},
"/restmachine/cloudapi/vins/natRuleList": vins.NATRuleListRequest{},
"/restmachine/cloudapi/vins/restore": vins.RestoreRequest{},
"/restmachine/cloudapi/vins/search": vins.SearchRequest{},
"/restmachine/cloudapi/vins/staticRouteAdd": vins.StaticRouteAddRequest{},
"/restmachine/cloudapi/vins/staticRouteDel": vins.StaticRouteDelRequest{},
"/restmachine/cloudapi/vins/staticRouteList": vins.StaticRouteListRequest{},
"/restmachine/cloudapi/vins/vnfdevRedeploy": vins.VNFDevRedeployRequest{},
"/restmachine/cloudapi/vins/vnfdevRestart": vins.VNFDevRestartRequest{},
}
}
@@ -576,12 +583,23 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/disks/snapshotRollback": disks_cb.SnapshotRollbackRequest{},
"/restmachine/cloudbroker/disks/unshare": disks_cb.UnshareRequest{},
// dpdknet
"/restmachine/cloudbroker/dpdknet/get": dpdknet_cb.GetRequest{},
"/restmachine/cloudbroker/dpdknet/list": dpdknet_cb.ListRequest{},
"/restmachine/cloudbroker/dpdknet/disable": dpdknet_cb.DisableRequest{},
"/restmachine/cloudbroker/dpdknet/enable": dpdknet_cb.EnableRequest{},
"/restmachine/cloudbroker/dpdknet/create": dpdknet_cb.CreateRequest{},
"/restmachine/cloudbroker/dpdknet/update": dpdknet_cb.UpdateRequest{},
"/restmachine/cloudbroker/dpdknet/delete": dpdknet_cb.DeleteRequest{},
// extnet
"/restmachine/cloudbroker/extnet/accessAdd": extnet_cb.AccessAddRequest{},
"/restmachine/cloudbroker/extnet/accessRemove": extnet_cb.AccessRemoveRequest{},
"/restmachine/cloudbroker/extnet/addReservedIp": extnet_cb.AddReserveIPRequest{},
"/restmachine/cloudbroker/extnet/create": extnet_cb.CreateRequest{},
"/restmachine/cloudbroker/extnet/dnsApply": extnet_cb.DNSApplyRequest{},
"/restmachine/cloudbroker/extnet/defaultQosUpdate": extnet_cb.DefaultQOSUpdateRequest{},
"/restmachine/cloudbroker/extnet/delReservedIp": extnet_cb.DelReserveIPRequest{},
"/restmachine/cloudbroker/extnet/destroy": extnet_cb.DestroyRequest{},
"/restmachine/cloudbroker/extnet/deviceDeploy": extnet_cb.DeviceDeployRequest{},
"/restmachine/cloudbroker/extnet/deviceMigrate": extnet_cb.DeviceMigrateRequest{},
@@ -591,6 +609,7 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/extnet/enable": extnet_cb.EnableRequest{},
"/restmachine/cloudbroker/extnet/get": extnet_cb.GetRequest{},
"/restmachine/cloudbroker/extnet/getDefault": EmptyStruct{},
"/restmachine/cloudbroker/extnet/getReservedIp": extnet.GetReservedIP{},
"/restmachine/cloudbroker/extnet/ipsExclude": extnet_cb.IPsExcludeRequest{},
"/restmachine/cloudbroker/extnet/ipsExcludeRange": extnet_cb.IPsExcludeRangeRequest{},
"/restmachine/cloudbroker/extnet/ipsInclude": extnet_cb.IPsExcludeRequest{},
@@ -794,30 +813,29 @@ func getRequestsMapCloudbroker() map[string]interface{} {
"/restmachine/cloudbroker/rg/usage": rg_cb.UsageRequest{},
// sep
"/restmachine/cloudbroker/sep/accessGrant": sep_cb.AccessGrantRequest{},
"/restmachine/cloudbroker/sep/accessGrantToPool": sep_cb.AccessGrantToPoolRequest{},
"/restmachine/cloudbroker/sep/accessRevoke": sep_cb.AccessRevokeRequest{},
"/restmachine/cloudbroker/sep/accessRevokeToPool": sep_cb.AccessRevokeToPoolRequest{},
"/restmachine/cloudbroker/sep/addConsumerNodes": sep_cb.AddConsumerNodesRequest{},
"/restmachine/cloudbroker/sep/addPool": sep_cb.AddPoolRequest{},
"/restmachine/cloudbroker/sep/addProviderNodes": sep_cb.AddProviderNodesRequest{},
"/restmachine/cloudbroker/sep/configFieldEdit": sep_cb.ConfigFieldEditRequest{},
"/restmachine/cloudbroker/sep/configInsert": sep_cb.ConfigInsertRequest{},
"/restmachine/cloudbroker/sep/configValidate": sep_cb.ConfigValidateRequest{},
"/restmachine/cloudbroker/sep/consumption": sep_cb.ConsumptionRequest{},
"/restmachine/cloudbroker/sep/create": sep_cb.CreateRequest{},
"/restmachine/cloudbroker/sep/decommission": sep_cb.DecommissionRequest{},
"/restmachine/cloudbroker/sep/delConsumerNodes": sep_cb.DelConsumerNodesRequest{},
"/restmachine/cloudbroker/sep/delete": sep_cb.DeleteRequest{},
"/restmachine/cloudbroker/sep/delPool": sep_cb.DelPoolRequest{},
"/restmachine/cloudbroker/sep/disable": sep_cb.DisableRequest{},
"/restmachine/cloudbroker/sep/diskList": sep_cb.DiskListRequest{},
"/restmachine/cloudbroker/sep/enable": sep_cb.EnableRequest{},
"/restmachine/cloudbroker/sep/get": sep_cb.GetRequest{},
"/restmachine/cloudbroker/sep/getConfig": sep_cb.GetConfigRequest{},
"/restmachine/cloudbroker/sep/getPool": sep_cb.GetPoolRequest{},
"/restmachine/cloudbroker/sep/list": sep_cb.ListRequest{},
"/restmachine/cloudbroker/sep/updateCapacityLimit": sep_cb.UpdateCapacityLimitRequest{},
"/restmachine/cloudbroker/sep/accessGrant": sep_cb.AccessGrantRequest{},
"/restmachine/cloudbroker/sep/accessGrantToPool": sep_cb.AccessGrantToPoolRequest{},
"/restmachine/cloudbroker/sep/accessRevoke": sep_cb.AccessRevokeRequest{},
"/restmachine/cloudbroker/sep/accessRevokeToPool": sep_cb.AccessRevokeToPoolRequest{},
"/restmachine/cloudbroker/sep/addConsumerNodes": sep_cb.AddConsumerNodesRequest{},
"/restmachine/cloudbroker/sep/addPool": sep_cb.AddPoolRequest{},
"/restmachine/cloudbroker/sep/addProviderNodes": sep_cb.AddProviderNodesRequest{},
"/restmachine/cloudbroker/sep/configFieldEdit": sep_cb.ConfigFieldEditRequest{},
"/restmachine/cloudbroker/sep/configInsert": sep_cb.ConfigInsertRequest{},
"/restmachine/cloudbroker/sep/configValidate": sep_cb.ConfigValidateRequest{},
"/restmachine/cloudbroker/sep/consumption": sep_cb.ConsumptionRequest{},
"/restmachine/cloudbroker/sep/create": sep_cb.CreateRequest{},
"/restmachine/cloudbroker/sep/decommission": sep_cb.DecommissionRequest{},
"/restmachine/cloudbroker/sep/delConsumerNodes": sep_cb.DelConsumerNodesRequest{},
"/restmachine/cloudbroker/sep/delete": sep_cb.DeleteRequest{},
"/restmachine/cloudbroker/sep/delPool": sep_cb.DelPoolRequest{},
"/restmachine/cloudbroker/sep/disable": sep_cb.DisableRequest{},
"/restmachine/cloudbroker/sep/diskList": sep_cb.DiskListRequest{},
"/restmachine/cloudbroker/sep/enable": sep_cb.EnableRequest{},
"/restmachine/cloudbroker/sep/get": sep_cb.GetRequest{},
"/restmachine/cloudbroker/sep/getConfig": sep_cb.GetConfigRequest{},
"/restmachine/cloudbroker/sep/getPool": sep_cb.GetPoolRequest{},
"/restmachine/cloudbroker/sep/list": sep_cb.ListRequest{},
// stack
"/restmachine/cloudbroker/stack/get": stack_cb.GetRequest{},

View File

@@ -1,31 +0,0 @@
[
"Account list: OK",
"Account get: OK",
"",
"Bservice get: OK",
"Compute list: \nPlatform has these fields that golang struct doesn't: [lb mgmt_target mgmt_mac mgmt_slot]\n",
"Compute get: \nPlatform has these fields that golang struct doesn't: [mgmt_target mgmt_mac mgmt_slot lb]\n",
"Disk list: OK",
"Disk get: OK",
"",
"ExtNet get: OK",
"FLIPGroup list: OK",
"",
"",
"Image get: \nPlatform has these fields that golang struct doesn't: [12]\n",
"K8CI list: OK",
"",
"K8S list: OK",
"K8S get: OK",
"LB list: \nPlatform has these fields that golang struct doesn't: [fs.inotify.max_queued_events kernel.kptr_restrict net.ipv4.tcp_congestion_control]\n",
"LB get: \nPlatform has these fields that golang struct doesn't: [kernel.kptr_restrict net.ipv4.tcp_congestion_control fs.inotify.max_queued_events]\n",
"Locations list: OK",
"RG list: OK",
"",
"Sizes list: OK",
"",
"Tasks list: \nPlatform has these fields that golang struct doesn't: [completed guid stage updateTime updatedTime auditId error log status]\n",
"Tasks get: \nPlatform has these fields that golang struct doesn't: [updatedTime completed error updateTime auditId stage status log]\n",
"",
"VINS get: OK"
]

View File

@@ -1,34 +0,0 @@
[
"Account list: OK",
"Account get: OK",
"",
"Audit get: OK",
"Compute list: \nPlatform has these fields that golang struct doesn't: [disks]\n",
"Compute get: OK",
"Disk list: \nPlatform has these fields that golang struct doesn't: [machineId machineName sepType devicename]\n",
"Disk get: \nPlatform has these fields that golang struct doesn't: [devicename sepType updatedBy]\n",
"ExtNet list: OK",
"ExtNet get: OK",
"FLIPGroup list: OK",
"",
"Grid list: \nPlatform has these fields that golang struct doesn't: [1 90 380 1 90 380]\n",
"Grid get: OK",
"Image list: OK",
"Image get: OK",
"K8CI list: \nPlatform has these fields that golang struct doesn't: [createdTime]\n",
"K8CI get: OK",
"K8S list: OK",
"K8S get: OK",
"LB list: OK",
"LB get: OK",
"Pcidevice list: OK",
"RG list: OK",
"RG get: OK",
"SEP list: \nPlatform has these fields that golang struct doesn't: [protocol disk_max_size format name name_prefix pools]\n",
"SEP get: \nPlatform has these fields that golang struct doesn't: [format name name_prefix pools protocol disk_max_size]\n",
"Stack list: OK",
"Stack get: OK",
"Tasks list: \nPlatform has these fields that golang struct doesn't: [stage status error log auditId completed updateTime guid]\n",
"",
"VINS get: \nPlatform has these fields that golang struct doesn't: [computes config config config]\n"
]

View File

@@ -1,14 +0,0 @@
[
"Path /cloudapi/compute/antiAffinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]",
"Path /cloudapi/user/setData has following errors: [Field data has different required parameters on the platform and in golang structure]",
"Path /cloudapi/compute/affinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]",
"Path /cloudapi/compute/createTemplate has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]",
"Path /cloudapi/k8s/create has following errors: [Field oidcCertificate has different type parameters on the platform and in golang structure]",
"Path /cloudapi/disks/fromPlatformDisk has following errors: [Platform (14) and golang structure (13) have different amount of fields. Field drivers has different type parameters on the platform and in golang structure Platform has field asyncMode that golang structure doesn't]",
"Path /cloudapi/compute/affinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]",
"Path /cloudapi/compute/antiAffinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]",
"Path /cloudapi/compute/createTemplateFromBlank has following errors: [Platform (11) and golang structure (10) have different amount of fields. Platform has field asyncMode that golang structure doesn't]",
"Path /cloudapi/lb/create has following errors: [Field extnetId has different required parameters on the platform and in golang structure Field vinsId has different required parameters on the platform and in golang structure]",
"Path /cloudapi/image/list has following errors: [Field size has different type parameters on the platform and in golang structure]",
"Path /cloudapi/compute/snapshotDelete has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]"
]

View File

@@ -1 +0,0 @@
["Path /cloudbroker/compute/createTemplate has following errors: [Platform (4) and golang structure (3) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/backup/createDisksBackup has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/compute/affinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/apiaccess/update has following errors: [Platform has field apis that golang structure doesn't]","Path /cloudbroker/compute/antiAffinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/compute/snapshotDelete has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/backup/restoreDiskFromBackup has following errors: [Platform (5) and golang structure (4) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/backup/createDiskBackup has following errors: [Platform (4) and golang structure (3) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/compute/createTemplateFromBlank has following errors: [Platform (11) and golang structure (10) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/account/setCpuAllocationRatio has following errors: [Field ratio has different required parameters on the platform and in golang structure]","Path /cloudbroker/disks/fromPlatformDisk has following errors: [Platform (14) and golang structure (13) have different amount of fields. Field drivers has different type parameters on the platform and in golang structure Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/lb/create has following errors: [Field extnetId has different required parameters on the platform and in golang structure Field vinsId has different required parameters on the platform and in golang structure]","Path /cloudbroker/stack/setCpuAllocationRatio has following errors: [Field ratio has different required parameters on the platform and in golang structure]","Path /cloudbroker/backup/deleteDiskBackup has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/image/updateNodes has following errors: [Field enabledStacks has different type parameters on the platform and in golang structure]","Path /cloudbroker/stack/setMemAllocationRatio has following errors: [Field ratio has different required parameters on the platform and in golang structure]","Path /cloudbroker/compute/antiAffinityRuleAdd has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/k8s/create has following errors: [Field oidcCertificate has different type parameters on the platform and in golang structure]","Path /cloudbroker/backup/restoreDisksFromBackup has following errors: [Platform (3) and golang structure (2) have different amount of fields. Platform has field disks that golang structure doesn't Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/node/enable has following errors: [Platform (4) and golang structure (3) have different amount of fields. Platform has field asyncMode that golang structure doesn't]","Path /cloudbroker/compute/affinityRuleRemove has following errors: [Field value has different required parameters on the platform and in golang structure]","Path /cloudbroker/image/list has following errors: [Field size has different type parameters on the platform and in golang structure]"]

View File

@@ -15,10 +15,14 @@ var DEPRECATED_GROUPS = []string{
"//cloudbroker/pgpu/",
"/cloudapi/gpu/",
"/cloudapi/portforwarding/",
"/cloudapi/account/create",
"/cloudapi/account/listVMs",
"/cloudapi/account/listCS",
"/cloudapi/account/getStats",
"/cloudapi/vgpu/list",
"/cloudapi/compute/affinityGroupCheckStart",
"/cloudapi/vins/staticRouteAccessGrant",
"/cloudapi/vins/staticRouteAccessRevoke",
"/cloudbroker/account/listVMs",
"/cloudbroker/account/listCS",
@@ -42,6 +46,9 @@ var DEPRECATED_GROUPS = []string{
"/cloudbroker/iaas/",
"/cloudbroker/diagnostics/",
"/cloudbroker/milestones/",
"/cloudbroker/compute/affinityGroupCheckStart",
"/cloudbroker/vins/staticRouteAccessGrant",
"/cloudbroker/vins/staticRouteAccessRevoke",
}
// getUrlsFromBytes converts bytes to array of urls strings
@@ -95,6 +102,26 @@ func getMissingDecortUrls(jsonUrls, decortUrls []string) []string {
return result
}
// getMissingDecortUrls returns array of url strings that are present in json swagger docs and absent in decort-sdk handlers.
func getDeprecatedDecortUrls(jsonUrls, decortUrls []string) []string {
result := make([]string, 0, len(decortUrls))
for _, decortUrl := range decortUrls {
var found bool
for _, jsonUrl := range jsonUrls {
if jsonUrl == decortUrl {
found = true
break
}
}
if !found && validateUrlFromJson(decortUrl) {
result = append(result, decortUrl)
}
}
return result
}
// readUrlFromDir reads all url addresses from given directory and its subdirectories and subfiles and returns array of urls found. Capacity will
func readUrlFromDir(dirName string, capacity int) []string {
result := make([]string, 0, capacity)