Compare commits
	
		
			1 Commits 
		
	
	
		
			main
			...
			1.5.9branc
		
	
	| Author | SHA1 | Date | 
|---|---|---|
| 
							
							
								
									
								
								 | 
						082f577e17 | 2 years ago | 
@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					# 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
 | 
				
			||||||
@ -1,106 +0,0 @@
 | 
				
			|||||||
package decortsdk
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"context"
 | 
					 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"errors"
 | 
					 | 
				
			||||||
	"fmt"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
	"strings"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/internal/constants"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type CheckInfo struct {
 | 
					 | 
				
			||||||
	Version string `json:"version"`
 | 
					 | 
				
			||||||
	Build   uint64 `json:"build"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const versionURL = "/system/info/version"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (de DecortClient) Check() (*CheckInfo, error) {
 | 
					 | 
				
			||||||
	res, err := de.DecortApiCall(context.Background(), http.MethodGet, versionURL, nil)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	info := CheckInfo{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = json.Unmarshal([]byte(strings.Replace(strings.Trim(string(res), `"`), "\\", "", -1)), &info)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		var v string
 | 
					 | 
				
			||||||
		json.Unmarshal([]byte(res), &v)
 | 
					 | 
				
			||||||
		if _, exists := constants.VersionMap[v]; exists {
 | 
					 | 
				
			||||||
			info.Version = v
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			return nil, fmt.Errorf("platform version isn't supported")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if v, ok := constants.VersionMap[info.Version]; ok {
 | 
					 | 
				
			||||||
		if v == "-" {
 | 
					 | 
				
			||||||
			return &info, nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return nil, errors.New(fmt.Sprintf("SDK don't support platform version %s, please use %s SDK version", info.Version, v))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil, errors.New(fmt.Sprintf("platform version %s isn't supported", info.Version))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (bvs BVSDecortClient) Check() (*CheckInfo, error) {
 | 
					 | 
				
			||||||
	res, err := bvs.DecortApiCall(context.Background(), http.MethodGet, versionURL, nil)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	info := CheckInfo{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = json.Unmarshal([]byte(strings.Replace(strings.Trim(string(res), `"`), "\\", "", -1)), &info)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		var v string
 | 
					 | 
				
			||||||
		json.Unmarshal([]byte(res), &v)
 | 
					 | 
				
			||||||
		if _, exists := constants.VersionMap[v]; exists {
 | 
					 | 
				
			||||||
			info.Version = v
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			return nil, fmt.Errorf("platform version isn't supported")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if v, ok := constants.VersionMap[info.Version]; ok {
 | 
					 | 
				
			||||||
		if v == "-" {
 | 
					 | 
				
			||||||
			return &info, nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return nil, errors.New(fmt.Sprintf("SDK don't support platform version %s, please use %s SDK version", info.Version, v))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil, errors.New(fmt.Sprintf("platform version %s isn't supported", info.Version))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (ldc LegacyDecortClient) Check() (*CheckInfo, error) {
 | 
					 | 
				
			||||||
	res, err := ldc.DecortApiCall(context.Background(), http.MethodGet, versionURL, nil)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	info := CheckInfo{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = json.Unmarshal([]byte(strings.Replace(strings.Trim(string(res), `"`), "\\", "", -1)), &info)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		var v string
 | 
					 | 
				
			||||||
		json.Unmarshal([]byte(res), &v)
 | 
					 | 
				
			||||||
		if _, exists := constants.VersionMap[v]; exists {
 | 
					 | 
				
			||||||
			info.Version = v
 | 
					 | 
				
			||||||
		} else {
 | 
					 | 
				
			||||||
			return nil, fmt.Errorf("platform version isn't supported")
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if v, ok := constants.VersionMap[info.Version]; ok {
 | 
					 | 
				
			||||||
		if v == "-" {
 | 
					 | 
				
			||||||
			return &info, nil
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		return nil, errors.New(fmt.Sprintf("SDK don't support platform version %s, please use %s SDK version", info.Version, v))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return nil, errors.New(fmt.Sprintf("platform version %s isn't supported", info.Version))
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,216 +0,0 @@
 | 
				
			|||||||
package config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"os"
 | 
					 | 
				
			||||||
	"time"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"gopkg.in/yaml.v3"
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/internal/serialization"
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type BVSConfig struct {
 | 
					 | 
				
			||||||
	// ServiceAccount username
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	// Example : "osh_mikoev"
 | 
					 | 
				
			||||||
	Username string `json:"username" yaml:"username" validate:"required"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// ServiceAccount password
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	// Example: "[1o>hYkjnJr)HI78q7t&#%8Lm"
 | 
					 | 
				
			||||||
	Password string `json:"password" yaml:"password" validate:"required"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Domain name
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	// Example: "dynamix"
 | 
					 | 
				
			||||||
	Domain string `json:"domain" yaml:"domain" validate:"required"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Application (client) identifier for authorization
 | 
					 | 
				
			||||||
	// in the cloud platform controller in oauth2 mode.
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	// Example: "ewqfrvea7s890avw804389qwguf234h0otfi3w4eiu"
 | 
					 | 
				
			||||||
	AppID string `json:"appId" yaml:"appId" validate:"required"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Application (client) secret code for authorization
 | 
					 | 
				
			||||||
	// in the cloud platform controller in oauth2 mode.
 | 
					 | 
				
			||||||
	// Example: "frvet09rvesfis0c9erv9fsov0vsdfi09ovds0f"
 | 
					 | 
				
			||||||
	AppSecret string `json:"appSecret" yaml:"appSecret" validate:"required"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Platform authentication service address
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	// Example: "https://sso.digitalenergy.online"
 | 
					 | 
				
			||||||
	SSOURL string `json:"ssoUrl" yaml:"ssoUrl" validate:"url"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// The address of the platform on which the actions are planned
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	// Example: "https://mr4.digitalenergy.online"
 | 
					 | 
				
			||||||
	DecortURL string `json:"decortUrl" yaml:"decortUrl" validate:"url"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// JWT platform token
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	// Example: "qwqwdfwv68979we0q9bfv7e9sbvd89798qrwv97ff"
 | 
					 | 
				
			||||||
	Token Token `json:"token" yaml:"token"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Amount platform request attempts
 | 
					 | 
				
			||||||
	// Default value: 5
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	Retries uint64 `json:"retries" yaml:"retries"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Skip verify
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	SSLSkipVerify bool `json:"sslSkipVerify" yaml:"sslSkipVerify"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// HTTP client timeout, unlimited if left empty
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	Timeout Duration `json:"timeout" yaml:"timeout"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// The path of the configuration file entry
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	PathCfg string `json:"path_cfg" yaml:"path_cfg"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// The path of the token file entry
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	PathToken string `json:"path_token" yaml:"path_token"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// The number of minutes before the expiration of the token, a refresh will be made
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	TimeToRefresh int64 `json:"timeToRefresh" yaml:"timeToRefresh"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type Token struct {
 | 
					 | 
				
			||||||
	// AccessToken is the token that authorizes and authenticates
 | 
					 | 
				
			||||||
	// the requests.
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	AccessToken string `json:"access_token" yaml:"access_token"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// TokenType is the type of token.
 | 
					 | 
				
			||||||
	// The Type method returns either this or "Bearer", the default.
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	TokenType string `json:"token_type" yaml:"token_type"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// RefreshToken is a token that's used by the application
 | 
					 | 
				
			||||||
	// (as opposed to the user) to refresh the access token
 | 
					 | 
				
			||||||
	// if it expires.
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	RefreshToken string `json:"refresh_token" yaml:"refresh_token"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Expiry is the optional expiration time of the access token.
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	Expiry time.Time `json:"expiry" yaml:"expiry"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// SetTimeout is used to set HTTP client timeout.
 | 
					 | 
				
			||||||
func (c *BVSConfig) SetTimeout(dur time.Duration) {
 | 
					 | 
				
			||||||
	c.Timeout = Duration(dur)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ParseConfigJSON parses Config from specified JSON-formatted file.
 | 
					 | 
				
			||||||
func ParseConfigBVSJSON(path string) (BVSConfig, error) {
 | 
					 | 
				
			||||||
	file, err := os.ReadFile(path)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return BVSConfig{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var config BVSConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = json.Unmarshal(file, &config)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return BVSConfig{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = validators.ValidateConfig(config)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return BVSConfig{}, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return config, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ParseConfigJSON parses Token from specified JSON-formatted file.
 | 
					 | 
				
			||||||
func ParseTokenBVSJSON(path string) (Token, error) {
 | 
					 | 
				
			||||||
	file, err := os.ReadFile(path)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return Token{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var token Token
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = json.Unmarshal(file, &token)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return Token{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = validators.ValidateConfig(token)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return Token{}, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return token, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ParseTokenBVSYAML parses Token from specified YAML-formatted file.
 | 
					 | 
				
			||||||
func ParseTokenBVSYAML(path string) (Token, error) {
 | 
					 | 
				
			||||||
	file, err := os.ReadFile(path)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return Token{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var token Token
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = yaml.Unmarshal(file, &token)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return Token{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = validators.ValidateConfig(token)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return Token{}, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return token, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ParseConfigYAML parses Config from specified YAML-formatted file.
 | 
					 | 
				
			||||||
func ParseConfigBVSYAML(path string) (BVSConfig, error) {
 | 
					 | 
				
			||||||
	file, err := os.ReadFile(path)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return BVSConfig{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var config BVSConfig
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = yaml.Unmarshal(file, &config)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return BVSConfig{}, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = validators.ValidateConfig(config)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return BVSConfig{}, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return config, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (t Token) Serialize(params ...string) (serialization.Serialized, error) {
 | 
					 | 
				
			||||||
	if len(params) > 1 {
 | 
					 | 
				
			||||||
		prefix := params[0]
 | 
					 | 
				
			||||||
		indent := params[1]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return json.MarshalIndent(t, prefix, indent)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return json.Marshal(t)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (c BVSConfig) Serialize(params ...string) (serialization.Serialized, error) {
 | 
					 | 
				
			||||||
	if len(params) > 1 {
 | 
					 | 
				
			||||||
		prefix := params[0]
 | 
					 | 
				
			||||||
		indent := params[1]
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
		return json.MarshalIndent(c, prefix, indent)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return json.Marshal(c)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,8 +0,0 @@
 | 
				
			|||||||
package config
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// UniversalConfig combines configurations for different types of clients
 | 
					 | 
				
			||||||
type UniversalConfig struct {
 | 
					 | 
				
			||||||
	Decs3oConfig *Config       `json:"decs3oConfig,omitempty" yaml:"decs3oConfig,omitempty"`
 | 
					 | 
				
			||||||
	BVSConfig    *BVSConfig    `json:"bvsConfig,omitempty" yaml:"bvsConfig,omitempty"`
 | 
					 | 
				
			||||||
	LegacyConfig *LegacyConfig `json:"legacyConfig,omitempty" yaml:"legacyConfig,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,21 +1,19 @@
 | 
				
			|||||||
module repository.basistech.ru/BASIS/decort-golang-sdk
 | 
					module repository.basistech.ru/BASIS/decort-golang-sdk
 | 
				
			||||||
 | 
					
 | 
				
			||||||
go 1.24.0
 | 
					go 1.20
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	github.com/go-playground/validator/v10 v10.28.0
 | 
						github.com/go-playground/validator/v10 v10.11.2
 | 
				
			||||||
	github.com/google/go-querystring v1.1.0
 | 
						github.com/google/go-querystring v1.1.0
 | 
				
			||||||
	github.com/joho/godotenv v1.5.1
 | 
					 | 
				
			||||||
	gopkg.in/yaml.v3 v3.0.1
 | 
						gopkg.in/yaml.v3 v3.0.1
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
require (
 | 
					require (
 | 
				
			||||||
	github.com/gabriel-vasile/mimetype v1.4.10 // indirect
 | 
					 | 
				
			||||||
	github.com/go-playground/locales v0.14.1 // indirect
 | 
						github.com/go-playground/locales v0.14.1 // indirect
 | 
				
			||||||
	github.com/go-playground/universal-translator v0.18.1 // indirect
 | 
						github.com/go-playground/universal-translator v0.18.1 // indirect
 | 
				
			||||||
	github.com/google/go-cmp v0.5.9 // indirect
 | 
						github.com/kr/text v0.2.0 // indirect
 | 
				
			||||||
	github.com/leodido/go-urn v1.4.0 // indirect
 | 
						github.com/leodido/go-urn v1.2.1 // indirect
 | 
				
			||||||
	golang.org/x/crypto v0.42.0 // indirect
 | 
						golang.org/x/crypto v0.5.0 // indirect
 | 
				
			||||||
	golang.org/x/sys v0.36.0 // indirect
 | 
						golang.org/x/sys v0.4.0 // indirect
 | 
				
			||||||
	golang.org/x/text v0.29.0 // indirect
 | 
						golang.org/x/text v0.6.0 // indirect
 | 
				
			||||||
)
 | 
					)
 | 
				
			||||||
 | 
				
			|||||||
@ -1,7 +0,0 @@
 | 
				
			|||||||
package interfaces
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Interface to valiate RAM values
 | 
					 | 
				
			||||||
type RequestWithRAM interface {
 | 
					 | 
				
			||||||
	// GetRAM returns RAM values
 | 
					 | 
				
			||||||
	GetRAM() map[string]uint64
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,36 +0,0 @@
 | 
				
			|||||||
package constants
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	RESTMACHINE = "/restmachine"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
const (
 | 
					 | 
				
			||||||
	MIMEJSON              = "application/json"
 | 
					 | 
				
			||||||
	MIMEHTML              = "text/html"
 | 
					 | 
				
			||||||
	MIMEXML               = "application/xml"
 | 
					 | 
				
			||||||
	MIMEXML2              = "text/xml"
 | 
					 | 
				
			||||||
	MIMEPlain             = "text/plain"
 | 
					 | 
				
			||||||
	MIMEPOSTForm          = "application/x-www-form-urlencoded"
 | 
					 | 
				
			||||||
	MIMEMultipartPOSTForm = "multipart/form-data"
 | 
					 | 
				
			||||||
	MIMEPROTOBUF          = "application/x-protobuf"
 | 
					 | 
				
			||||||
	MIMEMSGPACK           = "application/x-msgpack"
 | 
					 | 
				
			||||||
	MIMEMSGPACK2          = "application/msgpack"
 | 
					 | 
				
			||||||
	MIMEYAML              = "application/x-yaml"
 | 
					 | 
				
			||||||
	MIMEYAML2             = "application/yaml"
 | 
					 | 
				
			||||||
	MIMETOML              = "application/toml"
 | 
					 | 
				
			||||||
	MIMESTREAM            = "application/octet-stream"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var FileName = map[string]string{
 | 
					 | 
				
			||||||
	"OidcCertificate": "ca.crt",
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var K8sValues = []string{"labels", "taints", "annotations, additionalSANs"}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var VersionMap = map[string]string{
 | 
					 | 
				
			||||||
	"4.4.0": "-",
 | 
					 | 
				
			||||||
	"4.3.0": "-",
 | 
					 | 
				
			||||||
	"4.2.0": "-",
 | 
					 | 
				
			||||||
	"4.1.1": "-",
 | 
					 | 
				
			||||||
	"4.1.0": "-",
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,41 +0,0 @@
 | 
				
			|||||||
package multierror
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func Join(errs ...error) error {
 | 
					 | 
				
			||||||
	n := 0
 | 
					 | 
				
			||||||
	for _, err := range errs {
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			n++
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	if n == 0 {
 | 
					 | 
				
			||||||
		return nil
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	e := &joinError{
 | 
					 | 
				
			||||||
		errs: make([]error, 0, n),
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	for _, err := range errs {
 | 
					 | 
				
			||||||
		if err != nil {
 | 
					 | 
				
			||||||
			e.errs = append(e.errs, err)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return e
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
type joinError struct {
 | 
					 | 
				
			||||||
	errs []error
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (e *joinError) Error() string {
 | 
					 | 
				
			||||||
	var b []byte
 | 
					 | 
				
			||||||
	for i, err := range e.errs {
 | 
					 | 
				
			||||||
		if i > 0 {
 | 
					 | 
				
			||||||
			b = append(b, '\n')
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
		b = append(b, err.Error()...)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return string(b)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func (e *joinError) Unwrap() []error {
 | 
					 | 
				
			||||||
	return e.errs
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -0,0 +1,77 @@
 | 
				
			|||||||
 | 
					package account
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
						"strconv"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Request struct for creating account
 | 
				
			||||||
 | 
					type CreateRequest struct {
 | 
				
			||||||
 | 
						// Display name
 | 
				
			||||||
 | 
						// Required: true
 | 
				
			||||||
 | 
						Name string `url:"name" json:"name" validate:"required"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Name of the account
 | 
				
			||||||
 | 
						// Required: true
 | 
				
			||||||
 | 
						Username string `url:"username" json:"username" validate:"required"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Email
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						EmailAddress string `url:"emailaddress,omitempty" json:"emailaddress,omitempty" validate:"omitempty,email"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Max size of memory in MB
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						MaxMemoryCapacity int64 `url:"maxMemoryCapacity,omitempty" json:"maxMemoryCapacity,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Max size of aggregated vdisks in GB
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						MaxVDiskCapacity int64 `url:"maxVDiskCapacity,omitempty" json:"maxVDiskCapacity,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Max number of CPU cores
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						MaxCPUCapacity int64 `url:"maxCPUCapacity,omitempty" json:"maxCPUCapacity,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Max sent/received network transfer peering
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						MaxNetworkPeerTransfer int64 `url:"maxNetworkPeerTransfer,omitempty" json:"maxNetworkPeerTransfer,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Max number of assigned public IPs
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						MaxNumPublicIP int64 `url:"maxNumPublicIP,omitempty" json:"maxNumPublicIP,omitempty"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// If true send emails when a user is granted access to resources
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						SendAccessEmails bool `url:"sendAccessEmails" json:"sendAccessEmails"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Limit (positive) or disable (0) GPU resources
 | 
				
			||||||
 | 
						// Required: false
 | 
				
			||||||
 | 
						GPUUnits int64 `url:"gpu_units,omitempty" json:"gpu_units,omitempty"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Create creates account
 | 
				
			||||||
 | 
					// Setting a cloud unit maximum to -1 or empty will not put any restrictions on the resource
 | 
				
			||||||
 | 
					func (a Account) Create(ctx context.Context, req CreateRequest) (uint64, error) {
 | 
				
			||||||
 | 
						err := validators.ValidateRequest(req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							for _, validationError := range validators.GetErrors(err) {
 | 
				
			||||||
 | 
								return 0, validators.ValidationError(validationError)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						url := "/cloudapi/account/create"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res, err := a.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
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -0,0 +1,62 @@
 | 
				
			|||||||
 | 
					package account
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"context"
 | 
				
			||||||
 | 
						"net/http"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// Request struct for download the resources tracking files for an account
 | 
				
			||||||
 | 
					type GetConsumptionRequest struct {
 | 
				
			||||||
 | 
						// ID an account
 | 
				
			||||||
 | 
						// Required: true
 | 
				
			||||||
 | 
						AccountID uint64 `url:"accountId" json:"accountId" validate:"required"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Epoch represents the start time
 | 
				
			||||||
 | 
						// Required: true
 | 
				
			||||||
 | 
						Start uint64 `url:"start" json:"start" validate:"required"`
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Epoch represents the end time
 | 
				
			||||||
 | 
						// Required: true
 | 
				
			||||||
 | 
						End uint64 `url:"end" json:"end" validate:"required"`
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetConsumption downloads the resources tracking files for an account within a given period
 | 
				
			||||||
 | 
					func (a Account) GetConsumption(ctx context.Context, req GetConsumptionRequest) (string, error) {
 | 
				
			||||||
 | 
						err := validators.ValidateRequest(req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							for _, validationError := range validators.GetErrors(err) {
 | 
				
			||||||
 | 
								return "", validators.ValidationError(validationError)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						url := "/cloudapi/account/getConsumption"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return string(res), nil
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// GetConsumptionGet downloads the resources tracking files for an account within a given period
 | 
				
			||||||
 | 
					func (a Account) GetConsumptionGet(ctx context.Context, req GetConsumptionRequest) (string, error) {
 | 
				
			||||||
 | 
						err := validators.ValidateRequest(req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							for _, validationError := range validators.GetErrors(err) {
 | 
				
			||||||
 | 
								return "", validators.ValidationError(validationError)
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						url := "/cloudapi/account/getConsumption"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						res, err := a.client.DecortApiCall(ctx, http.MethodGet, url, req)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							return "", err
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return string(res), nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@ -1,73 +0,0 @@
 | 
				
			|||||||
package account
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of AccountIDs from ListAccounts struct
 | 
					 | 
				
			||||||
func (la ListAccounts) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(la.Data))
 | 
					 | 
				
			||||||
	for _, acc := range la.Data {
 | 
					 | 
				
			||||||
		res = append(res, acc.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of ComputeIDs from ListComputes struct
 | 
					 | 
				
			||||||
func (lc ListComputes) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(lc.Data))
 | 
					 | 
				
			||||||
	for _, c := range lc.Data {
 | 
					 | 
				
			||||||
		res = append(res, c.ComputeID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of DiskIDs from ListDisks struct
 | 
					 | 
				
			||||||
func (ld ListDisks) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(ld.Data))
 | 
					 | 
				
			||||||
	for _, d := range ld.Data {
 | 
					 | 
				
			||||||
		res = append(res, d.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of FLIPGroupIDs from ListFLIPGroups struct
 | 
					 | 
				
			||||||
func (fg ListFLIPGroups) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(fg.Data))
 | 
					 | 
				
			||||||
	for _, g := range fg.Data {
 | 
					 | 
				
			||||||
		res = append(res, g.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of AccountIDs from ListResourceConsumption struct
 | 
					 | 
				
			||||||
func (rc ListResourceConsumption) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(rc.Data))
 | 
					 | 
				
			||||||
	for _, r := range rc.Data {
 | 
					 | 
				
			||||||
		res = append(res, r.AccountID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of RGIDs from ListRG struct
 | 
					 | 
				
			||||||
func (rg ListRG) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(rg.Data))
 | 
					 | 
				
			||||||
	for _, g := range rg.Data {
 | 
					 | 
				
			||||||
		res = append(res, g.RGID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of TemplateIDs from ListTemplates struct
 | 
					 | 
				
			||||||
func (lt ListTemplates) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(lt.Data))
 | 
					 | 
				
			||||||
	for _, t := range lt.Data {
 | 
					 | 
				
			||||||
		res = append(res, t.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of VINSIDs from ListVINS struct
 | 
					 | 
				
			||||||
func (lv ListVINS) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(lv.Data))
 | 
					 | 
				
			||||||
	for _, v := range lv.Data {
 | 
					 | 
				
			||||||
		res = append(res, v.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,10 +0,0 @@
 | 
				
			|||||||
package cloudapi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/pkg/cloudapi/audit"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Accessing the Stack method group
 | 
					 | 
				
			||||||
func (ca *CloudAPI) Audit() *audit.Audit {
 | 
					 | 
				
			||||||
	return audit.New(ca.client)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,15 +0,0 @@
 | 
				
			|||||||
package audit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import "repository.basistech.ru/BASIS/decort-golang-sdk/interfaces"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Structure for creating request to audit
 | 
					 | 
				
			||||||
type Audit struct {
 | 
					 | 
				
			||||||
	client interfaces.Caller
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Builder for audit endpoint
 | 
					 | 
				
			||||||
func New(client interfaces.Caller) *Audit{
 | 
					 | 
				
			||||||
	return &Audit{
 | 
					 | 
				
			||||||
		client: client,
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,81 +0,0 @@
 | 
				
			|||||||
package audit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FilterByID returns ListAudits with specified ID.
 | 
					 | 
				
			||||||
func (la ListAudits) FilterByID(guid string) ListAudits {
 | 
					 | 
				
			||||||
	predicate := func(ia ItemAudit) bool {
 | 
					 | 
				
			||||||
		return ia.GUID == guid
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return la.FilterFunc(predicate)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FilterByCall returns ListAudits with specified call.
 | 
					 | 
				
			||||||
func (la ListAudits) FilterByCall(call string) ListAudits {
 | 
					 | 
				
			||||||
	predicate := func(ic ItemAudit) bool {
 | 
					 | 
				
			||||||
		return ic.Call == call
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return la.FilterFunc(predicate)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FilterByCorrelationID returns ListAudits with specified correlation id.
 | 
					 | 
				
			||||||
func (la ListAudits) FilterByCorrelationID(correlationID string) ListAudits {
 | 
					 | 
				
			||||||
	predicate := func(ic ItemAudit) bool {
 | 
					 | 
				
			||||||
		return ic.CorrelationID == correlationID
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return la.FilterFunc(predicate)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FilterByRemoteAddr returns ListAudits with specified remote address.
 | 
					 | 
				
			||||||
func (la ListAudits) FilterByRemoteAddr(remoteAddr string) ListAudits {
 | 
					 | 
				
			||||||
	predicate := func(ic ItemAudit) bool {
 | 
					 | 
				
			||||||
		return ic.RemoteAddr == remoteAddr
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return la.FilterFunc(predicate)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FilterByUser returns ListAudits with specified user name.
 | 
					 | 
				
			||||||
func (la ListAudits) FilterByUser(user string) ListAudits {
 | 
					 | 
				
			||||||
	predicate := func(ic ItemAudit) bool {
 | 
					 | 
				
			||||||
		return ic.User == user
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return la.FilterFunc(predicate)
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FilterByStatusCode return ListAudits with specified status code.
 | 
					 | 
				
			||||||
func (la ListAudits) FilterByStatusCode(statusCode uint64) ListAudits {
 | 
					 | 
				
			||||||
	predicate := func(ic ItemAudit) bool {
 | 
					 | 
				
			||||||
		return ic.StatusCode == statusCode
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return la.FilterFunc(predicate)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FilterFunc allows filtering ListAudits based on a user-specified predicate.
 | 
					 | 
				
			||||||
func (la ListAudits) FilterFunc(predicate func(ItemAudit) bool) ListAudits {
 | 
					 | 
				
			||||||
	var result ListAudits
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for _, item := range la.Data {
 | 
					 | 
				
			||||||
		if predicate(item) {
 | 
					 | 
				
			||||||
			result.Data = append(result.Data, item)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	result.EntryCount = uint64(len(result.Data))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return result
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// FindOne returns first found ItemAudit
 | 
					 | 
				
			||||||
// If none was found, returns an empty struct.
 | 
					 | 
				
			||||||
func (la ListAudits) FindOne() ItemAudit {
 | 
					 | 
				
			||||||
	if len(la.Data) == 0 {
 | 
					 | 
				
			||||||
		return ItemAudit{}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return la.Data[0]
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,115 +0,0 @@
 | 
				
			|||||||
package audit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"testing"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
var audits = ListAudits{
 | 
					 | 
				
			||||||
	Data: []ItemAudit{
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Args:          "[]",
 | 
					 | 
				
			||||||
			Call:          "/restmachine/cloudapi/audit/linkedJobs",
 | 
					 | 
				
			||||||
			GUID:          "550e8400-e29b-41d4-a716-446655440001",
 | 
					 | 
				
			||||||
			CorrelationID: "550e8400-e29b-41d4-a716-446655440001",
 | 
					 | 
				
			||||||
			Kwargs:        `{\"audit_guid\":\"dd8623a1-a887-48c1-a500-c10210d404cf\"}`,
 | 
					 | 
				
			||||||
			RemoteAddr:    "192.168.1.100",
 | 
					 | 
				
			||||||
			ResponseTime:  1,
 | 
					 | 
				
			||||||
			Result:        `[]`,
 | 
					 | 
				
			||||||
			StatusCode:    200,
 | 
					 | 
				
			||||||
			Timestamp:     1640995200,
 | 
					 | 
				
			||||||
			TimestampEnd:  1640995201,
 | 
					 | 
				
			||||||
			User:          "test@example.com",
 | 
					 | 
				
			||||||
			TTL:           "2025-07-31T14:22:57.028000",
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
		{
 | 
					 | 
				
			||||||
			Args:          "[]",
 | 
					 | 
				
			||||||
			Call:          "/restmachine/cloudapi/audit/test",
 | 
					 | 
				
			||||||
			GUID:          "550e8400-e29b-41d4-a716-446655440002",
 | 
					 | 
				
			||||||
			CorrelationID: "550e8400-e29b-41d4-a716-446655440002",
 | 
					 | 
				
			||||||
			Kwargs:        `{\"audit_guid\":\"dd8623a1-a887-48c1-a500-c10210d404cf\"}`,
 | 
					 | 
				
			||||||
			RemoteAddr:    "192.168.1.105",
 | 
					 | 
				
			||||||
			ResponseTime:  5,
 | 
					 | 
				
			||||||
			Result:        `[]`,
 | 
					 | 
				
			||||||
			StatusCode:    400,
 | 
					 | 
				
			||||||
			Timestamp:     1640995200,
 | 
					 | 
				
			||||||
			TimestampEnd:  1640995201,
 | 
					 | 
				
			||||||
			User:          "test2@example.com",
 | 
					 | 
				
			||||||
			TTL:           "2025-07-31T14:22:57.028000",
 | 
					 | 
				
			||||||
		},
 | 
					 | 
				
			||||||
	},
 | 
					 | 
				
			||||||
	EntryCount: 2,
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestFilterByID(t *testing.T) {
 | 
					 | 
				
			||||||
	actual := audits.FilterByID("550e8400-e29b-41d4-a716-446655440002").FindOne()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if actual.GUID != "550e8400-e29b-41d4-a716-446655440002" {
 | 
					 | 
				
			||||||
		t.Fatal("expected GUID 550e8400-e29b-41d4-a716-446655440002, found: ", actual.GUID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actualEmpty := audits.FilterByID("")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(actualEmpty.Data) != 0 {
 | 
					 | 
				
			||||||
		t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestFilterByCorrelationID(t *testing.T) {
 | 
					 | 
				
			||||||
	actual := audits.FilterByCorrelationID("550e8400-e29b-41d4-a716-446655440002").FindOne()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if actual.CorrelationID != "550e8400-e29b-41d4-a716-446655440002" {
 | 
					 | 
				
			||||||
		t.Fatal("expected GUID 550e8400-e29b-41d4-a716-446655440002, found: ", actual.CorrelationID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actualEmpty := audits.FilterByCorrelationID("")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(actualEmpty.Data) != 0 {
 | 
					 | 
				
			||||||
		t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestFilterByRemoteAddr(t *testing.T) {
 | 
					 | 
				
			||||||
	actual := audits.FilterByRemoteAddr("192.168.1.100").FindOne()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if actual.RemoteAddr != "192.168.1.100" {
 | 
					 | 
				
			||||||
		t.Fatal("expected remote address 192.168.1.100, found: ", actual.RemoteAddr)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actualEmpty := audits.FilterByRemoteAddr("")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(actualEmpty.Data) != 0 {
 | 
					 | 
				
			||||||
		t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestFilterByUser(t *testing.T) {
 | 
					 | 
				
			||||||
	actual := audits.FilterByUser("test@example.com").FindOne()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if actual.User != "test@example.com" {
 | 
					 | 
				
			||||||
		t.Fatal("expected user test@example.com, found: ", actual.RemoteAddr)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	actualEmpty := audits.FilterByUser("")
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if len(actualEmpty.Data) != 0 {
 | 
					 | 
				
			||||||
		t.Fatal("expected empty, actual: ", len(actualEmpty.Data))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestFilterByCall(t *testing.T) {
 | 
					 | 
				
			||||||
	actual := audits.FilterByCall("/restmachine/cloudapi/audit/test").FindOne()
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if actual.Call != "/restmachine/cloudapi/audit/test" {
 | 
					 | 
				
			||||||
		t.Fatal("expected call /restmachine/cloudapi/audit/test, found: ", actual.Call)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
func TestFilterByStatusCode(t *testing.T) {
 | 
					 | 
				
			||||||
	actual := audits.FilterByStatusCode(200)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	for _, item := range actual.Data {
 | 
					 | 
				
			||||||
		if item.StatusCode != 200 {
 | 
					 | 
				
			||||||
			t.Fatal("expected 200 status code, found: ", item.StatusCode)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,46 +0,0 @@
 | 
				
			|||||||
package audit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"context"
 | 
					 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GetRequest struct to get information about account
 | 
					 | 
				
			||||||
type GetRequest struct {
 | 
					 | 
				
			||||||
	// Audit GUID
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	AuditGuid string `url:"audit_guid" json:"audit_guid" validate:"required"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Get gets information about audit as a RecordAudit struct
 | 
					 | 
				
			||||||
func (a Audit) Get(ctx context.Context, req GetRequest) (*RecordAudit, error) {
 | 
					 | 
				
			||||||
	res, err := a.GetRaw(ctx, req)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	info := RecordAudit{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = json.Unmarshal(res, &info)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return &info, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// GetRaw gets information about audit as an array of bytes
 | 
					 | 
				
			||||||
func (a Audit) GetRaw(ctx context.Context, req GetRequest) ([]byte, error) {
 | 
					 | 
				
			||||||
	err := validators.ValidateRequest(req)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	url := "/cloudapi/audit/get"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
 | 
					 | 
				
			||||||
	return res, err
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,124 +0,0 @@
 | 
				
			|||||||
package audit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"context"
 | 
					 | 
				
			||||||
	"encoding/json"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ListRequest struct to give list of account audits
 | 
					 | 
				
			||||||
type ListRequest struct {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find all audits after point in time (unixtime)
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	TimestampAt uint64 `url:"timestamp_at,omitempty" json:"timestamp_at,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find all audits before point in time (unixtime)
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	TimestampTo uint64 `url:"timestamp_to,omitempty" json:"timestamp_to,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by user (Mongo RegExp supported)
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	User string `url:"user,omitempty" json:"user,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by api endpoint (Mongo RegExp supported)
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	Call string `url:"call,omitempty" json:"call,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by request id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	RequestID string `url:"request_id,omitempty" json:"request_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by HTTP min status code
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	MinStatusCode uint64 `url:"min_status_code,omitempty" json:"min_status_code,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by HTTP max status code
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	MaxStatusCode uint64 `url:"max_status_code,omitempty" json:"max_status_code,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Sort by one of supported fields, format +|-(field)
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	SortBy string `url:"sort_by,omitempty" json:"sort_by,omitempty" validate:"omitempty,sortBy"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Page number
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	Page uint64 `url:"page,omitempty" json:"page,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Page size
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	Size uint64 `url:"size,omitempty" json:"size,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by resource group id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	RGID uint64 `url:"resgroup_id,omitempty" json:"resgroup_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by compute id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	ComputeID uint64 `url:"compute_id,omitempty" json:"compute_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by account id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	AccountID uint64 `url:"account_id,omitempty" json:"account_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by vins id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	VINSID uint64 `url:"vins_id,omitempty" json:"vins_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by service id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	ServiceID uint64 `url:"service_id,omitempty" json:"service_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by k8s id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	K8SID uint64 `url:"k8s_id,omitempty" json:"k8s_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by flipgroup id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	FLIPGroupID uint64 `url:"flipgroup_id,omitempty" json:"flipgroup_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by load balancer id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	LBID uint64 `url:"lb_id,omitempty" json:"lb_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Find by sep id
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	SEPID uint64 `url:"sep_id,omitempty" json:"sep_id,omitempty"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Exclude audit lines from response
 | 
					 | 
				
			||||||
	// Required: false
 | 
					 | 
				
			||||||
	ExcludeAuditLines bool `url:"exclude_audit_lines,omitempty" json:"exclude_audit_lines,omitempty"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// List gets audit records for the specified account object
 | 
					 | 
				
			||||||
func (a Audit) List(ctx context.Context, req ListRequest) (*ListAudits, error) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	res, err := a.ListRaw(ctx, req)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	list := ListAudits{}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	err = json.Unmarshal(res, &list)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return nil, err
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return &list, nil
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// ListRaw gets list of audit records an array of bytes
 | 
					 | 
				
			||||||
func (a Audit) ListRaw(ctx context.Context, req ListRequest) ([]byte, error) {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	if err := validators.ValidateRequest(req); err != nil {
 | 
					 | 
				
			||||||
		return nil, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	url := "/cloudapi/audit/list"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	res, err := a.client.DecortApiCall(ctx, http.MethodPost, url, req)
 | 
					 | 
				
			||||||
	return res, err
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,95 +0,0 @@
 | 
				
			|||||||
package audit
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Main info about audit
 | 
					 | 
				
			||||||
type RecordAudit struct {
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Arguments
 | 
					 | 
				
			||||||
	Arguments string `json:"args"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Call
 | 
					 | 
				
			||||||
	Call string `json:"call"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// GUID
 | 
					 | 
				
			||||||
	GUID string `json:"guid"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Correlation ID
 | 
					 | 
				
			||||||
	CorrelationID string `json:"correlation_id"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Kwargs
 | 
					 | 
				
			||||||
	Kwargs string `json:"kwargs"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// RemoteAddr
 | 
					 | 
				
			||||||
	RemoteAddr string `json:"remote_addr"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Response time
 | 
					 | 
				
			||||||
	ResponseTime float64 `json:"responsetime"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Result
 | 
					 | 
				
			||||||
	Result string `json:"result"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Status code
 | 
					 | 
				
			||||||
	StatusCode uint64 `json:"statuscode"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Tags
 | 
					 | 
				
			||||||
	Tags string `json:"tags"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Timestamp
 | 
					 | 
				
			||||||
	Timestamp float64 `json:"timestamp"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// TimestampEnd
 | 
					 | 
				
			||||||
	TimestampEnd float64 `json:"timestampEnd"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// User
 | 
					 | 
				
			||||||
	User string `json:"user"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// Main info about audit
 | 
					 | 
				
			||||||
type ItemAudit struct {
 | 
					 | 
				
			||||||
	// Args
 | 
					 | 
				
			||||||
	Args string `json:"args"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Call
 | 
					 | 
				
			||||||
	Call string `json:"call"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// GUID
 | 
					 | 
				
			||||||
	GUID string `json:"guid"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Correlation ID
 | 
					 | 
				
			||||||
	CorrelationID string `json:"correlation_id"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Kwargs
 | 
					 | 
				
			||||||
	Kwargs string `json:"kwargs"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// RemoteAddr
 | 
					 | 
				
			||||||
	RemoteAddr string `json:"remote_addr"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Response time
 | 
					 | 
				
			||||||
	ResponseTime float64 `json:"responsetime"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Result
 | 
					 | 
				
			||||||
	Result string `json:"result"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Status code
 | 
					 | 
				
			||||||
	StatusCode uint64 `json:"statuscode"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Timestamp
 | 
					 | 
				
			||||||
	Timestamp float64 `json:"timestamp"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Timestamp End
 | 
					 | 
				
			||||||
	TimestampEnd float64 `json:"timestampEnd"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// User
 | 
					 | 
				
			||||||
	User string `json:"user"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// TTL
 | 
					 | 
				
			||||||
	TTL string `json:"_ttl"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// List of audits
 | 
					 | 
				
			||||||
type ListAudits struct {
 | 
					 | 
				
			||||||
	// Data
 | 
					 | 
				
			||||||
	Data []ItemAudit `json:"data"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// EntryCount
 | 
					 | 
				
			||||||
	EntryCount uint64 `json:"entryCount"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,37 +0,0 @@
 | 
				
			|||||||
package bservice
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of BasicServiceIDs from ListBasicServices struct
 | 
					 | 
				
			||||||
func (lbs ListBasicServices) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(lbs.Data))
 | 
					 | 
				
			||||||
	for _, bs := range lbs.Data {
 | 
					 | 
				
			||||||
		res = append(res, bs.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of ComputeIDs from ListComputes struct
 | 
					 | 
				
			||||||
func (lc ListComputes) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(lc))
 | 
					 | 
				
			||||||
	for _, c := range lc {
 | 
					 | 
				
			||||||
		res = append(res, c.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of GroupIDs from ListGroups struct
 | 
					 | 
				
			||||||
func (lg ListGroups) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(lg))
 | 
					 | 
				
			||||||
	for _, g := range lg {
 | 
					 | 
				
			||||||
		res = append(res, g.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// IDs gets array of GroupComputeIDs from ListGroupComputes struct
 | 
					 | 
				
			||||||
func (lgc ListGroupComputes) IDs() []uint64 {
 | 
					 | 
				
			||||||
	res := make([]uint64, 0, len(lgc))
 | 
					 | 
				
			||||||
	for _, gc := range lgc {
 | 
					 | 
				
			||||||
		res = append(res, gc.ID)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	return res
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,42 +0,0 @@
 | 
				
			|||||||
package bservice
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"context"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
	"strconv"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// MigrateToZone struct to move basic service to another zone
 | 
					 | 
				
			||||||
type MigrateToZoneRequest struct {
 | 
					 | 
				
			||||||
	// ID of the BasicService to move
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	ServiceID uint64 `url:"serviceId" json:"serviceId" validate:"required"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// ID of the zone to move
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	ZoneID uint64 `url:"zoneId" json:"zoneId" validate:"required"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// MigrateToZone moves basic service instance to new zone
 | 
					 | 
				
			||||||
func (b BService) MigrateToZone(ctx context.Context, req MigrateToZoneRequest) (bool, error) {
 | 
					 | 
				
			||||||
	err := validators.ValidateRequest(req)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return false, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	url := "/cloudapi/bservice/migrateToZone"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	res, err := b.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
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
@ -1,42 +0,0 @@
 | 
				
			|||||||
package compute
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
import (
 | 
					 | 
				
			||||||
	"context"
 | 
					 | 
				
			||||||
	"net/http"
 | 
					 | 
				
			||||||
	"strconv"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	"repository.basistech.ru/BASIS/decort-golang-sdk/internal/validators"
 | 
					 | 
				
			||||||
)
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// AbortSharedSnapshotMergeRequest struct to abort shared snapshots merge
 | 
					 | 
				
			||||||
type AbortSharedSnapshotMergeRequest struct {
 | 
					 | 
				
			||||||
	// ID of the compute
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	ComputeID uint64 `url:"compute_id" json:"compute_id" validate:"required"`
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	// Label of the snapshot
 | 
					 | 
				
			||||||
	// Required: true
 | 
					 | 
				
			||||||
	Label string `url:"label" json:"label" validate:"required"`
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
// AbortSharedSnapshotMerge shared snapshots merge abort
 | 
					 | 
				
			||||||
func (c Compute) AbortSharedSnapshotMerge(ctx context.Context, req AbortSharedSnapshotMergeRequest) (bool, error) {
 | 
					 | 
				
			||||||
	err := validators.ValidateRequest(req)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		return false, validators.ValidationErrors(validators.GetErrors(err))
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	url := "/cloudapi/compute/abort_shared_snapshot_merge"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	res, err := c.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
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
Some files were not shown because too many files have changed in this diff Show More
					Loading…
					
					
				
		Reference in new issue