]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
parallels: add support of removing disks
authorDmitry Guryanov <dguryanov@parallels.com>
Tue, 4 Dec 2012 13:43:13 +0000 (17:43 +0400)
committerDaniel Veillard <veillard@redhat.com>
Tue, 11 Dec 2012 08:26:32 +0000 (16:26 +0800)
If some hard disk is not found in new domain configuration, it
should be removed.

Signed-off-by: Dmitry Guryanov <dguryanov@parallels.com>
src/parallels/parallels_driver.c

index 76218dc16955095ed5f0491a18d028cfae58e822..118dc139e178b371322bc25463b5bca0058be094 100644 (file)
@@ -1576,6 +1576,22 @@ cleanup:
     return ret;
 }
 
+static int parallelsRemoveHdd(parallelsDomObjPtr pdom,
+                              virDomainDiskDefPtr disk)
+{
+    char prlname[16];
+
+    prlname[15] = '\0';
+    snprintf(prlname, 15, "hdd%d", virDiskNameToIndex(disk->dst));
+
+    if (parallelsCmdRun(PRLCTL, "set", pdom->uuid,
+                        "--device-del", prlname,
+                        "--detach-only", NULL))
+        return -1;
+
+    return 0;
+}
+
 static int
 parallelsApplyDisksParams(virConnectPtr conn, parallelsDomObjPtr pdom,
                           virDomainDiskDefPtr *olddisks, int nold,
@@ -1594,10 +1610,14 @@ parallelsApplyDisksParams(virConnectPtr conn, parallelsDomObjPtr pdom,
         }
 
         if (!newdisk) {
-            virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
-                           _("There is no disk with source '%s' "
-                             "in the specified config"), olddisks[i]->serial);
-            return -1;
+            if (parallelsRemoveHdd(pdom, olddisk)) {
+                virReportError(VIR_ERR_ARGUMENT_UNSUPPORTED,
+                               _("Can't remove disk '%s' "
+                                 "in the specified config"), olddisks[i]->serial);
+                return -1;
+            }
+
+            continue;
         }
 
         if (olddisk->bus != newdisk->bus ||