From fd85215d5744998a53c6e11a7ce2a866badcd22c Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Sat, 26 Oct 2024 04:08:35 -0500 Subject: go vet works --- start.go | 103 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 start.go (limited to 'start.go') diff --git a/start.go b/start.go new file mode 100644 index 0000000..6bb15ba --- /dev/null +++ b/start.go @@ -0,0 +1,103 @@ +// Copyright 2024 WIT.COM Inc Licensed GPL 3.0 + +package virtigoxml + +import ( + "fmt" + "os" + "path/filepath" + + "libvirt.org/go/libvirtxml" + + "go.wit.com/log" + pb "go.wit.com/lib/protobuf/virtbuf" +) + +// generate the XML for 'virsh create' +func startDropletXml(d *pb.Droplet) { + if d == nil { + log.Info("droplet is nil") + os.Exit(0) + } + log.Info("start droplet here:", d.Hostname) + domcfg := &libvirtxml.Domain{} + + addDefaultXml(domcfg, "standard.x86") + // addDefaultXml(domcfg, "memory") + // addDefaultXml(domcfg, "network") + addDefaultXml(domcfg, "spice") + addDefaultXml(domcfg, "qcow") + + domcfg.Type = "kvm" + domcfg.Name = d.Hostname + domcfg.UUID = d.Uuid + + var i uint + i = uint(d.Memory / (1024 * 1024)) + + // var tmp string + // tmp = domcfg.VCPU + domcfg.VCPU = new(libvirtxml.DomainVCPU) + domcfg.VCPU.Value = uint(d.Cpus) + + domcfg.Memory = new(libvirtxml.DomainMemory) + domcfg.Memory.Value = i + domcfg.Memory.Unit = "MiB" + + fmt.Printf("Virt Memory %d %s\n", domcfg.Memory.Value, domcfg.Memory.Unit) + + // addEthernet(domcfg, "04:44:33:11:22:11", "worldbr") + // addEthernet(domcfg, "04:44:33:33:44:55", "greenbr") + + var count int = 0 + for _, n := range d.Networks { + log.Info("add network", d.Hostname, "mac addr", n.Mac, "interface", n.Name) + if n.Name != "worldbr" { + log.Info("OVERRIDE BRIDGE WITH 'worldbr'") + } + addEthernetBridge(domcfg, n.Mac, "worldbr") + // addEthernetTap(domcfg, n.Mac) + count += 1 + } + if count == 1 { + // this is normal + } else { + log.Info("WRONG NUMBER OF ETHERNET INTERFACES:", count) + } + + // add a check here to make these unique + // setRandomMacs(domcfg) + + for _, disk := range d.Disks { + fullname := findDisk([]string{"/home/nfs2", "/var/lib/libvirt/images"}, disk.Filename) + if fullname == "" { + log.Info("can not find disk", d.Hostname, "dir", disk.Filepath, "filename", disk.Filename) + os.Exit(-1) + } else { + // qcow := "/home/nfs/" + d.Hostname + ".qcow2" + setSimpleDisk(domcfg, fullname) + } + } + + writeoutXml(domcfg, d.Hostname) + os.Exit(-1) +} + +func findDisk(dirs []string, filename string) string { + for _, dirname := range dirs { + // log.Info("look in dir", dirname) + var count int + newdir, _ := os.ReadDir(dirname) + for _, file := range newdir { + count += 1 + if file.Name() == filename { + log.Info("Found file", filename, "in", dirname) + return filepath.Join(dirname, file.Name()) + } + } + if count == 0 { + log.Info("Warning? dirname", dirname, "was empty. Not mounted?") + } + } + return "" +} -- cgit v1.2.3