[PATCH 2/3] hyperv: Implement domainSnapshotDelete()

Jonathon Jongsma via Devel posted 3 patches 4 days, 4 hours ago
[PATCH 2/3] hyperv: Implement domainSnapshotDelete()
Posted by Jonathon Jongsma via Devel 4 days, 4 hours ago
Signed-off-by: Jonathon Jongsma <jjongsma@redhat.com>
---
 src/hyperv/hyperv_driver.c | 41 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 41 insertions(+)

diff --git a/src/hyperv/hyperv_driver.c b/src/hyperv/hyperv_driver.c
index 18e06f0e2a..841d9ccaa5 100644
--- a/src/hyperv/hyperv_driver.c
+++ b/src/hyperv/hyperv_driver.c
@@ -4163,6 +4163,46 @@ hypervDomainSnapshotLookupByName(virDomainPtr domain,
 }
 
 
+static int
+hypervDomainSnapshotDelete(virDomainSnapshotPtr snapshot,
+                           unsigned int flags)
+{
+    hypervPrivate *priv = snapshot->domain->conn->privateData;
+    g_autoptr(hypervInvokeParamsList) params = NULL;
+    g_auto(virBuffer) eprQuery = VIR_BUFFER_INITIALIZER;
+    g_autoptr(Msvm_VirtualSystemSettingData) snapshotVSSD = NULL;
+
+    virCheckFlags(0, -1);
+
+    snapshotVSSD = hypervDomainLookupSnapshotSD(snapshot->domain, snapshot->name);
+    if (!snapshotVSSD)
+        return -1;
+
+    /* Build EPR for the snapshot to destroy */
+    virBufferEscapeSQL(&eprQuery,
+                      MSVM_VIRTUALSYSTEMSETTINGDATA_WQL_SELECT "WHERE InstanceID = '%s'",
+                      snapshotVSSD->data->InstanceID);
+
+    /* Destroy snapshot via DestroySnapshot method */
+    params = hypervCreateInvokeParamsList("DestroySnapshot",
+                                          MSVM_VIRTUALSYSTEMSNAPSHOTSERVICE_SELECTOR,
+                                          Msvm_VirtualSystemSnapshotService_WmiInfo);
+
+    if (!params)
+        return -1;
+
+    if (hypervAddEprParam(params, "AffectedSnapshot", &eprQuery,
+                          Msvm_VirtualSystemSettingData_WmiInfo) < 0)
+        return -1;
+
+    /* Invoke the method */
+    if (hypervInvokeMethod(priv, &params, NULL) < 0)
+        return -1;
+
+    return 0;
+}
+
+
 static int
 hypervDomainListAllSnapshots(virDomainPtr domain,
                              virDomainSnapshotPtr **snaps,
@@ -4452,6 +4492,7 @@ static virHypervisorDriver hypervHypervisorDriver = {
     .domainHasCurrentSnapshot = hypervDomainHasCurrentSnapshot, /* 12.2.0 */
     .domainSnapshotCurrent = hypervDomainSnapshotCurrent, /* 12.2.0 */
     .domainSnapshotGetParent = hypervDomainSnapshotGetParent, /* 12.2.0 */
+    .domainSnapshotDelete = hypervDomainSnapshotDelete, /* 12.2.0 */
 };
 
 
-- 
2.53.0