Description of problem: I wish to be able to move volume from one pool to another using libvirt api. Possibly those pools could have different backend (lvm, dir, ...)
Moving between different types of pools effectively means doing a deep copy of the data. This is in fact already possible by using the virStorageVolCreateXMLFrom API - this creates a volume in a pool, and then copies all data from the passed-in volume which can be in any other pool. Then just delete the original volume Explicit support for moving volumes between pools would however be useful for moving volumes between pools of the directory pool type, since a minimal overhead rename could be done instead of full copy+delete.
We have vol-upload and vol-download APIs which can enable this