qemu: hotplug: Extract hotplug of PR into qemuBlockStorageSourceAttachApply
Introduce a new setup function for all the related configuration and move the setup and attachment of the PR code. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Ján Tomko <jtomko@redhat.com>
This commit is contained in:
parent
ca174424ba
commit
1990a01e6e
@ -1485,6 +1485,7 @@ qemuBlockStorageSourceAttachDataFree(qemuBlockStorageSourceAttachDataPtr data)
|
|||||||
|
|
||||||
virJSONValueFree(data->storageProps);
|
virJSONValueFree(data->storageProps);
|
||||||
virJSONValueFree(data->formatProps);
|
virJSONValueFree(data->formatProps);
|
||||||
|
virJSONValueFree(data->prmgrProps);
|
||||||
VIR_FREE(data->driveCmd);
|
VIR_FREE(data->driveCmd);
|
||||||
VIR_FREE(data->driveAlias);
|
VIR_FREE(data->driveAlias);
|
||||||
VIR_FREE(data);
|
VIR_FREE(data);
|
||||||
@ -1548,6 +1549,10 @@ qemuBlockStorageSourceAttachApply(qemuMonitorPtr mon,
|
|||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
|
if (data->prmgrProps &&
|
||||||
|
qemuMonitorAddObject(mon, &data->prmgrProps, &data->prmgrAlias) < 0)
|
||||||
|
return -1;
|
||||||
|
|
||||||
if (data->storageProps) {
|
if (data->storageProps) {
|
||||||
rv = qemuMonitorBlockdevAdd(mon, data->storageProps);
|
rv = qemuMonitorBlockdevAdd(mon, data->storageProps);
|
||||||
data->storageProps = NULL;
|
data->storageProps = NULL;
|
||||||
@ -1609,6 +1614,9 @@ qemuBlockStorageSourceAttachRollback(qemuMonitorPtr mon,
|
|||||||
if (data->storageAttached)
|
if (data->storageAttached)
|
||||||
ignore_value(qemuMonitorBlockdevDel(mon, data->storageNodeName));
|
ignore_value(qemuMonitorBlockdevDel(mon, data->storageNodeName));
|
||||||
|
|
||||||
|
if (data->prmgrAlias)
|
||||||
|
ignore_value(qemuMonitorDelObject(mon, data->prmgrAlias));
|
||||||
|
|
||||||
virErrorRestore(&orig_err);
|
virErrorRestore(&orig_err);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -71,6 +71,9 @@ qemuBlockStorageSourceGetBlockdevProps(virStorageSourcePtr src);
|
|||||||
typedef struct qemuBlockStorageSourceAttachData qemuBlockStorageSourceAttachData;
|
typedef struct qemuBlockStorageSourceAttachData qemuBlockStorageSourceAttachData;
|
||||||
typedef qemuBlockStorageSourceAttachData *qemuBlockStorageSourceAttachDataPtr;
|
typedef qemuBlockStorageSourceAttachData *qemuBlockStorageSourceAttachDataPtr;
|
||||||
struct qemuBlockStorageSourceAttachData {
|
struct qemuBlockStorageSourceAttachData {
|
||||||
|
virJSONValuePtr prmgrProps;
|
||||||
|
char *prmgrAlias;
|
||||||
|
|
||||||
virJSONValuePtr storageProps;
|
virJSONValuePtr storageProps;
|
||||||
const char *storageNodeName;
|
const char *storageNodeName;
|
||||||
bool storageAttached;
|
bool storageAttached;
|
||||||
|
@ -10485,3 +10485,24 @@ qemuBuildStorageSourceAttachPrepareDrive(virDomainDiskDefPtr disk,
|
|||||||
|
|
||||||
return data;
|
return data;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qemuBuildStorageSourceAttachPrepareCommon:
|
||||||
|
* @src: storage source
|
||||||
|
* @data: already initialized data for disk source addition
|
||||||
|
*
|
||||||
|
* Prepare data for configuration associated with the disk source such as
|
||||||
|
* secrets/TLS/pr objects etc ...
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
qemuBuildStorageSourceAttachPrepareCommon(virStorageSourcePtr src,
|
||||||
|
qemuBlockStorageSourceAttachDataPtr data)
|
||||||
|
{
|
||||||
|
if (src->pr &&
|
||||||
|
!virStoragePRDefIsManaged(src->pr) &&
|
||||||
|
!(data->prmgrProps = qemuBuildPRManagerInfoProps(src)))
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -106,6 +106,9 @@ char *qemuDeviceDriveHostAlias(virDomainDiskDefPtr disk);
|
|||||||
qemuBlockStorageSourceAttachDataPtr
|
qemuBlockStorageSourceAttachDataPtr
|
||||||
qemuBuildStorageSourceAttachPrepareDrive(virDomainDiskDefPtr disk,
|
qemuBuildStorageSourceAttachPrepareDrive(virDomainDiskDefPtr disk,
|
||||||
virQEMUCapsPtr qemuCaps);
|
virQEMUCapsPtr qemuCaps);
|
||||||
|
int
|
||||||
|
qemuBuildStorageSourceAttachPrepareCommon(virStorageSourcePtr src,
|
||||||
|
qemuBlockStorageSourceAttachDataPtr data);
|
||||||
|
|
||||||
/* Current, best practice */
|
/* Current, best practice */
|
||||||
char *qemuBuildDriveDevStr(const virDomainDef *def,
|
char *qemuBuildDriveDevStr(const virDomainDef *def,
|
||||||
|
@ -394,14 +394,12 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
qemuBlockStorageSourceAttachDataPtr data = NULL;
|
qemuBlockStorageSourceAttachDataPtr data = NULL;
|
||||||
virErrorPtr orig_err;
|
virErrorPtr orig_err;
|
||||||
char *devstr = NULL;
|
char *devstr = NULL;
|
||||||
char *unmanagedPrmgrAlias = NULL;
|
|
||||||
char *managedPrmgrAlias = NULL;
|
char *managedPrmgrAlias = NULL;
|
||||||
char *encobjAlias = NULL;
|
char *encobjAlias = NULL;
|
||||||
char *secobjAlias = NULL;
|
char *secobjAlias = NULL;
|
||||||
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
virQEMUDriverConfigPtr cfg = virQEMUDriverGetConfig(driver);
|
||||||
virJSONValuePtr secobjProps = NULL;
|
virJSONValuePtr secobjProps = NULL;
|
||||||
virJSONValuePtr encobjProps = NULL;
|
virJSONValuePtr encobjProps = NULL;
|
||||||
virJSONValuePtr unmanagedPrmgrProps = NULL;
|
|
||||||
virJSONValuePtr managedPrmgrProps = NULL;
|
virJSONValuePtr managedPrmgrProps = NULL;
|
||||||
qemuDomainStorageSourcePrivatePtr srcPriv;
|
qemuDomainStorageSourcePrivatePtr srcPriv;
|
||||||
qemuDomainSecretInfoPtr secinfo = NULL;
|
qemuDomainSecretInfoPtr secinfo = NULL;
|
||||||
@ -433,12 +431,10 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
if (qemuDomainDiskAttachManagedPR(vm, disk, &managedPrmgrProps) < 0)
|
if (qemuDomainDiskAttachManagedPR(vm, disk, &managedPrmgrProps) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (disk->src->pr &&
|
if (!(data = qemuBuildStorageSourceAttachPrepareDrive(disk, priv->qemuCaps)))
|
||||||
!virStoragePRDefIsManaged(disk->src->pr) &&
|
|
||||||
!(unmanagedPrmgrProps = qemuBuildPRManagerInfoProps(disk->src)))
|
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (!(data = qemuBuildStorageSourceAttachPrepareDrive(disk, priv->qemuCaps)))
|
if (qemuBuildStorageSourceAttachPrepareCommon(disk->src, data) < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
if (disk->src->haveTLS == VIR_TRISTATE_BOOL_YES &&
|
if (disk->src->haveTLS == VIR_TRISTATE_BOOL_YES &&
|
||||||
@ -465,10 +461,6 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
qemuMonitorAddObject(priv->mon, &managedPrmgrProps, &managedPrmgrAlias) < 0)
|
qemuMonitorAddObject(priv->mon, &managedPrmgrProps, &managedPrmgrAlias) < 0)
|
||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
|
|
||||||
if (unmanagedPrmgrProps &&
|
|
||||||
qemuMonitorAddObject(priv->mon, &unmanagedPrmgrProps, &unmanagedPrmgrAlias) < 0)
|
|
||||||
goto exit_monitor;
|
|
||||||
|
|
||||||
if (qemuBlockStorageSourceAttachApply(priv->mon, data) < 0)
|
if (qemuBlockStorageSourceAttachApply(priv->mon, data) < 0)
|
||||||
goto exit_monitor;
|
goto exit_monitor;
|
||||||
|
|
||||||
@ -488,12 +480,10 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
cleanup:
|
cleanup:
|
||||||
qemuBlockStorageSourceAttachDataFree(data);
|
qemuBlockStorageSourceAttachDataFree(data);
|
||||||
virJSONValueFree(managedPrmgrProps);
|
virJSONValueFree(managedPrmgrProps);
|
||||||
virJSONValueFree(unmanagedPrmgrProps);
|
|
||||||
virJSONValueFree(encobjProps);
|
virJSONValueFree(encobjProps);
|
||||||
virJSONValueFree(secobjProps);
|
virJSONValueFree(secobjProps);
|
||||||
qemuDomainSecretDiskDestroy(disk);
|
qemuDomainSecretDiskDestroy(disk);
|
||||||
VIR_FREE(managedPrmgrAlias);
|
VIR_FREE(managedPrmgrAlias);
|
||||||
VIR_FREE(unmanagedPrmgrAlias);
|
|
||||||
VIR_FREE(secobjAlias);
|
VIR_FREE(secobjAlias);
|
||||||
VIR_FREE(encobjAlias);
|
VIR_FREE(encobjAlias);
|
||||||
VIR_FREE(devstr);
|
VIR_FREE(devstr);
|
||||||
@ -508,8 +498,6 @@ qemuDomainAttachDiskGeneric(virQEMUDriverPtr driver,
|
|||||||
ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
|
ignore_value(qemuMonitorDelObject(priv->mon, secobjAlias));
|
||||||
if (encobjAlias)
|
if (encobjAlias)
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, encobjAlias));
|
ignore_value(qemuMonitorDelObject(priv->mon, encobjAlias));
|
||||||
if (unmanagedPrmgrAlias)
|
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, unmanagedPrmgrAlias));
|
|
||||||
if (managedPrmgrAlias)
|
if (managedPrmgrAlias)
|
||||||
ignore_value(qemuMonitorDelObject(priv->mon, managedPrmgrAlias));
|
ignore_value(qemuMonitorDelObject(priv->mon, managedPrmgrAlias));
|
||||||
if (disk->src->tlsAlias)
|
if (disk->src->tlsAlias)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user