Select Git revision
vm.go 2.92 KiB
package vm
import (
"time"
"encoding/json"
"nexus-common/caps"
"github.com/google/uuid"
)
type (
// VM fields to be serialized to disk.
VMDiskSerialized struct {
ID uuid.UUID `json:"id" validate:"required"`
Owner string `json:"owner" validate:"required,email"`
Name string `json:"name" validate:"required,min=1,max=256"`
Cpus int `json:"cpus" validate:"required,gte=1,lte=32"`
Ram int `json:"ram" validate:"required,gte=128,lte=32768"` // in MB
Nic NicType `json:"nic" validate:"required"`
UsbDevs []string `json:"usbDevs" validate:"required"`
TemplateID uuid.UUID `json:"templateID" validate:"required"`
Access map[string]caps.Capabilities `json:"access"`
CreationTime time.Time `json:"creationTime" validate:"required"`
}
// VM fields to be serialized over the network.
VMNetworkSerialized struct {
ID uuid.UUID `json:"id" validate:"required"`
Owner string `json:"owner" validate:"required,email"`
Name string `json:"name" validate:"required,min=1,max=256"`
Cpus int `json:"cpus" validate:"required,gte=1,lte=32"`
Ram int `json:"ram" validate:"required,gte=128,lte=32768"` // in MB
Nic NicType `json:"nic" validate:"required"`
UsbDevs []string `json:"usbDevs" validate:"required"`
TemplateID uuid.UUID `json:"templateID" validate:"required"`
Access map[string]caps.Capabilities `json:"access"`
CreationTime time.Time `json:"creationTime" validate:"required"`
State VMState `json:"state"`
DiskBusy bool `json:"diskBusy"` // When true, the disk image must not be modified
StartTime time.Time `json:"startTime"`
}
VMSpiceCredentialsSerialized struct {
SpicePort int `json:"spicePort" validate:"required,gte=1025,lte=65535"`
SpicePwd string `json:"spicePwd" validate:"required,min=16,max=64"`
}
VMAttachCredentialsSerialized struct {
ID uuid.UUID `json:"id" validate:"required"`
Name string `json:"name" validate:"required,min=1,max=256"`
Pwd string `json:"pwd" validate:"required,min=8,max=64"`
}
VMState string // see stateXXX below
NicType string // see nicXXX below
)
const (
StateStopped VMState = "STOPPED"
StateRunning VMState = "RUNNING"
NicUser NicType = "user"
NicNone NicType = "none"
)
// Converts a VMNetworkSerialized structure into a pretty string.
func (v *VMNetworkSerialized)String() (string, error) {
output, err := json.MarshalIndent(v, "", " ")
if err != nil {
return "", err
}
return string(output), nil
}