[PATCH 0/2] Introduce hardware UUID (hwuuid) element

Following on from the discussions at [1] and more recently [2], this series introduces a new hardware UUID (hwuuid) element that allows an external UUID to be provided to the guest, as opposed to the libvirt domain UUID. The use case for this feature is to allow a domain to cloned and then restarted without changing its guest-visible UUID e.g. via dmidecode. Patch 1 introduces the new hardware UUID (hwuuid) element along with an implementation for the QEMU driver, whilst patch 2 adds additional tests to ensure the hwuuid functionality is working as expected. Note that from reading the source it doesn't appear as if all virtualisation platforms will support this feature: I've included the relevant changes for the QEMU driver since that is what we use here at Nutanix. Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> [1] https://lists.libvirt.org/archives/list/devel@lists.libvirt.org/thread/YXN2L... [2] https://lists.libvirt.org/archives/list/devel@lists.libvirt.org/thread/HGFTR... Mark Cave-Ayland (2): conf: introduce hardware UUID (hwuuid) element qemuxmlconftest: add tests for new hardware UUID (hwuuid) element docs/formatdomain.rst | 7 ++++ src/conf/domain_conf.c | 38 +++++++++++++++-- src/conf/domain_conf.h | 1 + src/conf/schemas/domaincommon.rng | 5 +++ src/qemu/qemu_command.c | 6 ++- ...hwuuid-smbios-uuid-match.x86_64-latest.err | 1 + .../hwuuid-smbios-uuid-match.xml | 36 ++++++++++++++++ .../qemuxmlconfdata/hwuuid.x86_64-latest.args | 35 ++++++++++++++++ .../qemuxmlconfdata/hwuuid.x86_64-latest.xml | 41 +++++++++++++++++++ tests/qemuxmlconfdata/hwuuid.xml | 30 ++++++++++++++ tests/qemuxmlconftest.c | 3 ++ 11 files changed, 199 insertions(+), 4 deletions(-) create mode 100644 tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.xml create mode 100644 tests/qemuxmlconfdata/hwuuid.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/hwuuid.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/hwuuid.xml -- 2.43.0

