mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-12-22 13:45:38 +00:00
qemu: Add VM Generation ID to qemu command line
https://bugzilla.redhat.com/show_bug.cgi?id=1149445 If the domain requests usage of the genid functionality, then add the QEMU '-device vmgenid' to the command line providing either the supplied or generated GUID value. Add tests for both a generated and supplied GUID value. Signed-off-by: John Ferlan <jferlan@redhat.com> ACKed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
c445abb52d
commit
87973a45f9
@ -5969,6 +5969,34 @@ qemuBuildSmbiosCommandLine(virCommandPtr cmd,
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuBuildVMGenIDCommandLine(virCommandPtr cmd,
|
||||
const virDomainDef *def,
|
||||
virQEMUCapsPtr qemuCaps)
|
||||
{
|
||||
virBuffer opts = VIR_BUFFER_INITIALIZER;
|
||||
char guid[VIR_UUID_STRING_BUFLEN];
|
||||
|
||||
if (!def->genidRequested)
|
||||
return 0;
|
||||
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_DEVICE_VMGENID)) {
|
||||
virReportError(VIR_ERR_CONFIG_UNSUPPORTED, "%s",
|
||||
_("this QEMU does not support the 'genid' capability"));
|
||||
return -1;
|
||||
}
|
||||
|
||||
virUUIDFormat(def->genid, guid);
|
||||
virBufferAsprintf(&opts, "vmgenid,guid=%s,id=vmgenid0", guid);
|
||||
|
||||
virCommandAddArg(cmd, "-device");
|
||||
virCommandAddArgBuffer(cmd, &opts);
|
||||
|
||||
virBufferFreeAndReset(&opts);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
static int
|
||||
qemuBuildSgaCommandLine(virCommandPtr cmd,
|
||||
const virDomainDef *def,
|
||||
@ -9973,6 +10001,9 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
|
||||
if (qemuBuildSmbiosCommandLine(cmd, driver, def) < 0)
|
||||
goto error;
|
||||
|
||||
if (qemuBuildVMGenIDCommandLine(cmd, def, qemuCaps) < 0)
|
||||
goto error;
|
||||
|
||||
/*
|
||||
* NB, -nographic *MUST* come before any serial, or monitor
|
||||
* or parallel port flags due to QEMU craziness, where it
|
||||
|
30
tests/qemuxml2argvdata/genid-auto.x86_64-latest.args
Normal file
30
tests/qemuxml2argvdata/genid-auto.x86_64-latest.args
Normal file
@ -0,0 +1,30 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-x86_64 \
|
||||
-name guest=QEMUGuest1,debug-threads=on \
|
||||
-S \
|
||||
-object secret,id=masterKey0,format=raw,\
|
||||
file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc-i440fx-2.12,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-device vmgenid,guid=00010203-0405-4607-8809-0a0b0c0d0e0f,id=vmgenid0 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
30
tests/qemuxml2argvdata/genid.x86_64-latest.args
Normal file
30
tests/qemuxml2argvdata/genid.x86_64-latest.args
Normal file
@ -0,0 +1,30 @@
|
||||
LC_ALL=C \
|
||||
PATH=/bin \
|
||||
HOME=/home/test \
|
||||
USER=test \
|
||||
LOGNAME=test \
|
||||
QEMU_AUDIO_DRV=none \
|
||||
/usr/bin/qemu-system-x86_64 \
|
||||
-name guest=QEMUGuest1,debug-threads=on \
|
||||
-S \
|
||||
-object secret,id=masterKey0,format=raw,\
|
||||
file=/tmp/lib/domain--1-QEMUGuest1/master-key.aes \
|
||||
-machine pc-i440fx-2.12,accel=tcg,usb=off,dump-guest-core=off \
|
||||
-m 214 \
|
||||
-realtime mlock=off \
|
||||
-smp 1,sockets=1,cores=1,threads=1 \
|
||||
-uuid c7a5fdbd-edaf-9455-926a-d65c16db1809 \
|
||||
-device vmgenid,guid=e9392370-2917-565e-692b-d057f46512d6,id=vmgenid0 \
|
||||
-display none \
|
||||
-no-user-config \
|
||||
-nodefaults \
|
||||
-chardev socket,id=charmonitor,path=/tmp/lib/domain--1-QEMUGuest1/monitor.sock,\
|
||||
server,nowait \
|
||||
-mon chardev=charmonitor,id=monitor,mode=control \
|
||||
-rtc base=utc \
|
||||
-no-shutdown \
|
||||
-boot strict=on \
|
||||
-device piix3-usb-uhci,id=usb,bus=pci.0,addr=0x1.0x2 \
|
||||
-sandbox on,obsolete=deny,elevateprivileges=deny,spawn=deny,\
|
||||
resourcecontrol=deny \
|
||||
-msg timestamp=on
|
@ -787,6 +787,10 @@ mymain(void)
|
||||
QEMU_CAPS_SECCOMP_BLACKLIST);
|
||||
DO_TEST_PARSE_ERROR("minimal-no-memory", NONE);
|
||||
DO_TEST("minimal-msg-timestamp", QEMU_CAPS_MSG_TIMESTAMP);
|
||||
|
||||
DO_TEST_CAPS_LATEST("genid");
|
||||
DO_TEST_CAPS_LATEST("genid-auto");
|
||||
|
||||
DO_TEST("machine-aliases1", NONE);
|
||||
DO_TEST("machine-aliases2", QEMU_CAPS_KVM);
|
||||
DO_TEST("machine-core-on", NONE);
|
||||
|
Loading…
Reference in New Issue
Block a user