[Kimchi-devel] [PATCH] Fix issue #620: Allow use iSCSI/SCSI volume on Template
Aline Manera
alinefm at linux.vnet.ibm.com
Wed Mar 18 20:05:36 UTC 2015
When selecting an iSCSI/SCSI volume to create a Template, the disk size is
calculated according to the selected volume.
In that case only the volume information should be used:
{
...
"disks":[
{
"volume":"unit:0:0:2",
"index":0
}
]
}
Also to get and display the disk size for user we should query the
selected volume.
This patch also created function to call GET /storagepools/<pool> API.
That way we can easily get the pool type without the need to query the information
on all pools returned by GET /storagepools API
Signed-off-by: Aline Manera <alinefm at linux.vnet.ibm.com>
---
ui/js/src/kimchi.api.js | 15 +++++-
ui/js/src/kimchi.template_edit_main.js | 86 ++++++++++++++++++----------------
2 files changed, 59 insertions(+), 42 deletions(-)
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
index 2abe8f5..838b8d3 100644
--- a/ui/js/src/kimchi.api.js
+++ b/ui/js/src/kimchi.api.js
@@ -1,7 +1,7 @@
/*
* Project Kimchi
*
- * Copyright IBM, Corp. 2013-2014
+ * Copyright IBM, Corp. 2013-2015
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -806,6 +806,19 @@ var kimchi = {
});
},
+ getStoragePool: function(poolName, suc, err) {
+ var url = kimchi.url + 'storagepools/' + encodeURIComponent(poolName);
+ kimchi.requestJSON({
+ url : url,
+ type : 'GET',
+ contentType : 'application/json',
+ timeout: 2000,
+ dataType : 'json',
+ success : suc,
+ error : err
+ });
+ },
+
getStoragePoolVolume: function(poolName, volumeName, suc, err) {
var url = kimchi.url + 'storagepools/' + encodeURIComponent(poolName) + '/storagevolumes/' + encodeURIComponent(volumeName);
kimchi.requestJSON({
diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js
index a557ca5..85f76cd 100644
--- a/ui/js/src/kimchi.template_edit_main.js
+++ b/ui/js/src/kimchi.template_edit_main.js
@@ -89,51 +89,54 @@ kimchi.template_edit_main = function() {
$('select', '#form-template-storage').change(function() {
var selectedItem = $(this).parent().parent();
var tempStorageNameFull = $(this).val();
- var tempType;
- var tempStorageName =tempStorageNameFull.split('/')[0];
- var scsiCap;
- $.each(result, function(index, storageEntities) {
- if (tempStorageName === storageEntities.name) {
- selectedItem.find('.template-storage-type').val(storageEntities.type);
- scsiCap = storageEntities.capacity / Math.pow(1024, 3);
- tempType = storageEntities.type;
+ var tempName = tempStorageNameFull.split('/');
+ var tempStorageName = tempName[0];
+ $('.template-storage-name').val(tempStorageNameFull);
+ kimchi.getStoragePool(tempStorageName, function(info) {
+ tempType = info.type;
+ selectedItem.find('.template-storage-type').val(tempType);
+ if (tempType === 'iscsi' || tempType === 'scsi') {
+ kimchi.getStoragePoolVolume(tempStorageName, tempName[tempName.length-1], function(info) {
+ volSize = info.capacity / Math.pow(1024, 3);
+ $('.template-storage-disk', selectedItem).attr('readonly', true).val(volSize);
+ });
+ } else {
+ $('.template-storage-disk', selectedItem).attr('readonly', false);
}
});
- if (tempType === 'iscsi' || tempType === 'scsi') {
- $('.template-storage-disk', selectedItem).attr('readonly', true).val(scsiCap);
- } else {
- $('.template-storage-disk', selectedItem).attr('readonly', false);
- }
- $('.template-storage-name').val(tempStorageNameFull);
});
};
if ((origDisks && origDisks.length) && (origPool && origPool.length)) {
splitPool = origPool.split('/');
- var defaultPool;
+ var defaultPool = splitPool[splitPool.length-1];
var defaultType;
- $.each(result, function(index, poolEntities) {
- if (poolEntities.name === splitPool[splitPool.length-1]) {
- defaultType = poolEntities.type;
- defaultPool = splitPool[splitPool.length-1]
- }
- });
- if (origDisks[0]['volume']) {
- defaultPool = defaultPool + '/' + origDisks[0]['volume'];
- }
- $.each(origDisks, function(index, diskEntities) {
- var storageNodeData = {
- viewMode : '',
- editMode : 'hide',
- storageName : defaultPool,
- storageType : defaultType,
- storageDisk : diskEntities.size
- }
- addStorageItem(storageNodeData);
+
+ kimchi.getStoragePool(defaultPool, function(info) {
+ defaultType = info.type;
+ $.each(origDisks, function(index, diskEntities) {
+ var storageNodeData = {
+ viewMode : '',
+ editMode : 'hide',
+ storageName : defaultPool,
+ storageType : defaultType,
+ storageDisk : diskEntities.size
+ }
+
+ if (diskEntities.volume) {
+ kimchi.getStoragePoolVolume(defaultPool, diskEntities.volume, function(info) {
+ var volSize = info.capacity / Math.pow(1024, 3);
+ var nodeData = storageNodeData
+ nodeData.storageName = defaultPool + '/' + diskEntities.volume;
+ nodeData.storageDisk = volSize;
+ addStorageItem(nodeData);
+ $('.template-storage-disk').attr('readonly', true);
+ });
+ } else {
+ addStorageItem(storageNodeData);
+ }
+ });
});
- if(defaultType === 'iscsi' || defaultType === 'scsi') {
- $('.template-storage-disk').attr('readonly', true);
- }
}
$('#template-edit-storage-add-button').button({
@@ -249,10 +252,11 @@ kimchi.template_edit_main = function() {
//Fix me: Only support one storage pool now
var storages = $('.template-tab-body .item', '#form-template-storage');
var tempName = $('.template-storage-name', storages).val();
+ var tmpItem = $('#form-template-storage .item');
tempName = tempName.split('/');
- var tempNameHead =tempName[0];
+ var tempNameHead = tempName[0];
var tempNameTail = tempNameHead;
- if(tempNameHead === 'iscsi' || tempNameHead =='scsi') {
+ if($('.template-storage-type', tmpItem).val() === 'iscsi' || $('.template-storage-type', tmpItem).val() == 'scsi') {
tempNameTail = tempName[tempName.length-1];
}
tempName = '/storagepools/' + tempNameHead;
@@ -260,12 +264,12 @@ kimchi.template_edit_main = function() {
$.each(editableFields, function(i, field) {
/* Support only 1 disk at this moment */
if (field == 'disks') {
- var tmpItem = $('#form-template-storage .item');
- origDisks[0].size = Number($('.template-storage-disk', tmpItem).val());
- if($('.template-storage-type', tmpItem).val() === 'iscsi' || $('.template-storage-type', tmpItem).val() =='scsi') {
+ if($('.template-storage-type', tmpItem).val() === 'iscsi' || $('.template-storage-type', tmpItem).val() == 'scsi') {
+ origDisks[0]['size'] && delete origDisks[0]['size'];
origDisks[0]['volume'] = tempNameTail;
} else {
origDisks[0]['volume'] && delete origDisks[0]['volume'];
+ origDisks[0].size = Number($('.template-storage-disk', tmpItem).val());
}
data[field] = origDisks;
}
--
2.1.0
More information about the Kimchi-devel
mailing list