qemu: command: Use JSON for parameters of -compat

'-compat' as a modern implementation based on QAPI already takes JSON as
the argument. Convert our code to use it directly.

QEMU declares the ised QAPI types as:

{ 'enum': 'CompatPolicyInput',
  'data': [ 'accept', 'reject', 'crash' ] }

{ 'enum': 'CompatPolicyOutput',
  'data': [ 'accept', 'hide' ] }

{ 'struct': 'CompatPolicy',
  'data': { '*deprecated-input': 'CompatPolicyInput',
            '*deprecated-output': 'CompatPolicyOutput' } }

Signed-off-by: Peter Krempa <pkrempa@redhat.com>
Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
Peter Krempa 2021-11-08 16:20:21 +01:00
parent 12f48c53f5
commit 14af0a3290
2 changed files with 19 additions and 11 deletions

View File

@ -10535,11 +10535,14 @@ qemuBuildCompatDeprecatedCommandLine(virCommand *cmd,
virDomainDef *def, virDomainDef *def,
virQEMUCaps *qemuCaps) virQEMUCaps *qemuCaps)
{ {
g_auto(virBuffer) buf = VIR_BUFFER_INITIALIZER; g_autoptr(virJSONValue) props = NULL;
g_autofree char *propsstr = NULL;
qemuDomainXmlNsDef *nsdata = def->namespaceData; qemuDomainXmlNsDef *nsdata = def->namespaceData;
qemuCommnadDeprecationBehavior behavior = QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE; qemuCommnadDeprecationBehavior behavior = QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE;
const char *behaviorStr = cfg->deprecationBehavior; const char *behaviorStr = cfg->deprecationBehavior;
int tmp; int tmp;
const char *deprecatedOutput = NULL;
const char *deprecatedInput = NULL;
if (nsdata && nsdata->deprecationBehavior) if (nsdata && nsdata->deprecationBehavior)
behaviorStr = nsdata->deprecationBehavior; behaviorStr = nsdata->deprecationBehavior;
@ -10562,30 +10565,35 @@ qemuBuildCompatDeprecatedCommandLine(virCommand *cmd,
return; return;
} }
/* all active options hide output fields from qemu */
virBufferAddLit(&buf, "deprecated-output=hide,");
switch (behavior) { switch (behavior) {
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_OMIT: case QEMU_COMMAND_DEPRECATION_BEHAVIOR_OMIT:
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE: case QEMU_COMMAND_DEPRECATION_BEHAVIOR_NONE:
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_LAST: case QEMU_COMMAND_DEPRECATION_BEHAVIOR_LAST:
default: default:
/* output field hiding is default for all cases */ deprecatedOutput = "hide";
break; break;
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_REJECT: case QEMU_COMMAND_DEPRECATION_BEHAVIOR_REJECT:
virBufferAddLit(&buf, "deprecated-input=reject,"); deprecatedOutput = "hide";
deprecatedInput = "reject";
break; break;
case QEMU_COMMAND_DEPRECATION_BEHAVIOR_CRASH: case QEMU_COMMAND_DEPRECATION_BEHAVIOR_CRASH:
virBufferAddLit(&buf, "deprecated-input=crash,"); deprecatedOutput = "hide";
deprecatedInput = "crash";
break; break;
} }
virBufferTrim(&buf, ","); if (virJSONValueObjectAdd(&props,
"S:deprecated-output", deprecatedOutput,
"S:deprecated-input", deprecatedInput,
NULL) < 0)
return;
virCommandAddArg(cmd, "-compat"); if (!(propsstr = virJSONValueToString(props, false)))
virCommandAddArgBuffer(cmd, &buf); return;
virCommandAddArgList(cmd, "-compat", propsstr, NULL);
} }

View File

@ -10,7 +10,7 @@ NS=ns \
BAR='' \ BAR='' \
/usr/bin/qemu-system-i386 \ /usr/bin/qemu-system-i386 \
-name guest=QEMUGuest1,debug-threads=on \ -name guest=QEMUGuest1,debug-threads=on \
-compat deprecated-output=hide,deprecated-input=crash \ -compat '{"deprecated-output":"hide","deprecated-input":"crash"}' \
-S \ -S \
-object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \ -object '{"qom-type":"secret","id":"masterKey0","format":"raw","file":"/tmp/lib/domain--1-QEMUGuest1/master-key.aes"}' \
-machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \ -machine pc,accel=tcg,usb=off,dump-guest-core=off,memory-backend=pc.ram \