Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 22 additions & 15 deletions api/Create.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ import (
"net/http"

virerr "github.com/easy-cloud-Knet/KWS_Core/error"
"github.com/easy-cloud-Knet/KWS_Core/vm/parsor"
"github.com/easy-cloud-Knet/KWS_Core/vm/service/creation"
"go.uber.org/zap"
"libvirt.org/go/libvirt"
Expand All @@ -22,12 +21,16 @@ func (i *InstHandler) BootVM(w http.ResponseWriter, r *http.Request) {
}
i.Logger.Info("Handling Boot VM", zap.String("uuid", param.UUID))

domCon, _ := i.domainConGetter()

DomainExisting, _ := domCon.GetDomain(param.UUID)
DomainExisting, domainErr := i.DomainControl.GetDomain(param.UUID)
if domainErr != nil {
i.Logger.Error("error handling booting vm, failed to get domain", zap.String("uuid", param.UUID), zap.Error(domainErr))
resp.ResponseWriteErr(w, domainErr, http.StatusInternalServerError)
return
}
if DomainExisting == nil {
resp.ResponseWriteErr(w, nil, http.StatusBadRequest)
i.Logger.Error("error handling booting vm, domain not found", zap.String("uuid", param.UUID))
notFoundErr := virerr.ErrorGen(virerr.DomainGenerationError, fmt.Errorf("domain %s not found while booting vm", param.UUID))
i.Logger.Error("error handling booting vm, domain not found", zap.String("uuid", param.UUID), zap.Error(notFoundErr))
resp.ResponseWriteErr(w, notFoundErr, http.StatusNotFound)
return
}

Expand All @@ -53,9 +56,7 @@ func (i *InstHandler) BootVM(w http.ResponseWriter, r *http.Request) {
func (i *InstHandler) CreateVMFromBase(w http.ResponseWriter, r *http.Request) {

resp := ResponseGen[libvirt.DomainInfo]("CreateVm")
param := &parsor.VM_Init_Info{}

domCon, _ := i.domainConGetter()
param := &CreateVMRequest{}

if err := HttpDecoder(r, param); err != nil {
resp.ResponseWriteErr(w, err, http.StatusBadRequest)
Expand All @@ -64,25 +65,31 @@ func (i *InstHandler) CreateVMFromBase(w http.ResponseWriter, r *http.Request) {
}
i.Logger.Info("Handling Create VM", zap.String("uuid", param.UUID))

domainExisting, _ := domCon.GetDomain(param.UUID)
domainExisting, domainErr := i.DomainControl.GetDomain(param.UUID)
if domainErr != nil {
i.Logger.Error("error handling creating vm, failed to get existing domain", zap.String("uuid", param.UUID), zap.Error(domainErr))
resp.ResponseWriteErr(w, domainErr, http.StatusInternalServerError)
return
}
if domainExisting != nil {
resp.ResponseWriteErr(w, nil, http.StatusBadRequest)
i.Logger.Error("error handling creating vm, domain already exists", zap.String("uuid", param.UUID))
existsErr := virerr.ErrorGen(virerr.DomainGenerationError, fmt.Errorf("domain %s already exists", param.UUID))
i.Logger.Error("error handling creating vm, domain already exists", zap.String("uuid", param.UUID), zap.Error(existsErr))
resp.ResponseWriteErr(w, existsErr, http.StatusBadRequest)
return
}

DomConf := creation.LocalConfFactory(param, i.Logger)
DomConf := creation.LocalConfFactory(param.toVMInitInfo(), i.Logger)
DomCreator := creation.LocalCreatorFactory(DomConf, i.LibvirtInst, i.Logger)

newDomain, err := DomCreator.CreateVM()
if err != nil && newDomain == nil {
newErr := virerr.ErrorGen(virerr.DomainGenerationError, fmt.Errorf(" %w error while creating new domain, from CreateVM", err))
i.Logger.Error("error from createvm", zap.Error(newErr))
resp.ResponseWriteErr(w, err, http.StatusInternalServerError)
resp.ResponseWriteErr(w, newErr, http.StatusInternalServerError)
return
}

err = domCon.AddNewDomain(newDomain, param.UUID)
err = i.DomainControl.AddNewDomain(newDomain, param.UUID)
if err != nil {
i.Logger.Error("error from createvm", zap.Error(err))
resp.ResponseWriteErr(w, err, http.StatusInternalServerError)
Expand Down
34 changes: 34 additions & 0 deletions api/create_model.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
package api

import (
network "github.com/easy-cloud-Knet/KWS_Core/net"
vmtypes "github.com/easy-cloud-Knet/KWS_Core/vm/types"
)

type CreateVMRequest struct {
DomName string `json:"domName"`
UUID string `json:"uuid"`
OS string `json:"os"`
HardwardInfo vmtypes.HardwareInfo `json:"HWInfo"`
NetConf network.NetDefine `json:"network"`
Users []vmtypes.User_info_VM `json:"users"`
SDNUUID string `json:"sdnUUID"`
MacAddr string `json:"macAddr"`
}

func (r *CreateVMRequest) toVMInitInfo() *vmtypes.VM_Init_Info {
return &vmtypes.VM_Init_Info{
DomName: r.DomName,
UUID: r.UUID,
OS: r.OS,
HardwardInfo: r.HardwardInfo,
NetConf: r.NetConf,
Users: r.Users,
SDNUUID: r.SDNUUID,
MacAddr: r.MacAddr,
}
}

type DomainBootRequest struct {
UUID string `json:"UUID"`
}
4 changes: 0 additions & 4 deletions api/status_model.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,6 @@ import (
"libvirt.org/go/libvirt"
)

type DomainBootRequest struct {
UUID string `json:"UUID"`
}

type DomainStatusRequest struct {
DataType status.DomainDataType `json:"dataType"`
UUID string `json:"UUID"`
Expand Down
7 changes: 0 additions & 7 deletions api/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"io"
"net/http"

domCon "github.com/easy-cloud-Knet/KWS_Core/DomCon"
virerr "github.com/easy-cloud-Knet/KWS_Core/error"
)

Expand Down Expand Up @@ -71,9 +70,3 @@ func (br *BaseResponse[T]) ResponseWriteOK(w http.ResponseWriter, info *T) {
w.Write(data)
}

func (i *InstHandler) domainConGetter() (*domCon.DomListControl, error) {
if i.DomainControl == nil {
return nil, virerr.ErrorGen(virerr.InvalidParameter, fmt.Errorf("domainController not initialled yet"))
}
return i.DomainControl, nil
}
5 changes: 3 additions & 2 deletions vm/parsor/XML_Parsor.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,14 @@ import (
"fmt"

"github.com/easy-cloud-Knet/KWS_Core/config"
vmtypes "github.com/easy-cloud-Knet/KWS_Core/vm/types"
)

// NetworkMode is injected at build time via -ldflags. Default: "ovn".
// Supported values: "ovn", "bridge"
var NetworkMode = "ovn"

func buildInterface(spec *VM_Init_Info) Interface {
func buildInterface(spec *vmtypes.VM_Init_Info) Interface {
iface := Interface{
Type: "bridge",
MacAddress: MacAddress{Address: spec.MacAddr},
Expand All @@ -29,7 +30,7 @@ func buildInterface(spec *VM_Init_Info) Interface {
return iface
}

func (XP *VM_CREATE_XML) XML_Parsor(spec *VM_Init_Info) error {
func (XP *VM_CREATE_XML) XML_Parsor(spec *vmtypes.VM_Init_Info) error {
*XP = VM_CREATE_XML{
Type: "kvm",
Name: spec.DomName,
Expand Down
6 changes: 3 additions & 3 deletions vm/parsor/cloud-init/userConf.go
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import (
"strings"

"github.com/easy-cloud-Knet/KWS_Core/config"
"github.com/easy-cloud-Knet/KWS_Core/vm/parsor"
vmtypes "github.com/easy-cloud-Knet/KWS_Core/vm/types"
"gopkg.in/yaml.v3"
)

Expand Down Expand Up @@ -44,7 +44,7 @@ func (u *Meta_data_yaml) WriteFile(dirPath string) error {
return nil
}

func (u *User_data_yaml) ParseData(param *parsor.VM_Init_Info) error {
func (u *User_data_yaml) ParseData(param *vmtypes.VM_Init_Info) error {

u.PackageUpdatable = true

Expand Down Expand Up @@ -131,7 +131,7 @@ func (u *User_data_yaml) configQEMU() {
u.Runcmd = append(u.Runcmd, "sudo systemctl enable qemu-guest-agent")
}

func (m *Meta_data_yaml) ParseData(param *parsor.VM_Init_Info) error {
func (m *Meta_data_yaml) ParseData(param *vmtypes.VM_Init_Info) error {
m.Instance_ID = param.UUID
m.Local_Host_Id = param.DomName
return nil
Expand Down
4 changes: 2 additions & 2 deletions vm/parsor/cloud-init/userConf_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (
"strings"
"testing"

"github.com/easy-cloud-Knet/KWS_Core/vm/parsor"
vmtypes "github.com/easy-cloud-Knet/KWS_Core/vm/types"
)

func TestConfigNetworkIP(t *testing.T) {
Expand Down Expand Up @@ -113,7 +113,7 @@ func TestMetaDataWriteFile(t *testing.T) {

func TestMetaDataParseData(t *testing.T) {
m := &Meta_data_yaml{}
param := &parsor.VM_Init_Info{
param := &vmtypes.VM_Init_Info{
UUID: "abc-123",
DomName: "test-vm",
}
Expand Down
29 changes: 0 additions & 29 deletions vm/parsor/type.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,37 +2,8 @@ package parsor

import (
"encoding/xml"

network "github.com/easy-cloud-Knet/KWS_Core/net"
)

// struct for detailed generation config

type VM_Init_Info struct {
DomType string `json:"domType"`
DomName string `json:"domName"`
UUID string `json:"uuid"`
OS string `json:"os"`
HardwardInfo HardwareInfo `json:"HWInfo"`
NetConf network.NetDefine `json:"network"`
Users []User_info_VM `json:"users"`
SDNUUID string `json:"sdnUUID"`
MacAddr string `json:"macAddr"`
}

type User_info_VM struct {
Name string `json:"name"`
Groups string `json:"groups"`
PassWord string `json:"passWord"`
Ssh_authorized_keys []string `json:"ssh"`
}

type HardwareInfo struct {
CPU int `json:"cpu"`
Memory int `json:"memory"`
Disk int `json:"disk"`
}

// gonna replace fields in VM_Init_Info
//structure,need to modify parsor when implement this

Expand Down
5 changes: 3 additions & 2 deletions vm/parsor/xml_parsor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,13 +6,14 @@ import (
"testing"

network "github.com/easy-cloud-Knet/KWS_Core/net"
vmtypes "github.com/easy-cloud-Knet/KWS_Core/vm/types"
)

var testSpec = &VM_Init_Info{
var testSpec = &vmtypes.VM_Init_Info{
DomName: "test-vm",
UUID: "123e4567-e89b-12d3-a456-426614174000",
OS: "debian",
HardwardInfo: HardwareInfo{
HardwardInfo: vmtypes.HardwareInfo{
CPU: 2,
Memory: 4,
Disk: 20,
Expand Down
3 changes: 2 additions & 1 deletion vm/service/creation/create_type.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ package creation
import (
"github.com/easy-cloud-Knet/KWS_Core/vm/parsor"
userconfig "github.com/easy-cloud-Knet/KWS_Core/vm/parsor/cloud-init"
vmtypes "github.com/easy-cloud-Knet/KWS_Core/vm/types"
"go.uber.org/zap"
"libvirt.org/go/libvirt"
)
Expand Down Expand Up @@ -31,7 +32,7 @@ type NewDomainFromSnapshot struct {
}

type localConfigurer struct {
VMDescription *parsor.VM_Init_Info
VMDescription *vmtypes.VM_Init_Info
YamlParsorUser *userconfig.User_data_yaml
YamlParsorMeta *userconfig.Meta_data_yaml
DeviceDefiner *parsor.VM_CREATE_XML
Expand Down
3 changes: 2 additions & 1 deletion vm/service/creation/local_domain.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,11 +12,12 @@ import (
virerr "github.com/easy-cloud-Knet/KWS_Core/error"
"github.com/easy-cloud-Knet/KWS_Core/vm/parsor"
userconfig "github.com/easy-cloud-Knet/KWS_Core/vm/parsor/cloud-init"
vmtypes "github.com/easy-cloud-Knet/KWS_Core/vm/types"
"go.uber.org/zap"
"libvirt.org/go/libvirt"
)

func LocalConfFactory(param *parsor.VM_Init_Info, logger *zap.Logger) *localConfigurer {
func LocalConfFactory(param *vmtypes.VM_Init_Info, logger *zap.Logger) *localConfigurer {
return &localConfigurer{
VMDescription: param,
YamlParsorUser: &userconfig.User_data_yaml{},
Expand Down
27 changes: 27 additions & 0 deletions vm/types/vm.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
package vmtypes

import network "github.com/easy-cloud-Knet/KWS_Core/net"

type VM_Init_Info struct {
DomName string `json:"domName"`
UUID string `json:"uuid"`
OS string `json:"os"`
HardwardInfo HardwareInfo `json:"HWInfo"`
NetConf network.NetDefine `json:"network"`
Users []User_info_VM `json:"users"`
SDNUUID string `json:"sdnUUID"`
MacAddr string `json:"macAddr"`
}

type HardwareInfo struct {
CPU int `json:"cpu"`
Memory int `json:"memory"`
Disk int `json:"disk"`
}

type User_info_VM struct {
Name string `json:"name"`
Groups string `json:"groups"`
PassWord string `json:"passWord"`
Ssh_authorized_keys []string `json:"ssh"`
}
Loading