diff options
Diffstat (limited to 'xml.go')
| -rw-r--r-- | xml.go | 107 |
1 files changed, 103 insertions, 4 deletions
@@ -194,6 +194,36 @@ func setRandomMacs(domcfg *libvirtxml.Domain) { // there might be something interesting in a VM // 'standard' here means what I think is standard func dumpNonStandardXML(domcfg *libvirtxml.Domain) { + // dump type + if domcfg.Type == "kvm" { + domcfg.Type = "" + } else { + fmt.Printf("type: %+v\n", domcfg.Type) + } + + // dump normal OS settings + var standardOS bool = false + if domcfg.OS != nil { + if domcfg.OS.Type != nil { + // OS Type: &{Arch:x86_64 Machine:pc-i440fx-5.2 Type:hvm} + t := domcfg.OS.Type + if t.Arch == "x86_64" || t.Machine == "pc-i440fx-5.2" { + standardOS = true + } + } + } + if standardOS { + domcfg.OS = nil + } else { + fmt.Printf("OS: %+v\n", domcfg.OS) + fmt.Printf("OS Type: %+v\n", domcfg.OS.Type) + } + + // ignore XMLName and IOThreads probably + // skip is hard coded in isDomainEmpty() function + // fmt.Printf("XMLName: %+v\n", domcfg.XMLName) + // fmt.Printf("IOThreads: %+v\n", domcfg.IOThreads) + // dump all the clock stuff if it's standard var normalclock bool = true if domcfg.Clock.Offset != "utc" { @@ -472,13 +502,20 @@ func dumpNonStandardXML(domcfg *libvirtxml.Domain) { } // dumpLibvirtxmlDomainNames() - if libvirtxmlDomainEmpty(*domcfg.Devices) { - fmt.Println("Domain Devices are empty") + if libvirtxmlDomainDevicesEmpty(*domcfg.Devices) { + // fmt.Println("Domain Devices are empty") domcfg.Devices = nil } else { fmt.Println("Domain Devices are not empty") } + if libvirtxmlDomainEmpty(*domcfg) { + // fmt.Println("Domain Devices are empty") + domcfg = nil + } else { + fmt.Println("Domain is not yet empty") + } + updatedXML, err := xml.MarshalIndent(domcfg, "", " ") if err != nil { fmt.Printf("Failed to marshal updated XML: %v\n", err) @@ -512,14 +549,73 @@ func dumpLibvirtxmlDomainNames() { } // dump out all the fields in libvirtxml.DomainDeviceList -func libvirtxmlDomainEmpty(mydom libvirtxml.DomainDeviceList) bool { +func libvirtxmlDomainDevicesEmpty(mydom libvirtxml.DomainDeviceList) bool { + var empty bool = true + // Get the reflection object of the variable + v := reflect.ValueOf(mydom) + + // Ensure that we are working with a struct + if v.Kind() == reflect.Struct { + // fmt.Println("Fields and values in libvirtxml.DomainDeviceList:") + + // Loop through each field in the struct + for i := 0; i < v.NumField(); i++ { + // Get field name + field := v.Type().Field(i).Name + + // Get field value + value := v.Field(i) + + if !value.IsValid() { + fmt.Printf("Field: %s is nil or invalid\n", field) + continue + } + + // Check if the field is a string, array, or slice + switch value.Kind() { + case reflect.String: + if value.String() != "" { + fmt.Printf("Field: %s is a String with value: %s\n", field, value.String()) + empty = false + } + case reflect.Slice: + if value.Len() != 0 { + fmt.Printf("Field: %s is a Slice with length: %d\n", field, value.Len()) + empty = false + } + case reflect.Array: + if value.Len() != 0 { + fmt.Printf("Field: %s is an Array with length: %d\n", field, value.Len()) + empty = false + } + case reflect.Ptr: + if !value.IsValid() { + fmt.Println("Field ptr: value:", value) + fmt.Printf("Field ptr: %s is of type: %s\n", field, value.Kind()) + empty = false + } + default: + fmt.Printf("Field: %s is of type: %s\n", field, value.Kind()) + empty = false + } + // Print the field name and value + // fmt.Printf("Field: %s, Value: %v\n", field, value) + } + } else { + fmt.Println("Provided variable is not a struct.") + } + return empty +} + +// dump out all the fields in libvirtxml.DomainDeviceList +func libvirtxmlDomainEmpty(mydom libvirtxml.Domain) bool { var empty bool = true // Get the reflection object of the variable v := reflect.ValueOf(mydom) // Ensure that we are working with a struct if v.Kind() == reflect.Struct { - fmt.Println("Fields and values in libvirtxml.DomainDeviceList:") + // fmt.Println("Fields and values in libvirtxml.DomainDeviceList:") // Loop through each field in the struct for i := 0; i < v.NumField(); i++ { @@ -533,6 +629,9 @@ func libvirtxmlDomainEmpty(mydom libvirtxml.DomainDeviceList) bool { fmt.Printf("Field: %s is nil or invalid\n", field) continue } + if (field == "IOThreads") || (field == "XMLName") { + continue + } // Check if the field is a string, array, or slice switch value.Kind() { |
