From: Geoff Hickey Date: Wed, 17 Jul 2013 18:28:33 +0000 (-0400) Subject: esx: Support for disk-only and quiescing snapshots. X-Git-Tag: v1.1.1-rc1~94 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=6c8adeb41a5cc68a2b4a03d6a2035c4e9d57dae2;p=thirdparty%2Flibvirt.git esx: Support for disk-only and quiescing snapshots. Add support for creating disk-only (no memory) snapshots in esx, and for quiescing the VM before taking the snapshot. The VMware API supports these operations directly, so adding support to libvirt is just a matter of setting the flags correctly when calling VMware. VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY and VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE are now valid flags for esx. Signed-off-by: Eric Blake --- diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c index fbe43c25e4..3ea2dd1444 100644 --- a/src/esx/esx_driver.c +++ b/src/esx/esx_driver.c @@ -4209,9 +4209,14 @@ esxDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, esxVI_TaskInfoState taskInfoState; char *taskInfoErrorMessage = NULL; virDomainSnapshotPtr snapshot = NULL; + bool diskOnly = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY) != 0; + bool quiesce = (flags & VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE) != 0; - /* ESX has no snapshot metadata, so this flag is trivial. */ - virCheckFlags(VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA, NULL); + /* ESX supports disk-only and quiesced snapshots; libvirt tracks no + * snapshot metadata so supporting that flag is trivial. */ + virCheckFlags(VIR_DOMAIN_SNAPSHOT_CREATE_DISK_ONLY | + VIR_DOMAIN_SNAPSHOT_CREATE_QUIESCE | + VIR_DOMAIN_SNAPSHOT_CREATE_NO_METADATA, NULL); if (esxVI_EnsureSession(priv->primary) < 0) { return NULL; @@ -4249,8 +4254,9 @@ esxDomainSnapshotCreateXML(virDomainPtr domain, const char *xmlDesc, if (esxVI_CreateSnapshot_Task(priv->primary, virtualMachine->obj, def->name, def->description, - esxVI_Boolean_True, - esxVI_Boolean_False, &task) < 0 || + diskOnly ? esxVI_Boolean_False : esxVI_Boolean_True, + quiesce ? esxVI_Boolean_True : esxVI_Boolean_False, + &task) < 0 || esxVI_WaitForTaskCompletion(priv->primary, task, domain->uuid, esxVI_Occurrence_RequiredItem, priv->parsedUri->autoAnswer, &taskInfoState,