1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

storage_util: Generate the qcow secret earlier

Rather than having storageBackendCreateQemuImgCheckEncryption
perform the virStorageGenerateQcowEncryption, let's just do that
earlier during storageBackendCreateQemuImg so that the check
helper is just a check helper rather doing something different
based on whether the format is qcow[2] or raw based encryption.

This fixes an issue in the storageBackendResizeQemuImg processing
for qcow encryption where if a secret was not available for a
volume, a new secret will not be generated and instead an error
message will be generated.

Signed-off-by: John Ferlan <jferlan@redhat.com>
This commit is contained in:
John Ferlan 2018-04-18 14:08:51 -04:00
parent 9629fe258f
commit 3d1db851ca

View File

@ -901,9 +901,9 @@ storageBackendCreateQemuImgCheckEncryption(int format,
_("too many secrets for qcow encryption")); _("too many secrets for qcow encryption"));
return -1; return -1;
} }
if (enc->format == VIR_STORAGE_ENCRYPTION_FORMAT_DEFAULT || if (enc->nsecrets == 0) {
enc->nsecrets == 0) { virReportError(VIR_ERR_XML_ERROR, "%s",
if (virStorageGenerateQcowEncryption(vol) < 0) _("no secret provided for qcow encryption"));
return -1; return -1;
} }
} else if (format == VIR_STORAGE_FILE_RAW) { } else if (format == VIR_STORAGE_FILE_RAW) {
@ -1309,6 +1309,26 @@ storageBackendCreateQemuImgSecretPath(virStoragePoolObjPtr pool,
} }
static int
storageBackendGenerateSecretData(virStorageVolDefPtr vol)
{
virStorageEncryptionPtr enc = vol->target.encryption;
if (!enc)
return 0;
if ((vol->target.format == VIR_STORAGE_FILE_QCOW ||
vol->target.format == VIR_STORAGE_FILE_QCOW2) &&
(enc->format == VIR_STORAGE_ENCRYPTION_FORMAT_DEFAULT ||
enc->nsecrets == 0)) {
if (virStorageGenerateQcowEncryption(vol) < 0)
return -1;
}
return 0;
}
static int static int
storageBackendCreateQemuImg(virStoragePoolObjPtr pool, storageBackendCreateQemuImg(virStoragePoolObjPtr pool,
virStorageVolDefPtr vol, virStorageVolDefPtr vol,
@ -1330,6 +1350,9 @@ storageBackendCreateQemuImg(virStoragePoolObjPtr pool,
return -1; return -1;
} }
if (storageBackendGenerateSecretData(vol) < 0)
goto cleanup;
if (vol->target.format == VIR_STORAGE_FILE_RAW && if (vol->target.format == VIR_STORAGE_FILE_RAW &&
vol->target.encryption && vol->target.encryption &&
vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) { vol->target.encryption->format == VIR_STORAGE_ENCRYPTION_FORMAT_LUKS) {