[Kimchi-devel] [PATCH 3/3] issue #564: Parse logical volumes to find out their actual formats

Aline Manera alinefm at linux.vnet.ibm.com
Fri Mar 20 13:36:46 UTC 2015


Reviewed-by: Aline Manera <alinefm at linux.vnet.ibm.com>

On 18/03/2015 23:51, Crístian Viana wrote:
> All storage volumes belonging to a logical storage pool are reported by
> libvirt as 'raw', even when they are ISO images. When creating a
> template, only the volumes listed as 'iso' are displayed, so it's currently
> not possible to create a template using a volume from a logical storage
> pool.
>
> Instead of relying only on the volume format reported by libvirt, open
> and inspect the storage volumes which belong to a logical storage pool
> in order to find out whether they're ISO images.
>
> Fix issue #564 (List volumes other than "format=iso" when creating
> a template).
>
> Signed-off-by: Crístian Viana <vianac at linux.vnet.ibm.com>
> ---
>   src/kimchi/model/storagevolumes.py | 19 ++++++++++++++++++-
>   1 file changed, 18 insertions(+), 1 deletion(-)
>
> diff --git a/src/kimchi/model/storagevolumes.py b/src/kimchi/model/storagevolumes.py
> index 0480496..f02efca 100644
> --- a/src/kimchi/model/storagevolumes.py
> +++ b/src/kimchi/model/storagevolumes.py
> @@ -294,6 +294,7 @@ class StorageVolumeModel(object):
>           self.objstore = kargs['objstore']
>           self.task = TaskModel(**kargs)
>           self.storagevolumes = StorageVolumesModel(**kargs)
> +        self.storagepool = StoragePoolModel(**kargs)
>   
>       @staticmethod
>       def get_storagevolume(poolname, name, conn):
> @@ -321,6 +322,21 @@ class StorageVolumeModel(object):
>               # infomation. When there is no format information, we assume
>               # it's 'raw'.
>               fmt = 'raw'
> +
> +        iso_img = None
> +
> +        # 'raw' volumes from 'logical' pools may actually be 'iso';
> +        # libvirt always reports them as 'raw'
> +        pool_info = self.storagepool.lookup(pool)
> +        if pool_info['type'] == 'logical' and fmt == 'raw':
> +            try:
> +                iso_img = IsoImage(path)
> +            except IsoFormatError:
> +                # not 'iso' afterall
> +                pass
> +            else:
> +                fmt = 'iso'
> +
>           ref_cnt = get_disk_ref_cnt(self.objstore, self.conn, path)
>           res = dict(type=VOLUME_TYPE_MAP[info[0]],
>                      capacity=info[1],
> @@ -333,7 +349,8 @@ class StorageVolumeModel(object):
>                   path = os.path.join(os.path.dirname(path), os.readlink(path))
>               os_distro = os_version = 'unknown'
>               try:
> -                iso_img = IsoImage(path)
> +                if iso_img is None:
> +                    iso_img = IsoImage(path)
>                   os_distro, os_version = iso_img.probe()
>                   bootable = True
>               except IsoFormatError:




More information about the Kimchi-devel mailing list