
On 03/20/2014 07:35 AM, shaohef@linux.vnet.ibm.com wrote:
From: ShaoHe Feng <shaohef@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
-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" } ] }'
3. create a template with this pool like this: $ curl -u shhfeng:123456 -H "Content-Type: application/json" \ 4. create a VM with this template and start it.
Signed-off-by: ShaoHe Feng <shaohef@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)