The hardware UUID (hwuuid) element provides a mechanism to supply an external UUID to the guest, as opposed to the libvirt domain UUID. This is to allow for the scenario whereby a domain can be stopped, cloned and then started as a new domain without altering the guest-visible UUID. Add the element, documentation and core code for the hwuuid feature along with an implementation for the QEMU driver. Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> --- docs/formatdomain.rst | 7 ++++++ src/conf/domain_conf.c | 38 ++++++++++++++++++++++++++++--- src/conf/domain_conf.h | 1 + src/conf/schemas/domaincommon.rng | 5 ++++ src/qemu/qemu_command.c | 6 ++++- 5 files changed, 53 insertions(+), 4 deletions(-) diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 9a2f065590..7b10dfa3da 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -54,6 +54,13 @@ General metadata :since:`Since 0.8.7`, it is also possible to provide the UUID via a `SMBIOS System Information`_ specification. +``hwuuid`` + The optional ``hwuuid`` element can be used to supply an alternative UUID for + identifying the virtual machine from the domain ``uuid`` above. The difference + between using the ``hwuuid`` element and simply providing an alternative UUID + via a `SMBIOS System Information`_ specification is that the ``hwuuid`` affects + all devices that expose the UUID to the guest. + :since:`Since 11.6.0 QEMU/KVM only` ``genid`` :since:`Since 4.4.0`, the ``genid`` element can be used to add a Virtual Machine Generation ID which exposes a 128-bit, cryptographically random, diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bfc62b6270..63603ca527 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13098,6 +13098,7 @@ static int virSysinfoSystemParseXML(xmlNodePtr node, xmlXPathContextPtr ctxt, virSysinfoSystemDef **sysdef, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13122,11 +13123,18 @@ virSysinfoSystemParseXML(xmlNodePtr node, } if (uuid_generated) { memcpy(domUUID, uuidbuf, VIR_UUID_BUFLEN); - } else if (memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) != 0) { + } else if (!virUUIDIsValid(hwUUID) && + memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) != 0) { virReportError(VIR_ERR_XML_DETAIL, "%s", _("UUID mismatch between <uuid> and <sysinfo>")); return -1; } + if (virUUIDIsValid(hwUUID) && + memcmp(hwUUID, uuidbuf, VIR_UUID_BUFLEN) != 0) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("UUID mismatch between <hwuuid> and <sysinfo>")); + return -1; + } /* Although we've validated the UUID as good, virUUIDParse() is * lax with respect to allowing extraneous "-" and " ", but the * underlying hypervisor may be less forgiving. Use virUUIDFormat() @@ -13263,6 +13271,7 @@ virSysinfoChassisParseXML(xmlNodePtr node, static int virSysinfoParseSMBIOSDef(virSysinfoDef *def, xmlXPathContextPtr ctxt, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13276,7 +13285,7 @@ virSysinfoParseSMBIOSDef(virSysinfoDef *def, /* Extract system related metadata */ if ((tmpnode = virXPathNode("./system[1]", ctxt)) != NULL) { - if (virSysinfoSystemParseXML(tmpnode, ctxt, &def->system, + if (virSysinfoSystemParseXML(tmpnode, ctxt, &def->system, hwUUID, domUUID, uuid_generated) < 0) return -1; } @@ -13363,6 +13372,7 @@ virSysinfoParseFWCfgDef(virSysinfoDef *def, static virSysinfoDef * virSysinfoParseXML(xmlNodePtr node, xmlXPathContextPtr ctxt, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13377,7 +13387,8 @@ virSysinfoParseXML(xmlNodePtr node, switch (def->type) { case VIR_SYSINFO_SMBIOS: - if (virSysinfoParseSMBIOSDef(def, ctxt, domUUID, uuid_generated) < 0) + if (virSysinfoParseSMBIOSDef(def, ctxt, hwUUID, domUUID, + uuid_generated) < 0) return NULL; break; @@ -18667,6 +18678,21 @@ virDomainDefParseIDs(virDomainDef *def, VIR_FREE(tmp); } + /* Extract hardware uuid (optional). For some use cases e.g. cloning a + * domain from a snapshot, the hardware uuid must remain constant and + * separate from the domain uuid. */ + tmp = virXPathString("string(./hwuuid[1])", ctxt); + if (tmp) { + if (virUUIDParse(tmp, def->hw_uuid) < 0) { + virReportError(VIR_ERR_INTERNAL_ERROR, + "%s", _("malformed hwuuid element")); + return -1; + } + VIR_FREE(tmp); + } else { + memset(def->hw_uuid, 0, VIR_UUID_BUFLEN); + } + /* Extract domain genid - a genid can either be provided or generated */ if ((n = virXPathNodeSet("./genid", ctxt, &nodes)) < 0) return -1; @@ -20132,6 +20158,7 @@ virDomainDefParseXML(xmlXPathContextPtr ctxt, for (i = 0; i < n; i++) { virSysinfoDef *sysinfo = virSysinfoParseXML(nodes[i], ctxt, + def->hw_uuid, def->uuid, uuid_generated); if (!sysinfo) @@ -28903,6 +28930,11 @@ virDomainDefFormatInternalSetRootName(virDomainDef *def, virUUIDFormat(uuid, uuidstr); virBufferAsprintf(buf, "<uuid>%s</uuid>\n", uuidstr); + if (virUUIDIsValid(def->hw_uuid)) { + virUUIDFormat(def->hw_uuid, uuidstr); + virBufferAsprintf(buf, "<hwuuid>%s</hwuuid>\n", uuidstr); + } + if (def->genidRequested) { char genidstr[VIR_UUID_STRING_BUFLEN]; diff --git a/src/conf/domain_conf.h b/src/conf/domain_conf.h index 6997cf7c09..a00ba729fd 100644 --- a/src/conf/domain_conf.h +++ b/src/conf/domain_conf.h @@ -3115,6 +3115,7 @@ struct _virDomainDef { int virtType; /* enum virDomainVirtType */ int id; unsigned char uuid[VIR_UUID_BUFLEN]; + unsigned char hw_uuid[VIR_UUID_BUFLEN]; unsigned char genid[VIR_UUID_BUFLEN]; bool genidRequested; diff --git a/src/conf/schemas/domaincommon.rng b/src/conf/schemas/domaincommon.rng index 2d6e15f144..e39dacfff7 100644 --- a/src/conf/schemas/domaincommon.rng +++ b/src/conf/schemas/domaincommon.rng @@ -47,6 +47,11 @@ <ref name="UUID"/> </element> </optional> + <optional> + <element name="hwuuid"> + <ref name="UUID"/> + </element> + </optional> <optional> <element name="genid"> <choice> diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index 7658cc4d39..c7fd2eb183 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -10713,7 +10713,11 @@ qemuBuildCommandLine(virDomainObj *vm, qemuBuildNumaCommandLine(cfg, def, cmd, priv) < 0) return NULL; - virUUIDFormat(def->uuid, uuid); + if (virUUIDIsValid(def->hw_uuid)) { + virUUIDFormat(def->hw_uuid, uuid); + } else { + virUUIDFormat(def->uuid, uuid); + } virCommandAddArgList(cmd, "-uuid", uuid, NULL); if (qemuBuildSmbiosCommandLine(cmd, driver, def) < 0) -- 2.43.0

On Wed, Jul 16, 2025 at 02:17:46PM +0100, Mark Cave-Ayland wrote:
The hardware UUID (hwuuid) element provides a mechanism to supply an external UUID to the guest, as opposed to the libvirt domain UUID. This is to allow for the scenario whereby a domain can be stopped, cloned and then started as a new domain without altering the guest-visible UUID.
Add the element, documentation and core code for the hwuuid feature along with an implementation for the QEMU driver.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> --- docs/formatdomain.rst | 7 ++++++ src/conf/domain_conf.c | 38 ++++++++++++++++++++++++++++--- src/conf/domain_conf.h | 1 + src/conf/schemas/domaincommon.rng | 5 ++++ src/qemu/qemu_command.c | 6 ++++- 5 files changed, 53 insertions(+), 4 deletions(-)
diff --git a/docs/formatdomain.rst b/docs/formatdomain.rst index 9a2f065590..7b10dfa3da 100644 --- a/docs/formatdomain.rst +++ b/docs/formatdomain.rst @@ -54,6 +54,13 @@ General metadata
:since:`Since 0.8.7`, it is also possible to provide the UUID via a `SMBIOS System Information`_ specification. +``hwuuid`` + The optional ``hwuuid`` element can be used to supply an alternative UUID for + identifying the virtual machine from the domain ``uuid`` above. The difference + between using the ``hwuuid`` element and simply providing an alternative UUID + via a `SMBIOS System Information`_ specification is that the ``hwuuid`` affects + all devices that expose the UUID to the guest. + :since:`Since 11.6.0 QEMU/KVM only` ``genid`` :since:`Since 4.4.0`, the ``genid`` element can be used to add a Virtual Machine Generation ID which exposes a 128-bit, cryptographically random, diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index bfc62b6270..63603ca527 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -13098,6 +13098,7 @@ static int virSysinfoSystemParseXML(xmlNodePtr node, xmlXPathContextPtr ctxt, virSysinfoSystemDef **sysdef, + unsigned char *hwUUID, unsigned char *domUUID, bool uuid_generated) { @@ -13122,11 +13123,18 @@ virSysinfoSystemParseXML(xmlNodePtr node, } if (uuid_generated) { memcpy(domUUID, uuidbuf, VIR_UUID_BUFLEN); - } else if (memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) != 0) { + } else if (!virUUIDIsValid(hwUUID) && + memcmp(domUUID, uuidbuf, VIR_UUID_BUFLEN) != 0) { virReportError(VIR_ERR_XML_DETAIL, "%s", _("UUID mismatch between <uuid> and <sysinfo>")); return -1; } + if (virUUIDIsValid(hwUUID) && + memcmp(hwUUID, uuidbuf, VIR_UUID_BUFLEN) != 0) { + virReportError(VIR_ERR_XML_DETAIL, "%s", + _("UUID mismatch between <hwuuid> and <sysinfo>")); + return -1; + }
I think it'd be slightly clearer to re-arrange the order and nesting here if (uuid_generated) { ... } else if (virUUIDIsValid(hwUUID)) { if (memcmp(....)) { ...err } } else { if (memcmp(....)) { ...err } } With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|

Add new 'hwuuid' and 'hwuuid-smbios-uuid-match' tests to verify that the new hardware UUID (hwuuid) element is working as intended. In particular the 'hwuuid-smbios-uuid-match' test is designed to ensure that the hwuuid and smbios UUIDs are always identical, similar to how the existing logic works for the domain UUID and the smbios UUID. Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> --- ...hwuuid-smbios-uuid-match.x86_64-latest.err | 1 + .../hwuuid-smbios-uuid-match.xml | 36 ++++++++++++++++ .../qemuxmlconfdata/hwuuid.x86_64-latest.args | 35 ++++++++++++++++ .../qemuxmlconfdata/hwuuid.x86_64-latest.xml | 41 +++++++++++++++++++ tests/qemuxmlconfdata/hwuuid.xml | 30 ++++++++++++++ tests/qemuxmlconftest.c | 3 ++ 6 files changed, 146 insertions(+) create mode 100644 tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.xml create mode 100644 tests/qemuxmlconfdata/hwuuid.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/hwuuid.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/hwuuid.xml diff --git a/tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.x86_64-latest.err b/tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.x86_64-latest.err new file mode 100644 index 0000000000..10a98baf4b --- /dev/null +++ b/tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.x86_64-latest.err @@ -0,0 +1 @@ +UUID mismatch between <hwuuid> and <sysinfo> diff --git a/tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.xml b/tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.xml new file mode 100644 index 0000000000..0fe95b4ed8 --- /dev/null +++ b/tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.xml @@ -0,0 +1,36 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>f1449954-3a7e-48f8-aa7f-1f25fd6fa38f</uuid> + <hwuuid>af2d912f-5f99-4036-a9a1-8739b1f34518</hwuuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <sysinfo type='smbios'> + <system> + <entry name='uuid'>22173deb-d53e-4db9-b874-93f5bba6e98b</entry> + </system> + </sysinfo> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + <smbios mode='sysinfo'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='ide' index='0'/> + <controller type='usb' index='0'/> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/hwuuid.x86_64-latest.args b/tests/qemuxmlconfdata/hwuuid.x86_64-latest.args new file mode 100644 index 0000000000..fa3eb6b163 --- /dev/null +++ b/tests/qemuxmlconfdata/hwuuid.x86_64-latest.args @@ -0,0 +1,35 @@ +LC_ALL=C \ +PATH=/bin \ +HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1 \ +USER=test \ +LOGNAME=test \ +XDG_DATA_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.local/share \ +XDG_CACHE_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.cache \ +XDG_CONFIG_HOME=/var/lib/libvirt/qemu/domain--1-QEMUGuest1/.config \ +/usr/bin/qemu-system-x86_64 \ +-name guest=QEMUGuest1,debug-threads=on \ +-S \ +-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/var/lib/libvirt/qemu/domain--1-QEMUGuest1/master-key.aes"}' \ +-machine pc,usb=off,dump-guest-core=off,memory-backend=pc.ram,acpi=off \ +-accel tcg \ +-cpu qemu64 \ +-m size=219136k \ +-object '{"qom-type":"memory-backend-ram","id":"pc.ram","size":224395264}' \ +-overcommit mem-lock=off \ +-smp 1,sockets=1,cores=1,threads=1 \ +-uuid 5d5b0f1d-128b-4517-8e65-b258a8734c1d \ +-display none \ +-no-user-config \ +-nodefaults \ +-chardev socket,id=charmonitor,fd=1729,server=on,wait=off \ +-mon chardev=charmonitor,id=monitor,mode=control \ +-rtc base=utc \ +-no-shutdown \ +-boot strict=on \ +-device '{"driver":"piix3-usb-uhci","id":"usb","bus":"pci.0","addr":"0x1.0x2"}' \ +-blockdev '{"driver":"host_device","filename":"/dev/HostVG/QEMUGuest1","node-name":"libvirt-1-storage","read-only":false}' \ +-device '{"driver":"ide-hd","bus":"ide.0","unit":0,"drive":"libvirt-1-storage","id":"ide0-0-0","bootindex":1}' \ +-audiodev '{"id":"audio1","driver":"none"}' \ +-device '{"driver":"virtio-balloon-pci","id":"balloon0","bus":"pci.0","addr":"0x2"}' \ +-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,resourcecontrol=deny \ +-msg timestamp=on diff --git a/tests/qemuxmlconfdata/hwuuid.x86_64-latest.xml b/tests/qemuxmlconfdata/hwuuid.x86_64-latest.xml new file mode 100644 index 0000000000..a0cc12f698 --- /dev/null +++ b/tests/qemuxmlconfdata/hwuuid.x86_64-latest.xml @@ -0,0 +1,41 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>33721861-ccee-4dc2-858c-5f1e4629771f</uuid> + <hwuuid>5d5b0f1d-128b-4517-8e65-b258a8734c1d</hwuuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <cpu mode='custom' match='exact' check='none'> + <model fallback='forbid'>qemu64</model> + </cpu> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='block' device='disk'> + <driver name='qemu' type='raw'/> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='ide' index='0'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x1'/> + </controller> + <controller type='usb' index='0' model='piix3-uhci'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x01' function='0x2'/> + </controller> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <audio id='1' type='none'/> + <memballoon model='virtio'> + <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> + </memballoon> + </devices> +</domain> diff --git a/tests/qemuxmlconfdata/hwuuid.xml b/tests/qemuxmlconfdata/hwuuid.xml new file mode 100644 index 0000000000..6bd052b9ad --- /dev/null +++ b/tests/qemuxmlconfdata/hwuuid.xml @@ -0,0 +1,30 @@ +<domain type='qemu'> + <name>QEMUGuest1</name> + <uuid>33721861-ccee-4dc2-858c-5f1e4629771f</uuid> + <hwuuid>5d5b0f1d-128b-4517-8e65-b258a8734c1d</hwuuid> + <memory unit='KiB'>219100</memory> + <currentMemory unit='KiB'>219100</currentMemory> + <vcpu placement='static'>1</vcpu> + <os> + <type arch='x86_64' machine='pc'>hvm</type> + <boot dev='hd'/> + </os> + <clock offset='utc'/> + <on_poweroff>destroy</on_poweroff> + <on_reboot>restart</on_reboot> + <on_crash>destroy</on_crash> + <devices> + <emulator>/usr/bin/qemu-system-x86_64</emulator> + <disk type='block' device='disk'> + <source dev='/dev/HostVG/QEMUGuest1'/> + <target dev='hda' bus='ide'/> + <address type='drive' controller='0' bus='0' target='0' unit='0'/> + </disk> + <controller type='ide' index='0'/> + <controller type='usb' index='0'/> + <controller type='pci' index='0' model='pci-root'/> + <input type='mouse' bus='ps2'/> + <input type='keyboard' bus='ps2'/> + <memballoon model='virtio'/> + </devices> +</domain> diff --git a/tests/qemuxmlconftest.c b/tests/qemuxmlconftest.c index 9fba984290..c97d7381e4 100644 --- a/tests/qemuxmlconftest.c +++ b/tests/qemuxmlconftest.c @@ -3026,6 +3026,9 @@ mymain(void) DO_TEST_CAPS_LATEST("schema-reorder-domain-subelements"); + DO_TEST_CAPS_LATEST("hwuuid"); + DO_TEST_CAPS_LATEST_PARSE_ERROR("hwuuid-smbios-uuid-match"); + /* check that all input files were actually used here */ if (testConfXMLCheck(existingTestCases) < 0) ret = -1; -- 2.43.0

On Wed, Jul 16, 2025 at 02:17:47PM +0100, Mark Cave-Ayland wrote:
Add new 'hwuuid' and 'hwuuid-smbios-uuid-match' tests to verify that the new hardware UUID (hwuuid) element is working as intended.
In particular the 'hwuuid-smbios-uuid-match' test is designed to ensure that the hwuuid and smbios UUIDs are always identical, similar to how the existing logic works for the domain UUID and the smbios UUID.
Signed-off-by: Mark Cave-Ayland <mark.caveayland@nutanix.com> --- ...hwuuid-smbios-uuid-match.x86_64-latest.err | 1 + .../hwuuid-smbios-uuid-match.xml | 36 ++++++++++++++++ .../qemuxmlconfdata/hwuuid.x86_64-latest.args | 35 ++++++++++++++++ .../qemuxmlconfdata/hwuuid.x86_64-latest.xml | 41 +++++++++++++++++++ tests/qemuxmlconfdata/hwuuid.xml | 30 ++++++++++++++ tests/qemuxmlconftest.c | 3 ++ 6 files changed, 146 insertions(+) create mode 100644 tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.x86_64-latest.err create mode 100644 tests/qemuxmlconfdata/hwuuid-smbios-uuid-match.xml create mode 100644 tests/qemuxmlconfdata/hwuuid.x86_64-latest.args create mode 100644 tests/qemuxmlconfdata/hwuuid.x86_64-latest.xml create mode 100644 tests/qemuxmlconfdata/hwuuid.xml
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com> With regards, Daniel -- |: https://berrange.com -o- https://www.flickr.com/photos/dberrange :| |: https://libvirt.org -o- https://fstop138.berrange.com :| |: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
participants (2)
-
Daniel P. Berrangé
-
Mark Cave-Ayland