]> xenbits.xensource.com Git - libvirt.git/commitdiff
esx: Add support for storage volume deletion
authorMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 22 Dec 2010 15:45:50 +0000 (16:45 +0100)
committerMatthias Bolte <matthias.bolte@googlemail.com>
Wed, 22 Dec 2010 18:48:54 +0000 (19:48 +0100)
src/esx/esx_storage_driver.c
src/esx/esx_vi_generator.input

index e6803c258f327c86033cffcd9bbeca2fbd108517..544551cd9f24ac0caa1f5ca91796d9890098889e 100644 (file)
@@ -1376,6 +1376,54 @@ esxStorageVolumeCreateXMLFrom(virStoragePoolPtr pool, const char *xmldesc,
 
 
 
+static int
+esxStorageVolumeDelete(virStorageVolPtr volume, unsigned int flags)
+{
+    int result = -1;
+    esxPrivate *priv = volume->conn->storagePrivateData;
+    char *datastorePath = NULL;
+    esxVI_ManagedObjectReference *task = NULL;
+    esxVI_TaskInfoState taskInfoState;
+    char *taskInfoErrorMessage = NULL;
+
+    virCheckFlags(0, -1);
+
+    if (esxVI_EnsureSession(priv->primary) < 0) {
+        return -1;
+    }
+
+    if (virAsprintf(&datastorePath, "[%s] %s", volume->pool, volume->name) < 0) {
+        virReportOOMError();
+        goto cleanup;
+    }
+
+    if (esxVI_DeleteVirtualDisk_Task(priv->primary, datastorePath,
+                                     priv->primary->datacenter->_reference,
+                                     &task) < 0 ||
+        esxVI_WaitForTaskCompletion(priv->primary, task, NULL,
+                                    esxVI_Occurrence_None, priv->autoAnswer,
+                                    &taskInfoState, &taskInfoErrorMessage) < 0) {
+        goto cleanup;
+    }
+
+    if (taskInfoState != esxVI_TaskInfoState_Success) {
+        ESX_ERROR(VIR_ERR_INTERNAL_ERROR, _("Could not delete volume: %s"),
+                  taskInfoErrorMessage);
+        goto cleanup;
+    }
+
+    result = 0;
+
+  cleanup:
+    VIR_FREE(datastorePath);
+    esxVI_ManagedObjectReference_Free(&task);
+    VIR_FREE(taskInfoErrorMessage);
+
+    return result;
+}
+
+
+
 static int
 esxStorageVolumeGetInfo(virStorageVolPtr volume, virStorageVolInfoPtr info)
 {
@@ -1574,7 +1622,7 @@ static virStorageDriver esxStorageDriver = {
     esxStorageVolumeLookupByPath,          /* volLookupByPath */
     esxStorageVolumeCreateXML,             /* volCreateXML */
     esxStorageVolumeCreateXMLFrom,         /* volCreateXMLFrom */
-    NULL,                                  /* volDelete */
+    esxStorageVolumeDelete,                /* volDelete */
     NULL,                                  /* volWipe */
     esxStorageVolumeGetInfo,               /* volGetInfo */
     esxStorageVolumeDumpXML,               /* volGetXMLDesc */
index 4018c6e2bc713d104924821ffb22621263b0c4ff..bd2da111985f5f1eb2638e6b0c6efe671b85f4b8 100644 (file)
@@ -735,6 +735,13 @@ method CreateVirtualDisk_Task returns ManagedObjectReference r
 end
 
 
+method DeleteVirtualDisk_Task returns ManagedObjectReference r
+    ManagedObjectReference                   _this:VirtualDiskManager       r
+    String                                   name                           r
+    ManagedObjectReference                   datacenter                     o
+end
+
+
 method DestroyPropertyFilter
     ManagedObjectReference                   _this                          r
 end