From 4d43c36db5d87fcd8a30242e424017468a7c48c0 Mon Sep 17 00:00:00 2001 From: Jeff Carr Date: Fri, 25 Oct 2024 16:40:05 -0500 Subject: [PATCH] more xml checks Signed-off-by: Jeff Carr --- addDroplet.go | 7 +++++-- change.go | 2 +- libvirtxml.go | 44 ++++++++++++++++++++++++++++++++++++++------ 3 files changed, 44 insertions(+), 9 deletions(-) diff --git a/addDroplet.go b/addDroplet.go index 4a1f314..51942d0 100644 --- a/addDroplet.go +++ b/addDroplet.go @@ -19,7 +19,10 @@ func addDomainDroplet(domcfg *libvirtxml.Domain) (*DropletT, error) { return nil, errors.New("domcfg == nil") } - d, _ := findDomain(domcfg) + d, err := findDomain(domcfg) + if err != nil { + return nil, err + } if d == nil { // this is a new unknown droplet (not in the config file) d = new(DropletT) @@ -38,7 +41,7 @@ func addDomainDroplet(domcfg *libvirtxml.Domain) (*DropletT, error) { me.changed = true } - err := updateDroplet(d, domcfg) + err = updateDroplet(d, domcfg) if err != nil { log.Info("updateDroplet() failed for", d.pb.Hostname) return d, errors.New("update failed for " + domcfg.Name) diff --git a/change.go b/change.go index 669f55d..58558b1 100644 --- a/change.go +++ b/change.go @@ -45,7 +45,7 @@ func convertToString(x any) string { case string: return x.(string) case int: - return fmt.Sprintf("%d", x.(int64)) + return fmt.Sprintf("%d", x.(int)) case uint: return fmt.Sprintf("%d", x.(uint)) case bool: diff --git a/libvirtxml.go b/libvirtxml.go index f872c75..b40c3a1 100644 --- a/libvirtxml.go +++ b/libvirtxml.go @@ -351,11 +351,19 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) (string, error) { var secnormal bool = true if len(domcfg.SecLabel) != 0 { for _, sec := range domcfg.SecLabel { - if sec.Model == "apparmor" { - // this should be configured in dom0 - } else { - fmt.Printf("? SecLabel: %+v\n", sec) - fmt.Printf("? SecLabel.Model: %+v\n", sec.Model) + switch sec.Model { + case "apparmor": + // log.Info("ignoring SecLabel apparmor. not supported yet") + // log.Info("you must set this later if you need this") + // xmlAny(sec) + case "dac": + // log.Info("ignoring SecLabel dac. not supported yet") + // log.Info("you must set this later if you need this") + // xmlAny(sec) + default: + fmt.Printf("unknown SecLabel: %+v\n", sec) + fmt.Printf("unknown SecLabel.Model: %+v\n", sec.Model) + xmlAny(sec) secnormal = false } } @@ -371,6 +379,7 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) (string, error) { fmt.Printf("Not saving Domain.Metadata: %+v\n", domcfg.Metadata) domcfg.Metadata = nil } + // ignore Resource if domcfg.Resource != nil { if domcfg.Resource.Partition == "/machine" { @@ -380,6 +389,12 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) (string, error) { } } + // ignore Resource + if domcfg.ID != nil { + // ignore domain id + domcfg.ID = nil + } + // this will move elsewhere in the protobuf someday // ignore all these for now if domcfg.OnPoweroff != "" { // normally "destroy" @@ -677,6 +692,23 @@ func finalEmptyCheck(domcfg *libvirtxml.Domain) (string, error) { return final, nil } +func xmlAny(a any) (string, error) { + updatedXML, err := xml.MarshalIndent(a, "", " ") + if err != nil { + fmt.Printf("Failed to marshal updated XML: %v\n", err) + return "", err + } + final := string(updatedXML) + if final == "" { + // everything seems to have been parsed pretty standard + return "", nil + } + log.Info("Non-Standard XML Start") + fmt.Println(final) + log.Info("Non-Standard XML End") + return final, nil +} + func warnUserOfNonStandardXML(domcfg *libvirtxml.Domain) (string, error) { updatedXML, err := xml.MarshalIndent(domcfg, "", " ") if err != nil { @@ -832,7 +864,7 @@ func libvirtxmlDomainEmpty(mydom libvirtxml.Domain) bool { } case reflect.Struct: if IsStructEmptyOrNil(value) { - fmt.Printf("XML Field ignore empty Struct %s\n", field) + // fmt.Printf("XML Field ignore empty Struct %s\n", field) } else { fmt.Printf("Field Struct is not empty %s is %+v\n", field, value) empty = false