Skip to content

Conversation

@atopuzov
Copy link

Handles Hypervisor fileds within Domain. Tested with QEMUCommandline other added for completeness.

	QEMUCommandline      *DomainQEMUCommandline
	QEMUCapabilities     *DomainQEMUCapabilities
	QEMUOverride         *DomainQEMUOverride
	QEMUDeprecation      *DomainQEMUDeprecation
	LXCNamespace         *DomainLXCNamespace
	BHyveCommandline     *DomainBHyveCommandline
	VMWareDataCenterPath *DomainVMWareDataCenterPath
	XenCommandline       *DomainXenCommandline
diff -Naur internal/generated.old/domain_schema.gen.go internal/generated/domain_schema.gen.go
--- internal/generated.old/domain_schema.gen.go 2025-11-20 20:09:21.649643008 +0100
+++ internal/generated/domain_schema.gen.go     2025-11-21 08:03:30.496716016 +0100
@@ -169,8 +169,18 @@
                                        },
                                },
                        },
-                       "key_wrap":        DomainKeyWrapSchemaAttribute(),
-                       "launch_security": DomainLaunchSecuritySchemaAttribute(),
+                       "key_wrap":          DomainKeyWrapSchemaAttribute(),
+                       "launch_security":   DomainLaunchSecuritySchemaAttribute(),
+                       "qemu_commandline":  DomainQEMUCommandlineSchemaAttribute(),
+                       "qemu_capabilities": DomainQEMUCapabilitiesSchemaAttribute(),
+                       "qemu_override":     DomainQEMUOverrideSchemaAttribute(),
+                       "qemu_deprecation":  DomainQEMUDeprecationSchemaAttribute(),
+                       "lxc_namespace":     DomainLXCNamespaceSchemaAttribute(),
+                       "bhyve_commandline": DomainBHyveCommandlineSchemaAttribute(),
+                       "vm_ware_data_center_path": schema.StringAttribute{
+                               Optional: true,
+                       },
+                       "xen_commandline": DomainXenCommandlineSchemaAttribute(),
                },
        }
 }
... (rest of the change removed)

Files generated

Only in internal/generated/: conversion_test.go
Only in internal/generated/: domain_audio_channel_settings_convert.gen.go
Only in internal/generated/: domain_audio_channel_settings_model.gen.go
Only in internal/generated/: domain_audio_channel_settings_schema.gen.go
Only in internal/generated/: domain_b_hyve_commandline_arg_convert.gen.go
Only in internal/generated/: domain_b_hyve_commandline_arg_model.gen.go
Only in internal/generated/: domain_b_hyve_commandline_arg_schema.gen.go
Only in internal/generated/: domain_b_hyve_commandline_convert.gen.go
Only in internal/generated/: domain_b_hyve_commandline_env_convert.gen.go
Only in internal/generated/: domain_b_hyve_commandline_env_model.gen.go
Only in internal/generated/: domain_b_hyve_commandline_env_schema.gen.go
Only in internal/generated/: domain_b_hyve_commandline_model.gen.go
Only in internal/generated/: domain_b_hyve_commandline_schema.gen.go
Files internal/generated.old/domain_convert.gen.go and internal/generated/domain_convert.gen.go differ
Only in internal/generated/: domain_lxc_namespace_convert.gen.go
Only in internal/generated/: domain_lxc_namespace_map_convert.gen.go
Only in internal/generated/: domain_lxc_namespace_map_model.gen.go
Only in internal/generated/: domain_lxc_namespace_map_schema.gen.go
Only in internal/generated/: domain_lxc_namespace_model.gen.go
Only in internal/generated/: domain_lxc_namespace_schema.gen.go
Files internal/generated.old/domain_model.gen.go and internal/generated/domain_model.gen.go differ
Only in internal/generated/: domain_qemu_capabilities_convert.gen.go
Only in internal/generated/: domain_qemu_capabilities_entry_convert.gen.go
Only in internal/generated/: domain_qemu_capabilities_entry_model.gen.go
Only in internal/generated/: domain_qemu_capabilities_entry_schema.gen.go
Only in internal/generated/: domain_qemu_capabilities_model.gen.go
Only in internal/generated/: domain_qemu_capabilities_schema.gen.go
Only in internal/generated/: domain_qemu_commandline_arg_convert.gen.go
Only in internal/generated/: domain_qemu_commandline_arg_model.gen.go
Only in internal/generated/: domain_qemu_commandline_arg_schema.gen.go
Only in internal/generated/: domain_qemu_commandline_convert.gen.go
Only in internal/generated/: domain_qemu_commandline_env_convert.gen.go
Only in internal/generated/: domain_qemu_commandline_env_model.gen.go
Only in internal/generated/: domain_qemu_commandline_env_schema.gen.go
Only in internal/generated/: domain_qemu_commandline_model.gen.go
Only in internal/generated/: domain_qemu_commandline_schema.gen.go
Only in internal/generated/: domain_qemu_deprecation_convert.gen.go
Only in internal/generated/: domain_qemu_deprecation_model.gen.go
Only in internal/generated/: domain_qemu_deprecation_schema.gen.go
Only in internal/generated/: domain_qemu_override_convert.gen.go
Only in internal/generated/: domain_qemu_override_device_convert.gen.go
Only in internal/generated/: domain_qemu_override_device_model.gen.go
Only in internal/generated/: domain_qemu_override_device_schema.gen.go
Only in internal/generated/: domain_qemu_override_frontend_convert.gen.go
Only in internal/generated/: domain_qemu_override_frontend_model.gen.go
Only in internal/generated/: domain_qemu_override_frontend_schema.gen.go
Only in internal/generated/: domain_qemu_override_model.gen.go
Only in internal/generated/: domain_qemu_override_property_convert.gen.go
Only in internal/generated/: domain_qemu_override_property_model.gen.go
Only in internal/generated/: domain_qemu_override_property_schema.gen.go
Only in internal/generated/: domain_qemu_override_schema.gen.go
Files internal/generated.old/domain_schema.gen.go and internal/generated/domain_schema.gen.go differ
Only in internal/generated/: domain_xen_commandline_arg_convert.gen.go
Only in internal/generated/: domain_xen_commandline_arg_model.gen.go
Only in internal/generated/: domain_xen_commandline_arg_schema.gen.go
Only in internal/generated/: domain_xen_commandline_convert.gen.go
Only in internal/generated/: domain_xen_commandline_model.gen.go
Only in internal/generated/: domain_xen_commandline_schema.gen.go

@dmacvicar
Copy link
Owner

I'd need more context on why these are missing the xml tags.

@atopuzov
Copy link
Author

libvirt-go-xml does not have xml:"..." tags on these specific fields in the parent Domain struct but uses the XMLName field inside the child structs to handle the XML Namespaces.

For example, DomainQEMUCommandline defines its own XML behavior internally:

type DomainQEMUCommandline struct {
    XMLName xml.Name `xml:"http://libvirt.org/schemas/domain/qemu/1.0 commandline"`
    // ...
}

The current generator logic skips any field that doesn't have an xml tag in the parent struct. Because of the design pattern mentioned above, the generator was silently ignoring all these hypervisor fields. And this might also be connected to my other PR about anonymous fields not being processed.

Anyway my best guess they use this pattern to avoid adding more namespaces to the generated XML, eg. if you don't provide qqmu command line args it doesn't add the http://libvirt.org/schemas/domain/qemu/1.0 namespace to the XML.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants