提交 c2f71bb2 编写于 作者: P Peter Krempa

qemu: hotplug: Refactor 'secret' props formatting to qemuMonitorCreateObjectProps

Signed-off-by: NPeter Krempa <pkrempa@redhat.com>
Reviewed-by: NJán Tomko <jtomko@redhat.com>
上级 9374c6e0
...@@ -511,18 +511,14 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo, ...@@ -511,18 +511,14 @@ qemuBuildSecretInfoProps(qemuDomainSecretInfoPtr secinfo,
if (!(keyid = qemuDomainGetMasterKeyAlias())) if (!(keyid = qemuDomainGetMasterKeyAlias()))
return -1; return -1;
if (virJSONValueObjectCreate(propsret, ret = qemuMonitorCreateObjectProps(propsret,
"secret", secinfo->s.aes.alias,
"s:data", secinfo->s.aes.ciphertext, "s:data", secinfo->s.aes.ciphertext,
"s:keyid", keyid, "s:keyid", keyid,
"s:iv", secinfo->s.aes.iv, "s:iv", secinfo->s.aes.iv,
"s:format", "base64", NULL) < 0) "s:format", "base64", NULL);
goto cleanup;
ret = 0;
cleanup:
VIR_FREE(keyid); VIR_FREE(keyid);
return ret; return ret;
} }
...@@ -543,25 +539,24 @@ static int ...@@ -543,25 +539,24 @@ static int
qemuBuildObjectSecretCommandLine(virCommandPtr cmd, qemuBuildObjectSecretCommandLine(virCommandPtr cmd,
qemuDomainSecretInfoPtr secinfo) qemuDomainSecretInfoPtr secinfo)
{ {
virBuffer buf = VIR_BUFFER_INITIALIZER;
int ret = -1; int ret = -1;
virJSONValuePtr props = NULL; virJSONValuePtr props = NULL;
char *tmp = NULL;
if (qemuBuildSecretInfoProps(secinfo, &props) < 0) if (qemuBuildSecretInfoProps(secinfo, &props) < 0)
return -1; return -1;
if (!(tmp = virQEMUBuildObjectCommandlineFromJSONType("secret", if (virQEMUBuildObjectCommandlineFromJSON(&buf, props) < 0)
secinfo->s.aes.alias,
props)))
goto cleanup; goto cleanup;
virCommandAddArgList(cmd, "-object", tmp, NULL); virCommandAddArg(cmd, "-object");
virCommandAddArgBuffer(cmd, &buf);
ret = 0; ret = 0;
cleanup: cleanup:
virBufferFreeAndReset(&buf);
virJSONValueFree(props); virJSONValueFree(props);
VIR_FREE(tmp);
return ret; return ret;
} }
......
...@@ -171,7 +171,7 @@ qemuDomainAddDiskSrcTLSObject(virQEMUDriverPtr driver, ...@@ -171,7 +171,7 @@ qemuDomainAddDiskSrcTLSObject(virQEMUDriverPtr driver,
goto cleanup; goto cleanup;
if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE, if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE,
NULL, NULL, &tlsProps) < 0) NULL, &tlsProps) < 0)
goto cleanup; goto cleanup;
ret = 0; ret = 0;
...@@ -423,9 +423,9 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, ...@@ -423,9 +423,9 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
char *drivestr = NULL; char *drivestr = NULL;
char *drivealias = NULL; char *drivealias = NULL;
char *prmgrAlias = NULL; char *prmgrAlias = NULL;
char *encobjAlias = NULL;
char *secobjAlias = NULL;
bool driveAdded = false; bool driveAdded = false;
bool secobjAdded = false;
bool encobjAdded = false;
bool prdStarted = false; bool prdStarted = false;
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver); virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
virJSONValuePtr secobjProps = NULL; virJSONValuePtr secobjProps = NULL;
...@@ -487,23 +487,13 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, ...@@ -487,23 +487,13 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
qemuDomainObjEnterMonitor(driver, vm); qemuDomainObjEnterMonitor(driver, vm);
if (secobjProps) { if (secobjProps &&
rv = qemuMonitorAddObjectType(priv->mon, "secret", secinfo->s.aes.alias, qemuMonitorAddObject(priv->mon, &secobjProps, &secobjAlias) < 0)
secobjProps);
secobjProps = NULL; /* qemuMonitorAddObjectType consumes */
if (rv < 0)
goto exit_monitor; goto exit_monitor;
secobjAdded = true;
}
if (encobjProps) { if (encobjProps &&
rv = qemuMonitorAddObjectType(priv->mon, "secret", encinfo->s.aes.alias, qemuMonitorAddObject(priv->mon, &encobjProps, &encobjAlias) < 0)
encobjProps);
encobjProps = NULL; /* qemuMonitorAddObjectType consumes */
if (rv < 0)
goto exit_monitor; goto exit_monitor;
encobjAdded = true;
}
if (prmgrProps && if (prmgrProps &&
qemuMonitorAddObject(priv->mon, &prmgrProps, &prmgrAlias) < 0) qemuMonitorAddObject(priv->mon, &prmgrProps, &prmgrAlias) < 0)
...@@ -532,6 +522,8 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, ...@@ -532,6 +522,8 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
virJSONValueFree(secobjProps); virJSONValueFree(secobjProps);
qemuDomainSecretDiskDestroy(disk); qemuDomainSecretDiskDestroy(disk);
VIR_FREE(prmgrAlias); VIR_FREE(prmgrAlias);
VIR_FREE(secobjAlias);
VIR_FREE(encobjAlias);
VIR_FREE(drivealias); VIR_FREE(drivealias);
VIR_FREE(drivestr); VIR_FREE(drivestr);
VIR_FREE(devstr); VIR_FREE(devstr);
...@@ -544,10 +536,10 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver, ...@@ -544,10 +536,10 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
VIR_WARN("Unable to remove drive %s (%s) after failed " VIR_WARN("Unable to remove drive %s (%s) after failed "
"qemuMonitorAddDevice", drivealias, drivestr); "qemuMonitorAddDevice", drivealias, drivestr);
} }
if (secobjAdded) if (secobjAlias)
ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias)); ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
if (encobjAdded) if (encobjAlias)
ignore_value(qemuMonitorDelObject(priv->mon, encinfo->s.aes.alias)); ignore_value(qemuMonitorDelObject(priv->mon, encobjAlias));
if (prmgrAlias) if (prmgrAlias)
ignore_value(qemuMonitorDelObject(priv->mon, prmgrAlias)); ignore_value(qemuMonitorDelObject(priv->mon, prmgrAlias));
if (qemuDomainObjExitMonitor(driver, vm) < 0) if (qemuDomainObjExitMonitor(driver, vm) < 0)
...@@ -1445,32 +1437,29 @@ int ...@@ -1445,32 +1437,29 @@ int
qemuDomainAddTLSObjects(virQEMUDriverPtr driver, qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm,
qemuDomainAsyncJob asyncJob, qemuDomainAsyncJob asyncJob,
const char *secAlias,
virJSONValuePtr *secProps, virJSONValuePtr *secProps,
virJSONValuePtr *tlsProps) virJSONValuePtr *tlsProps)
{ {
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
int rc;
virErrorPtr orig_err; virErrorPtr orig_err;
char *secAlias = NULL;
if (!tlsProps && !secAlias) if (!tlsProps && !secProps)
return 0; return 0;
if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0)
return -1; return -1;
if (secAlias) { if (secProps &&
rc = qemuMonitorAddObjectType(priv->mon, "secret", qemuMonitorAddObject(priv->mon, secProps, &secAlias) < 0)
secAlias, *secProps);
*secProps = NULL; /* qemuMonitorAddObjectType consumes */
if (rc < 0)
goto error; goto error;
}
if (tlsProps && if (tlsProps &&
qemuMonitorAddObject(priv->mon, tlsProps, NULL) < 0) qemuMonitorAddObject(priv->mon, tlsProps, NULL) < 0)
goto error; goto error;
VIR_FREE(secAlias);
return qemuDomainObjExitMonitor(driver, vm); return qemuDomainObjExitMonitor(driver, vm);
error: error:
...@@ -1478,6 +1467,7 @@ qemuDomainAddTLSObjects(virQEMUDriverPtr driver, ...@@ -1478,6 +1467,7 @@ qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
ignore_value(qemuDomainObjExitMonitor(driver, vm)); ignore_value(qemuDomainObjExitMonitor(driver, vm));
virErrorRestore(&orig_err); virErrorRestore(&orig_err);
qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, NULL); qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, NULL);
VIR_FREE(secAlias);
return -1; return -1;
} }
...@@ -1557,7 +1547,7 @@ qemuDomainAddChardevTLSObjects(virQEMUDriverPtr driver, ...@@ -1557,7 +1547,7 @@ qemuDomainAddChardevTLSObjects(virQEMUDriverPtr driver,
dev->data.tcp.tlscreds = true; dev->data.tcp.tlscreds = true;
if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE, if (qemuDomainAddTLSObjects(driver, vm, QEMU_ASYNC_JOB_NONE,
*secAlias, &secProps, &tlsProps) < 0) &secProps, &tlsProps) < 0)
goto cleanup; goto cleanup;
ret = 0; ret = 0;
...@@ -2305,18 +2295,17 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver, ...@@ -2305,18 +2295,17 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
virDomainHostdevDefPtr hostdev) virDomainHostdevDefPtr hostdev)
{ {
size_t i; size_t i;
int rv;
int ret = -1; int ret = -1;
qemuDomainObjPrivatePtr priv = vm->privateData; qemuDomainObjPrivatePtr priv = vm->privateData;
virErrorPtr orig_err; virErrorPtr orig_err;
char *devstr = NULL; char *devstr = NULL;
char *drvstr = NULL; char *drvstr = NULL;
char *drivealias = NULL; char *drivealias = NULL;
char *secobjAlias = NULL;
bool teardowncgroup = false; bool teardowncgroup = false;
bool teardownlabel = false; bool teardownlabel = false;
bool teardowndevice = false; bool teardowndevice = false;
bool driveAdded = false; bool driveAdded = false;
bool secobjAdded = false;
virJSONValuePtr secobjProps = NULL; virJSONValuePtr secobjProps = NULL;
virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi; virDomainHostdevSubsysSCSIPtr scsisrc = &hostdev->source.subsys.u.scsi;
qemuDomainSecretInfoPtr secinfo = NULL; qemuDomainSecretInfoPtr secinfo = NULL;
...@@ -2385,14 +2374,9 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver, ...@@ -2385,14 +2374,9 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
qemuDomainObjEnterMonitor(driver, vm); qemuDomainObjEnterMonitor(driver, vm);
if (secobjProps) { if (secobjProps &&
rv = qemuMonitorAddObjectType(priv->mon, "secret", secinfo->s.aes.alias, qemuMonitorAddObject(priv->mon, &secobjProps, &secobjAlias) < 0)
secobjProps);
secobjProps = NULL; /* qemuMonitorAddObjectType consumes */
if (rv < 0)
goto exit_monitor; goto exit_monitor;
secobjAdded = true;
}
if (qemuMonitorAddDrive(priv->mon, drvstr) < 0) if (qemuMonitorAddDrive(priv->mon, drvstr) < 0)
goto exit_monitor; goto exit_monitor;
...@@ -2424,6 +2408,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver, ...@@ -2424,6 +2408,7 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
} }
qemuDomainSecretHostdevDestroy(hostdev); qemuDomainSecretHostdevDestroy(hostdev);
virJSONValueFree(secobjProps); virJSONValueFree(secobjProps);
VIR_FREE(secobjAlias);
VIR_FREE(drivealias); VIR_FREE(drivealias);
VIR_FREE(drvstr); VIR_FREE(drvstr);
VIR_FREE(devstr); VIR_FREE(devstr);
...@@ -2436,8 +2421,8 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver, ...@@ -2436,8 +2421,8 @@ qemuDomainAttachHostSCSIDevice(virQEMUDriverPtr driver,
"qemuMonitorAddDevice", "qemuMonitorAddDevice",
drvstr, devstr); drvstr, devstr);
} }
if (secobjAdded) if (secobjAlias)
ignore_value(qemuMonitorDelObject(priv->mon, secinfo->s.aes.alias)); ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
ignore_value(qemuDomainObjExitMonitor(driver, vm)); ignore_value(qemuDomainObjExitMonitor(driver, vm));
virErrorRestore(&orig_err); virErrorRestore(&orig_err);
......
...@@ -43,7 +43,6 @@ void qemuDomainDelTLSObjects(virQEMUDriverPtr driver, ...@@ -43,7 +43,6 @@ void qemuDomainDelTLSObjects(virQEMUDriverPtr driver,
int qemuDomainAddTLSObjects(virQEMUDriverPtr driver, int qemuDomainAddTLSObjects(virQEMUDriverPtr driver,
virDomainObjPtr vm, virDomainObjPtr vm,
qemuDomainAsyncJob asyncJob, qemuDomainAsyncJob asyncJob,
const char *secAlias,
virJSONValuePtr *secProps, virJSONValuePtr *secProps,
virJSONValuePtr *tlsProps); virJSONValuePtr *tlsProps);
......
...@@ -871,8 +871,7 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver, ...@@ -871,8 +871,7 @@ qemuMigrationParamsEnableTLS(virQEMUDriverPtr driver,
* some other error path between now and perform . */ * some other error path between now and perform . */
qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, *tlsAlias); qemuDomainDelTLSObjects(driver, vm, asyncJob, secAlias, *tlsAlias);
if (qemuDomainAddTLSObjects(driver, vm, asyncJob, secAlias, &secProps, if (qemuDomainAddTLSObjects(driver, vm, asyncJob, &secProps, &tlsProps) < 0)
&tlsProps) < 0)
goto error; goto error;
if (qemuMigrationParamsSetString(migParams, if (qemuMigrationParamsSetString(migParams,
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册