1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-20 06:50:22 +03:00

qemu: Add support for 'image_format' typed parameter

Add support for the 'image_format' typed parameter in virDomainSaveParams.
The parameter overrides the 'save_image_format' setting in qemu.conf.

Signed-off-by: Jim Fehlig <jfehlig@suse.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Jim Fehlig 2025-02-14 17:01:38 -07:00
parent fdb7b1e19a
commit 5e3e924248

View File

@ -2806,11 +2806,13 @@ qemuDomainSaveParams(virDomainPtr dom,
unsigned int flags)
{
virQEMUDriver *driver = dom->conn->privateData;
g_autoptr(virQEMUDriverConfig) cfg = NULL;
g_autoptr(virQEMUDriverConfig) cfg = virQEMUDriverGetConfig(driver);
virDomainObj *vm = NULL;
g_autoptr(virCommand) compressor = NULL;
const char *to = NULL;
const char *dxml = NULL;
const char *formatstr = NULL;
int format = cfg->saveImageFormat;
int ret = -1;
virCheckFlags(VIR_DOMAIN_SAVE_BYPASS_CACHE |
@ -2822,6 +2824,8 @@ qemuDomainSaveParams(virDomainPtr dom,
VIR_TYPED_PARAM_STRING,
VIR_DOMAIN_SAVE_PARAM_DXML,
VIR_TYPED_PARAM_STRING,
VIR_DOMAIN_SAVE_PARAM_IMAGE_FORMAT,
VIR_TYPED_PARAM_STRING,
NULL) < 0)
return -1;
@ -2831,6 +2835,9 @@ qemuDomainSaveParams(virDomainPtr dom,
if (virTypedParamsGetString(params, nparams,
VIR_DOMAIN_SAVE_PARAM_DXML, &dxml) < 0)
return -1;
if (virTypedParamsGetString(params, nparams,
VIR_DOMAIN_SAVE_PARAM_IMAGE_FORMAT, &formatstr) < 0)
return -1;
if (!(vm = qemuDomainObjFromDomain(dom)))
goto cleanup;
@ -2843,14 +2850,19 @@ qemuDomainSaveParams(virDomainPtr dom,
return qemuDomainManagedSaveHelper(driver, vm, dxml, flags);
}
cfg = virQEMUDriverGetConfig(driver);
if (qemuSaveImageGetCompressionProgram(cfg->saveImageFormat, &compressor, "save") < 0)
if (formatstr && (format = qemuSaveFormatTypeFromString(formatstr)) < 0) {
virReportError(VIR_ERR_OPERATION_FAILED,
_("Invalid image_format '%1$s'"), formatstr);
goto cleanup;
}
if (qemuSaveImageGetCompressionProgram(format, &compressor, "save") < 0)
goto cleanup;
if (virDomainObjCheckActive(vm) < 0)
goto cleanup;
ret = qemuDomainSaveInternal(driver, vm, to, cfg->saveImageFormat,
ret = qemuDomainSaveInternal(driver, vm, to, format,
compressor, dxml, flags);
cleanup: