From a1593b0b88ec416e9dd2b3f62fcfebdc7957c5db Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Wed, 23 Oct 2024 17:49:15 -0500 Subject: [PATCH] puts the spice port in the protobuf Signed-off-by: Jeff Carr --- addDroplet.go | 29 ++++++++++++++++++++ xml.go | 73 +++++++++++++++++++++++++++++++++++++-------------- 2 files changed, 83 insertions(+), 19 deletions(-) diff --git a/addDroplet.go b/addDroplet.go index fe25ab8..9254f05 100644 --- a/addDroplet.go +++ b/addDroplet.go @@ -115,6 +115,26 @@ func updateDroplet(d *DropletT, domcfg *libvirtxml.Domain) bool { me.changed = true } + // update spice port + if domcfg.Devices.Graphics != nil { + for _, g := range domcfg.Devices.Graphics { + if g.Spice == nil { + continue + } + var s *libvirtxml.DomainGraphicSpice + s = g.Spice + // fmt.Printf("Spice: %d %+v %s\n", i, s, s.AutoPort) + if s.AutoPort == "yes" { + // should ignore either way + } else { + // print out, but ignore the port number + d.pb.SpicePort = int64(s.Port) + fmt.Printf("Spice Port set to = %d\n", s.Port) + me.changed = true + } + } + } + // check type if domcfg.Type != "kvm" { fmt.Printf("not kvm. Virt type == %s\n", domcfg.Type) @@ -139,6 +159,10 @@ func updateMemory(d *DropletT, domcfg *libvirtxml.Domain) bool { return false } + if domcfg.Memory == nil { + return true + } + // check memory if domcfg.Memory.Unit == "KiB" { var m int64 @@ -185,6 +209,11 @@ func updateNetwork(d *DropletT, domcfg *libvirtxml.Domain) bool { var macs []string // Iterate over the network interfaces and print the MAC addresses for _, iface := range domcfg.Devices.Interfaces { + // fmt.Printf("iface: %+v\n", iface) + // fmt.Printf("MAC: %+v\n", iface.MAC) + // fmt.Printf("Source: %+v\n", iface.Source) + // fmt.Printf("Bridge: %+v\n", iface.Source.Bridge) + // fmt.Printf("Model: %+v\n", iface.Model) if iface.MAC != nil { // iface.MAC.Address = "aa:bb:aa:bb:aa:ff" // fmt.Printf("MAC Address: %+v\n", iface.MAC) diff --git a/xml.go b/xml.go index 8ccd6d4..d50a368 100644 --- a/xml.go +++ b/xml.go @@ -160,6 +160,8 @@ func clearEthernet(domcfg *libvirtxml.Domain) { // add a new ethernet interface with mac assigned to bridge name func addEthernet(domcfg *libvirtxml.Domain, mac string, brname string) { // Define a new disk with "mynew.qcow2" + type DomainInterfaceType string + newNet := libvirtxml.DomainInterface{ MAC: &libvirtxml.DomainInterfaceMAC{ Address: mac, @@ -304,9 +306,12 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) { domcfg.Memory = nil domcfg.CurrentMemory = nil domcfg.VCPU = nil - if domcfg.CPU.Mode == "host-model" { + switch domcfg.CPU.Mode { + case "host-passthrough": domcfg.CPU = nil - } else { + case "host-model": + domcfg.CPU = nil + default: fmt.Printf("? CPU Mode: %+v\n", domcfg.CPU.Mode) } @@ -351,6 +356,7 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) { case "usb": switch controller.Model { case "ich9-ehci1": + case "qemu-xhci": // fmt.Printf("OK USB: %s, %d\n", controller.Model, *controller.Index) case "ich9-uhci1": // fmt.Printf("OK USB: %s, %d\n", controller.Model, *controller.Index) @@ -370,6 +376,9 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) { // fmt.Printf("IGNORE IDE\n") case "virtio-serial": // fmt.Printf("IGNORE virtio-serial\n") + case "sata": + // fmt.Printf("SATA: %s, %d\n", controller.Model, *controller.Index) + // fmt.Printf("SATA: %+v\n", controller) case "scsi": switch controller.Model { case "lsilogic": @@ -379,14 +388,23 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) { normalPCI = false } case "pci": - fmt.Printf("PCI: %s, %d\n", controller.Model, *controller.Index) - // Domain:0xc0002d2760 Bus:0xc0002d2768 Slot:0xc0002d2770 Function:0xc0002d2778 MultiFunction: - pci := controller.Address.PCI - fmt.Printf("PCI: Domain: %+v Slot %d Function %d\n", *pci.Domain, *pci.Slot, *pci.Function) - normalPCI = false - keepPCI = append(keepPCI, controller) + switch controller.Model { + case "pcie-root": + // pcie-root + case "pcie-root-port": + // pcie-root + case "pcie-to-pci-bridge": + // pcie-root + default: + fmt.Printf("PCI: %s, %d\n", controller.Model, *controller.Index) + // Domain:0xc0002d2760 Bus:0xc0002d2768 Slot:0xc0002d2770 Function:0xc0002d2778 MultiFunction: + pci := controller.Address.PCI + fmt.Printf("PCI: Domain: %+v Slot %d Function %d\n", *pci.Domain, *pci.Slot, *pci.Function) + normalPCI = false + keepPCI = append(keepPCI, controller) + } default: - fmt.Printf("? %s: %+v\n", controller.Type, controller) + fmt.Printf("? controllerType: %s: %+v\n", controller.Type, controller) normalPCI = false keepPCI = append(keepPCI, controller) } @@ -419,17 +437,25 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) { // ignore Graphics == Spice when AutoPort = 'yes' var normalSpice bool = true if domcfg.Devices.Graphics != nil { - for _, g := range domcfg.Devices.Graphics { - if g.Spice != nil { - // fmt.Printf("Graphics: %d %+v\n", i, g) - var s *libvirtxml.DomainGraphicSpice - s = g.Spice - // fmt.Printf("Spice: %d %+v %s\n", i, s, s.AutoPort) - if s.AutoPort != "yes" { - normalSpice = false - } - } else { + for i, g := range domcfg.Devices.Graphics { + if g.Spice == nil { + // figure out what to do with non-spice stuff + fmt.Printf("Graphics: %d %+v\n", i, g) normalSpice = false + continue + } + // this is a spice definition, just ignore it + // because port mappings and network access will be handled + // somewhere else someday + // fmt.Printf("Graphics: %d %+v\n", i, g) + var s *libvirtxml.DomainGraphicSpice + s = g.Spice + // fmt.Printf("Spice: %d %+v %s\n", i, s, s.AutoPort) + if s.AutoPort == "yes" { + // should ignore either way + } else { + // print out, but ignore the port number + fmt.Printf("Spice Port = %d\n", s.Port) } } } @@ -546,6 +572,15 @@ func dumpLibvirtxmlDomainNames() { field := t.Field(i) fmt.Println("DomainDeviceList:", field.Name) } + + var iface libvirtxml.DomainInterface + t = reflect.TypeOf(iface) + + fmt.Println("Fields in libvirtxml.DomainInterface:") + for i := 0; i < t.NumField(); i++ { + field := t.Field(i) + fmt.Println("DomainInterface:", field.Name) + } } // dump out all the fields in libvirtxml.DomainDeviceList