mirror of https://gitee.com/openkylin/libvirt.git
virsh: Check whether found volume is member of the specified storage pool
When looking up storage volumes virsh uses multiple lookup steps. Some of the steps don't require a pool name specified. This resulted into a possibility that a volume would be part of a different pool than the user specified: Let's have a /var/lib/libvirt/images/test.qcow image in the 'default' pool and a second pool 'emptypool': Currently we'd return: $ virsh vol-info --pool emptypool /var/lib/libvirt/images/test.qcow Name: test.qcow Type: file Capacity: 100.00 MiB Allocation: 212.00 KiB After the fix: $ tools/virsh vol-info --pool emptypool /var/lib/libvirt/images/test.qcow error: Requested volume '/var/lib/libvirt/images/test.qcow' is not in pool 'emptypool' Resolves: https://bugzilla.redhat.com/show_bug.cgi?id=1088667
This commit is contained in:
parent
359d9941d0
commit
6ef0b03483
|
@ -104,6 +104,25 @@ vshCommandOptVolBy(vshControl *ctl, const vshCmd *cmd,
|
|||
"might help"), n, pooloptname);
|
||||
}
|
||||
|
||||
/* If the pool was specified, then make sure that the returned
|
||||
* volume is from the given pool */
|
||||
if (pool && vol) {
|
||||
virStoragePoolPtr volpool = NULL;
|
||||
|
||||
if ((volpool = virStoragePoolLookupByVolume(vol))) {
|
||||
if (STRNEQ(virStoragePoolGetName(volpool),
|
||||
virStoragePoolGetName(pool))) {
|
||||
vshResetLibvirtError();
|
||||
vshError(ctl,
|
||||
_("Requested volume '%s' is not in pool '%s'"),
|
||||
n, virStoragePoolGetName(pool));
|
||||
virStorageVolFree(vol);
|
||||
vol = NULL;
|
||||
}
|
||||
virStoragePoolFree(volpool);
|
||||
}
|
||||
}
|
||||
|
||||
if (pool)
|
||||
virStoragePoolFree(pool);
|
||||
|
||||
|
|
Loading…
Reference in New Issue