Signed-off-by: Aline Manera <alinefm(a)linux.vnet.ibm.com>
---
src/kimchi/vmtemplate.py | 53 ++++++++++++++++++++++++++----------------------
1 file changed, 29 insertions(+), 24 deletions(-)
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index 45f49c7..7f7a907 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -153,23 +153,37 @@ class VMTemplate(object):
return xml
def _get_disks_xml(self, vm_uuid):
- ret = ""
- storage_path = self._get_storage_path()
+ # Current implementation just allows to create disk in one single
+ # storage pool, so we cannot mix the types (scsi volumes vs img file)
storage_type = self._get_storage_type()
+ storage_path = self._get_storage_path()
- for i, disk in enumerate(self.info['disks']):
- params = {}
- params['type'] = 'disk'
- params['disk'] = 'file'
- params['index'] = disk.get('index', i)
- params['bus'] = self.info['disk_bus']
- volume = "%s-%s.img" % (vm_uuid, params['index'])
- params['path'] = os.path.join(storage_path, volume)
- params['format'] = 'raw' if storage_type in
['logical'] \
- else 'qcow2'
- ret += get_disk_xml(params)[1]
+ base_disk_params = {'type': 'disk', 'disk':
'file',
+ 'bus': self.info['disk_bus'],
'format': 'qcow2'}
+ logical_disk_params = {'format': 'raw'}
+ iscsi_disk_params = {'disk': 'block', 'format':
'raw'}
- return ret
+ scsi_disk = 'volume' if self.fc_host_support else 'block'
+ scsi_disk_params = {'disk': scsi_disk, 'type': 'lun',
+ 'format': 'raw', 'bus':
'scsi'}
+
+ disks_xml = ''
+ pool_name = pool_name_from_uri(self.info['storagepool'])
+ for index, disk in enumerate(self.info['disks']):
+ params = dict(base_disk_params)
+ params.update(locals().get('%s_disk_params' % storage_type, {}))
+ params['index'] = index
+
+ volume = disk.get('volume')
+ if volume is not None:
+ params['path'] = self._get_volume_path(pool_name, volume)
+ else:
+ volume = "%s-%s.img" % (vm_uuid, params['index'])
+ params['path'] = os.path.join(storage_path, volume)
+
+ disks_xml += get_disk_xml(params)[1]
+
+ return disks_xml
def _get_graphics_xml(self, params):
graphics_xml = """
@@ -334,16 +348,7 @@ class VMTemplate(object):
graphics = kwargs.get('graphics')
params['graphics'] = self._get_graphics_xml(graphics)
params['cpu_info'] = self._get_cpu_xml()
-
- # Current implementation just allows to create disk in one single
- # storage pool, so we cannot mix the types (scsi volumes vs img file)
- storage_type = self._get_storage_type()
- if storage_type == "iscsi":
- params['disks'] = self._get_iscsi_disks_xml()
- elif storage_type == "scsi":
- params['disks'] = self._get_scsi_disks_xml()
- else:
- params['disks'] = self._get_disks_xml(vm_uuid)
+ params['disks'] = self._get_disks_xml(vm_uuid)
qemu_stream_dns = kwargs.get('qemu_stream_dns', False)
libvirt_stream_protocols = kwargs.get('libvirt_stream_protocols', [])
--
1.9.3