mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-02-22 11:22:23 +00:00
qemu: command: Handle formatting of '-compat' options
Enable '-compat' if requested in qemu.conf and supported by qemu to instruct qemu to crash when a deprecated command is used and stop returning deprecated fields. This setting is meant for libvirt developers and such. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Martin Kletzander <mkletzan@redhat.com>
This commit is contained in:
parent
a6444c8019
commit
c54b1bdcfb
@ -10328,6 +10328,84 @@ qemuBuildVsockCommandLine(virCommandPtr cmd,
|
||||
}
|
||||
|
||||
|
||||
typedef enum {
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE = 0,
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_OMIT,
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_REJECT,
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_CRASH,
|
||||
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_LAST
|
||||
} qemuCommnadDeprecationBehavior;
|
||||
|
||||
|
||||
VIR_ENUM_DECL(qemuCommnadDeprecationBehavior);
|
||||
VIR_ENUM_IMPL(qemuCommnadDeprecationBehavior,
|
||||
QEMU_COMMAND_DEPRECATION_BEHAVIOR_LAST,
|
||||
"none",
|
||||
"omit",
|
||||
"reject",
|
||||
"crash");
|
||||
|
||||
static void
|
||||
qemuBuildCompatDeprecatedCommandLine(virCommand *cmd,
|
||||
virQEMUDriverConfig *cfg,
|
||||
virDomainDef *def,
|
||||
virQEMUCaps *qemuCaps)
|
||||
{
|
||||
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER;
|
||||
qemuDomainXmlNsDefPtr nsdata = def->namespaceData;
|
||||
qemuCommnadDeprecationBehavior behavior = QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE;
|
||||
const char *behaviorStr = cfg->deprecationBehavior;
|
||||
int tmp;
|
||||
|
||||
if (nsdata && nsdata->deprecationBehavior)
|
||||
behaviorStr = nsdata->deprecationBehavior;
|
||||
|
||||
if ((tmp = qemuCommnadDeprecationBehaviorTypeFromString(behaviorStr)) < 0) {
|
||||
VIR_WARN("Unsupported deprecation behavior '%s' for VM '%s'",
|
||||
behaviorStr, def->name);
|
||||
return;
|
||||
}
|
||||
|
||||
behavior = tmp;
|
||||
|
||||
if (behavior == QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE)
|
||||
return;
|
||||
|
||||
/* we don't try to enable this feature at all if qemu doesn't support it,
|
||||
* so that a downgrade of qemu version doesn't impact startup of the VM */
|
||||
if (!virQEMUCapsGet(qemuCaps, QEMU_CAPS_COMPAT_DEPRECATED)) {
|
||||
VIR_DEBUG("-compat not supported for VM '%s'", def->name);
|
||||
return;
|
||||
}
|
||||
|
||||
/* all active options hide output fields from qemu */
|
||||
virBufferAddLit(&buf, "deprecated-output=hide,");
|
||||
|
||||
switch (behavior) {
|
||||
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_OMIT:
|
||||
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE:
|
||||
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_LAST:
|
||||
default:
|
||||
/* output field hiding is default for all cases */
|
||||
break;
|
||||
|
||||
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_REJECT:
|
||||
virBufferAddLit(&buf, "deprecated-input=reject,");
|
||||
break;
|
||||
|
||||
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_CRASH:
|
||||
virBufferAddLit(&buf, "deprecated-input=crash,");
|
||||
break;
|
||||
}
|
||||
|
||||
virBufferTrim(&buf, ",");
|
||||
|
||||
virCommandAddArg(cmd, "-compat");
|
||||
virCommandAddArgBuffer(cmd, &buf);
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Constructs a argv suitable for launching qemu with config defined
|
||||
* for a given virtual machine.
|
||||
@ -10388,6 +10466,8 @@ qemuBuildCommandLine(virQEMUDriverPtr driver,
|
||||
if (qemuBuildNameCommandLine(cmd, cfg, def, qemuCaps) < 0)
|
||||
return NULL;
|
||||
|
||||
qemuBuildCompatDeprecatedCommandLine(cmd, cfg, def, qemuCaps);
|
||||
|
||||
if (!standalone)
|
||||
virCommandAddArg(cmd, "-S"); /* freeze CPU */
|
||||
|
||||
|
@ -10,6 +10,7 @@ NS=ns \
|
||||
BAR='' \
|
||||
/usr/bin/qemu-system-i386 \
|
||||
-name guest=QEMUGuest1,debug-threads=on \
|
||||
-compat deprecated-output=hide,deprecated-input=crash \
|
||||
-S \
|
||||
-object '{"qom-type":"secret","id":"masterKey0","format":"raw",\
|
||||
"file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
|
||||
|
Loading…
x
Reference in New Issue
Block a user