On 03/20/2014 07:35 AM, shaohef(a)linux.vnet.ibm.com wrote:
From: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
Now this patch do not touch the scsi code, so it does not support to create
a VM from an scsi pool template at present.
It just supports iscsi luns for template, and create a VM by this
template.
Will refactor the related code, and support the scsi lun at template
level.
1. how to test this patch:
create a iscsi pool named "my-iscsi" with UI
2.get the volumes name of this pool:
$ sudo virsh vol-list my-iscsi
Name Path
-----------------------------------------
unit:0:0:0 /dev/disk/by-id/wwn-0x60014056aefaef96d4e4033953d9627d
3. create a template with this pool like this:
$ curl -u shhfeng:123456 -H "Content-Type: application/json" \
> -H "Accept: application/json" \
>
http://localhost:8000/templates/ -X POST -d '
> {
> "cpus": 1,
> "cdrom":"/home/shhfeng/iso/f17.iso",
> "name":"F17-ISCSI",
> "storagepool":"/storagepools/my-iscsi",
> "disks":[
> {
> "index":0,
> "volume":"unit:0:0:0"
> }
> ]
> }'
4. create a VM with this template and start it.
Signed-off-by: ShaoHe Feng <shaohef(a)linux.vnet.ibm.com>
---
src/kimchi/model/vms.py | 4 +++-
src/kimchi/vmtemplate.py | 4 +++-
2 files changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
index 79b335c..f962cbb 100644
--- a/src/kimchi/model/vms.py
+++ b/src/kimchi/model/vms.py
@@ -184,7 +184,9 @@ class VMsModel(object):
# If storagepool is SCSI, volumes will be LUNs and must be passed by
# the user from UI or manually.
vol_list = []
- if t._get_storage_type() in READONLY_POOL_TYPE:
+ if t._get_storage_type() == "iscsi":
+ vol_list = []
+ elif t._get_storage_type() in READONLY_POOL_TYPE:
if not params.get('volumes'):
raise MissingParameter('KCHVM0017E')
else:
diff --git a/src/kimchi/vmtemplate.py b/src/kimchi/vmtemplate.py
index 5e84c55..d13f714 100644
--- a/src/kimchi/vmtemplate.py
+++ b/src/kimchi/vmtemplate.py
@@ -305,7 +305,9 @@ class VMTemplate(object):
# Current implementation just allows to create disk in one single
# storage pool, so we cannot mix the types (scsi volumes vs img file)
- if self._get_storage_type() in READONLY_POOL_TYPE:
+ if self._get_storage_type() == "iscsi":
+ params['disks'] = self._get_iscsi_disks_xml()
+ elif self._get_storage_type() in READONLY_POOL_TYPE:
params['disks'] =
self._get_scsi_disks_xml(kwargs.get('volumes'))
The function self._get_scsi_disks_xml() is specific for scsi, so I
suggest to properly update the "if" statement.
elif self._get_storage_type() == 'scsi':
params['disks'] = self._get_scsi_disks_xml(kwargs.get('volumes'))
Also instead of calling self._get_storage_type() twice in the "if"
statements, store the value:
storage_type = self._get_storage_type()
if storage_type == 'iscsi':
....
elif storage_type == 'scsi':
....
else:
params['disks'] = self._get_disks_xml(vm_uuid)