2024-10-18 06:00:05 -05:00
|
|
|
// Copyright 2024 WIT.COM Inc Licensed GPL 3.0
|
|
|
|
|
|
|
|
package main
|
|
|
|
|
|
|
|
import (
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
|
|
|
|
"go.wit.com/log"
|
|
|
|
"libvirt.org/go/libvirtxml"
|
|
|
|
)
|
|
|
|
|
2024-10-18 07:40:06 -05:00
|
|
|
func makeStandardXml(d *DropletT) {
|
2024-10-18 06:00:05 -05:00
|
|
|
log.Info("create new xml file for:", d.Hostname)
|
|
|
|
domcfg := &libvirtxml.Domain{}
|
|
|
|
|
|
|
|
addDefaults(domcfg, "standard.x86")
|
|
|
|
addDefaults(domcfg, "memory")
|
|
|
|
addDefaults(domcfg, "network")
|
|
|
|
addDefaults(domcfg, "spice")
|
|
|
|
addDefaults(domcfg, "qcow")
|
2024-10-18 07:40:06 -05:00
|
|
|
addDefaults(domcfg, d.Hostname)
|
2024-10-18 06:00:05 -05:00
|
|
|
|
|
|
|
fmt.Printf("Virt type %s\n", domcfg.Type)
|
|
|
|
fmt.Printf("Virt name %s\n", domcfg.Name)
|
|
|
|
fmt.Printf("Virt UUID %s\n", domcfg.UUID)
|
|
|
|
fmt.Printf("Virt Memory %s\n", domcfg.Memory)
|
2024-10-18 07:40:06 -05:00
|
|
|
// domcfg.Memory = 3333
|
|
|
|
fmt.Printf("Virt Devices %s\n", domcfg.Devices.Disks)
|
|
|
|
// log.Spew(domcfg.Devices)
|
|
|
|
// fmt.Printf("Virt Devices %s\n", domcfg.DiskDriver)
|
|
|
|
log.Info("DISKS")
|
|
|
|
log.Info("DISKS")
|
|
|
|
log.Info("")
|
|
|
|
// structure DomainDeviceList shows what can be done as a range
|
|
|
|
for i, x := range domcfg.Devices.Disks {
|
|
|
|
// Create a new DomainDiskSourceFile struct
|
|
|
|
newSource := &libvirtxml.DomainDiskSourceFile{
|
|
|
|
File: "mynew.qcow2", // Set the file name here
|
|
|
|
}
|
|
|
|
|
|
|
|
// Assign it to the disk's source
|
|
|
|
domcfg.Devices.Disks[i].Source.File = newSource
|
|
|
|
|
|
|
|
// fmt.Printf("Disk Source %s\n", name)
|
|
|
|
fmt.Printf("Disk Device %s\n", x.Source.File)
|
|
|
|
}
|
2024-10-18 06:00:05 -05:00
|
|
|
|
|
|
|
xmldoc, err := domcfg.Marshal()
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
fmt.Println("can't make xml file error:\n", err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
// fmt.Printf("Virt type %s\n", xmldoc)
|
|
|
|
|
|
|
|
outfile := "/tmp/" + d.Hostname + ".xml"
|
|
|
|
regfile, _ := os.OpenFile(outfile, os.O_RDWR|os.O_CREATE, 0666)
|
|
|
|
fmt.Fprintln(regfile, xmldoc)
|
|
|
|
|
|
|
|
log.Info("File is in", outfile)
|
|
|
|
}
|
|
|
|
|
|
|
|
func addDefaults(d *libvirtxml.Domain, filename string) {
|
|
|
|
fullname := "resources/xml/" + filename + ".xml"
|
|
|
|
pfile, err := resources.ReadFile(fullname)
|
|
|
|
if err != nil {
|
|
|
|
log.Println("ERROR:", err)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
|
|
|
|
err = d.Unmarshal(string(pfile))
|
|
|
|
if err != nil {
|
|
|
|
log.Info("Marshal failed on file", filename)
|
|
|
|
return
|
|
|
|
}
|
|
|
|
}
|
2024-10-18 08:18:11 -05:00
|
|
|
|
|
|
|
func simpleDisk(domcfg *libvirtxml.Domain, filename string) {
|
|
|
|
// Clear out the existing disks (if any)
|
|
|
|
domcfg.Devices.Disks = nil
|
|
|
|
|
|
|
|
// Define a new disk with "mynew.qcow2"
|
|
|
|
newDisk := libvirtxml.DomainDisk{
|
|
|
|
Device: "disk",
|
|
|
|
Driver: &libvirtxml.DomainDiskDriver{
|
|
|
|
Name: "qemu",
|
|
|
|
Type: "qcow2",
|
|
|
|
},
|
|
|
|
Source: &libvirtxml.DomainDiskSource{
|
|
|
|
File: &libvirtxml.DomainDiskSourceFile{
|
|
|
|
File: filename,
|
|
|
|
},
|
|
|
|
},
|
|
|
|
Target: &libvirtxml.DomainDiskTarget{
|
|
|
|
Dev: "vda",
|
|
|
|
Bus: "virtio",
|
|
|
|
},
|
|
|
|
}
|
|
|
|
|
|
|
|
// Add the new disk to the domain configuration
|
|
|
|
domcfg.Devices.Disks = append(domcfg.Devices.Disks, newDisk)
|
|
|
|
}
|