This commit is contained in:
stSolo
2022-12-22 17:56:47 +03:00
parent 8712561853
commit d4b1ab7133
672 changed files with 28509 additions and 4419 deletions

View File

@@ -3,31 +3,91 @@ package image
import (
"context"
"errors"
"github.com/rudecs/decort-sdk/internal/validators"
"net/http"
"strconv"
"github.com/rudecs/decort-sdk/internal/validators"
)
// Request struct for create image
type CreateRequest struct {
Name string `url:"name"`
URL string `url:"url"`
GID uint64 `url:"gid"`
BootType string `url:"boottype"`
ImageType string `url:"imagetype"`
HotResize bool `url:"hotresize,omitempty"`
Username string `url:"username,omitempty"`
Password string `url:"password,omitempty"`
AccountID uint64 `url:"accountId,omitempty"`
UsernameDL string `url:"usernameDL,omitempty"`
PasswordDL string `url:"passwordDL,omitempty"`
SepID uint64 `url:"sepId,omitempty"`
PoolName string `url:"poolName,omitempty"`
Architecture string `url:"architecture,omitempty"`
Drivers []string `url:"drivers,omitempty"`
Bootable bool `url:"bootable,omitempty"`
// Name of the rescue disk
// Required: true
Name string `url:"name"`
// URL where to download media from
// Required: true
URL string `url:"url"`
// Grid (platform) ID where this template should be create in
// Required: true
GID uint64 `url:"gid"`
// Boot type of image
// Should be one of:
// - bios
// - UEFI
// Required: true
BootType string `url:"boottype"`
// Image type
// Should be one of:
// - linux
// - windows
// - or other
// Required: true
ImageType string `url:"imagetype"`
// Does this machine supports hot resize
// Required: false
HotResize bool `url:"hotresize,omitempty"`
// Optional username for the image
// Required: false
Username string `url:"username,omitempty"`
// Optional password for the image
// Required: false
Password string `url:"password,omitempty"`
// Account ID to make the image exclusive
// Required: false
AccountID uint64 `url:"accountId,omitempty"`
// Username for upload binary media
// Required: false
UsernameDL string `url:"usernameDL,omitempty"`
// Password for upload binary media
// Required: false
PasswordDL string `url:"passwordDL,omitempty"`
// Storage endpoint provider ID
// Required: false
SEPID uint64 `url:"sepId,omitempty"`
// Pool for image create
// Required: false
PoolName string `url:"poolName,omitempty"`
// Binary architecture of this image
// Should be one of:
// - X86_64
// - PPC64_LE
// Required: false
Architecture string `url:"architecture,omitempty"`
// List of types of compute suitable for image
// Example: [ "KVM_X86" ]
// Required: true
Drivers []string `url:"drivers"`
// Bootable image or not
// Required: false
Bootable bool `url:"bootable,omitempty"`
}
func (irq CreateRequest) Validate() error {
func (irq CreateRequest) validate() error {
if irq.Name == "" {
return errors.New("validation-error: field Name must be set")
}
@@ -43,7 +103,6 @@ func (irq CreateRequest) Validate() error {
if irq.ImageType == "" {
return errors.New("validation-error: field ImageType must be set")
}
validate := validators.StringInSlice(irq.BootType, []string{"bios", "uefi"})
if !validate {
return errors.New("validation-error: field BootType can be bios or uefi")
@@ -56,8 +115,9 @@ func (irq CreateRequest) Validate() error {
return nil
}
// CreateImage creates image from a media identified by URL
func (i Image) CreateImage(ctx context.Context, req CreateRequest) (uint64, error) {
err := req.Validate()
err := req.validate()
if err != nil {
return 0, err
}