|
|
c401cc |
From ee718f7ae1a1af66654416219f906e9e1a651e14 Mon Sep 17 00:00:00 2001
|
|
|
c401cc |
Message-Id: <ee718f7ae1a1af66654416219f906e9e1a651e14@dist-git>
|
|
|
c401cc |
From: Peter Krempa <pkrempa@redhat.com>
|
|
|
c401cc |
Date: Wed, 26 Feb 2014 14:55:12 +0100
|
|
|
c401cc |
Subject: [PATCH] virsh: domain: Fix undefine with storage of 'volume' disks
|
|
|
c401cc |
|
|
|
c401cc |
https://bugzilla.redhat.com/show_bug.cgi?id=1032370
|
|
|
c401cc |
|
|
|
c401cc |
The undefine code that removes the storage along with the VM didn't take
|
|
|
c401cc |
into account the existence of 'volume' type disks. Add the functionality.
|
|
|
c401cc |
|
|
|
c401cc |
(cherry picked from commit ef56cc43d1e2dd7e8fd8f5b9cb11c7a7b9ba65b3)
|
|
|
c401cc |
|
|
|
c401cc |
Signed-off-by: Jiri Denemark <jdenemar@redhat.com>
|
|
|
c401cc |
---
|
|
|
c401cc |
tools/virsh-domain.c | 36 ++++++++++++++++++++++++++++++++++--
|
|
|
c401cc |
1 file changed, 34 insertions(+), 2 deletions(-)
|
|
|
c401cc |
|
|
|
c401cc |
diff --git a/tools/virsh-domain.c b/tools/virsh-domain.c
|
|
|
c401cc |
index 724ec1a..03f96fb 100644
|
|
|
c401cc |
--- a/tools/virsh-domain.c
|
|
|
c401cc |
+++ b/tools/virsh-domain.c
|
|
|
c401cc |
@@ -2941,6 +2941,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
|
|
|
c401cc |
int nvol_nodes;
|
|
|
c401cc |
char *source = NULL;
|
|
|
c401cc |
char *target = NULL;
|
|
|
c401cc |
+ char *pool = NULL;
|
|
|
c401cc |
size_t i;
|
|
|
c401cc |
size_t j;
|
|
|
c401cc |
|
|
|
c401cc |
@@ -3050,6 +3051,7 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
|
|
|
c401cc |
vshUndefineVolume vol;
|
|
|
c401cc |
VIR_FREE(source);
|
|
|
c401cc |
VIR_FREE(target);
|
|
|
c401cc |
+ VIR_FREE(pool);
|
|
|
c401cc |
|
|
|
c401cc |
/* get volume source and target paths */
|
|
|
c401cc |
if (!(target = virXPathString("string(./target/@dev)", ctxt)))
|
|
|
c401cc |
@@ -3059,9 +3061,12 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
|
|
|
c401cc |
"./source/@file|"
|
|
|
c401cc |
"./source/@dir|"
|
|
|
c401cc |
"./source/@name|"
|
|
|
c401cc |
- "./source/@dev)", ctxt)))
|
|
|
c401cc |
+ "./source/@dev|"
|
|
|
c401cc |
+ "./source/@volume)", ctxt)))
|
|
|
c401cc |
continue;
|
|
|
c401cc |
|
|
|
c401cc |
+ pool = virXPathString("string(./source/@pool)", ctxt);
|
|
|
c401cc |
+
|
|
|
c401cc |
/* lookup if volume was selected by user */
|
|
|
c401cc |
if (vol_list) {
|
|
|
c401cc |
bool found = false;
|
|
|
c401cc |
@@ -3077,7 +3082,33 @@ cmdUndefine(vshControl *ctl, const vshCmd *cmd)
|
|
|
c401cc |
continue;
|
|
|
c401cc |
}
|
|
|
c401cc |
|
|
|
c401cc |
- if (!(vol.vol = virStorageVolLookupByPath(ctl->conn, source))) {
|
|
|
c401cc |
+ if (pool) {
|
|
|
c401cc |
+ virStoragePoolPtr storagepool = NULL;
|
|
|
c401cc |
+
|
|
|
c401cc |
+ if (!source) {
|
|
|
c401cc |
+ vshPrint(ctl,
|
|
|
c401cc |
+ _("Missing storage volume name for disk '%s'"),
|
|
|
c401cc |
+ target);
|
|
|
c401cc |
+ continue;
|
|
|
c401cc |
+ }
|
|
|
c401cc |
+
|
|
|
c401cc |
+ if (!(storagepool = virStoragePoolLookupByName(ctl->conn,
|
|
|
c401cc |
+ pool))) {
|
|
|
c401cc |
+ vshPrint(ctl,
|
|
|
c401cc |
+ _("Storage pool '%s' for volume '%s' not found."),
|
|
|
c401cc |
+ pool, target);
|
|
|
c401cc |
+ vshResetLibvirtError();
|
|
|
c401cc |
+ continue;
|
|
|
c401cc |
+ }
|
|
|
c401cc |
+
|
|
|
c401cc |
+ vol.vol = virStorageVolLookupByName(storagepool, source);
|
|
|
c401cc |
+ virStoragePoolFree(storagepool);
|
|
|
c401cc |
+
|
|
|
c401cc |
+ } else {
|
|
|
c401cc |
+ vol.vol = virStorageVolLookupByPath(ctl->conn, source);
|
|
|
c401cc |
+ }
|
|
|
c401cc |
+
|
|
|
c401cc |
+ if (!vol.vol) {
|
|
|
c401cc |
vshPrint(ctl,
|
|
|
c401cc |
_("Storage volume '%s'(%s) is not managed by libvirt. "
|
|
|
c401cc |
"Remove it manually.\n"), target, source);
|
|
|
c401cc |
@@ -3192,6 +3223,7 @@ out:
|
|
|
c401cc |
cleanup:
|
|
|
c401cc |
VIR_FREE(source);
|
|
|
c401cc |
VIR_FREE(target);
|
|
|
c401cc |
+ VIR_FREE(pool);
|
|
|
c401cc |
for (i = 0; i < nvols; i++) {
|
|
|
c401cc |
VIR_FREE(vols[i].source);
|
|
|
c401cc |
VIR_FREE(vols[i].target);
|
|
|
c401cc |
--
|
|
|
c401cc |
1.9.0
|
|
|
c401cc |
|