
V2 - Address Aline's comments - Creates rest API function to retrieve specific storage volume V1 - Show storagepool + volume name correctly in storagepool field after saving - Show disk size according to storagepool or storagepool/volume selected - Block disk size input box when disk is type volume (iscsi/scsi volumes cannot be changed) Rodrigo Trujillo (2): Issue #363: Add new rest api function - getStoragePoolVolume Issue #363: Fix data/information consistence in edit template window ui/js/src/kimchi.api.js | 13 +++++++++++++ ui/js/src/kimchi.template_edit_main.js | 33 +++++++++++++++++++++++++++++++-- 2 files changed, 44 insertions(+), 2 deletions(-) -- 1.8.5.3

This patch adds new api AJAX method to retrieve specific storage pool volume information. This method is used in template edit window. Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.api.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js index 376bc86..963d2d7 100644 --- a/ui/js/src/kimchi.api.js +++ b/ui/js/src/kimchi.api.js @@ -744,6 +744,19 @@ var kimchi = { }); }, + getStoragePoolVolume: function(pool, volume, suc, err) { + var url = kimchi.url + 'storagepools/' + pool + '/storagevolumes/' + volume; + kimchi.requestJSON({ + url : url, + type : 'GET', + contentType : 'application/json', + timeout: 2000, + dataType : 'json', + success : suc, + error : err + }); + }, + addVMStorage : function(settings, suc, err) { var vm = encodeURIComponent(settings['vm']); delete settings['vm']; -- 1.8.5.3

oh, I have already send a similar patch. on 04/02. [PATCH 1/3] UI: add a api to get an storagevolume info [PATCH 2/3] UI: change the disks field of template when the pool changes. [PATCH 3/3] UI: set the correct disks field and storage pool filed when initialize the template edit page. On 04/09/2014 10:53 AM, Rodrigo Trujillo wrote:
This patch adds new api AJAX method to retrieve specific storage pool volume information. This method is used in template edit window.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.api.js | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js index 376bc86..963d2d7 100644 --- a/ui/js/src/kimchi.api.js +++ b/ui/js/src/kimchi.api.js @@ -744,6 +744,19 @@ var kimchi = { }); },
+ getStoragePoolVolume: function(pool, volume, suc, err) { + var url = kimchi.url + 'storagepools/' + pool + '/storagevolumes/' + volume; + kimchi.requestJSON({ + url : url, + type : 'GET', + contentType : 'application/json', + timeout: 2000, + dataType : 'json', + success : suc, + error : err + }); + }, + addVMStorage : function(settings, suc, err) { var vm = encodeURIComponent(settings['vm']); delete settings['vm'];
-- Thanks and best regards! Sheldon Feng(冯少合)<shaohef@linux.vnet.ibm.com> IBM Linux Technology Center

On 04/08/2014 11:53 PM, Rodrigo Trujillo wrote:
This patch adds new api AJAX method to retrieve specific storage pool volume information. This method is used in template edit window.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.api.js | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js index 376bc86..963d2d7 100644 --- a/ui/js/src/kimchi.api.js +++ b/ui/js/src/kimchi.api.js @@ -744,6 +744,19 @@ var kimchi = { }); },
+ getStoragePoolVolume: function(pool, volume, suc, err) { + var url = kimchi.url + 'storagepools/' + pool + '/storagevolumes/' + volume;
You need to encode the pool and volume names to avoid problems with special characters
+ kimchi.requestJSON({ + url : url, + type : 'GET', + contentType : 'application/json', + timeout: 2000, + dataType : 'json', + success : suc, + error : err + }); + }, + addVMStorage : function(settings, suc, err) { var vm = encodeURIComponent(settings['vm']); delete settings['vm'];

This patch changes edit template window to fix consistence: - Show storagepool + volume name correctly in storagepool field after saving - Show disk size according to storagepool or storagepool/volume selected - Block disk size input box when disk is type volume (iscsi/scsi volumes cannot be changed) Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.template_edit_main.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-) diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js index 386095b..c96021f 100644 --- a/ui/js/src/kimchi.template_edit_main.js +++ b/ui/js/src/kimchi.template_edit_main.js @@ -30,6 +30,11 @@ kimchi.template_edit_main = function() { } var disks = template.disks; $('input[name="disks"]').val(disks[0].size); + if (disks[0].volume) { + var spool_value = $('#form-template-edit [name="storagepool"]').val(); + $('input[name="storagepool"]', templateEditForm).val(spool_value + '/' + disks[0].volume); + $('input[name="disks"]', templateEditForm).attr('disabled','disabled'); + } var options = [{label: 'VNC', value: 'vnc'}]; kimchi.getCapabilities(function(result) { @@ -37,7 +42,7 @@ kimchi.template_edit_main = function() { options.push({label: 'Spice', value: 'spice'}) } }, function() { - }, function(){ + }, function() { kimchi.select('template-edit-graphics-list', options); }); @@ -101,6 +106,29 @@ kimchi.template_edit_main = function() { kimchi.window.close(); }); + $('input[name="storagepool"]', templateEditForm).change(function() { + var storagepool = $('#form-template-edit [name="storagepool"]').val(); + var storageArray = storagepool.split("/"); + if (storageArray.length > 3) { + volumeName = storageArray.pop(); + poolName = storageArray.pop(); + kimchi.getStoragePoolVolume(poolName, volumeName, function(result) { + $('input[name="disks"]', templateEditForm).val(result.capacity / Math.pow(1024,3)); + $('input[name="disks"]', templateEditForm).attr('disabled','disabled'); + return false; + }, function (err) { + kimchi.message.error(err.responseJSON.reason); + }); + } else if (origDisks[0].volume) { + // Set default value when original disk was a volume + $('input[name="disks"]', templateEditForm).val(10); + $('input[name="disks"]', templateEditForm).removeAttr('disabled'); + } else { + $('input[name="disks"]', templateEditForm).val(origDisks[0].size); + $('input[name="disks"]', templateEditForm).removeAttr('disabled'); + } + }); + $('#tmpl-edit-button-save').on('click', function() { var editableFields = [ 'name', 'cpus', 'memory', 'storagepool', 'disks', 'graphics']; var data = {}; @@ -124,9 +152,10 @@ kimchi.template_edit_main = function() { storageArray = storagepool.split("/"); if (storageArray.length > 3){ /* Support only 1 disk at this moment */ - delete data["disks"][0].size; data["disks"][0].volume = storageArray.pop(); data['storagepool'] = storageArray.join("/"); + } else if (data["disks"][0].volume) { + delete data["disks"][0].volume; } var networks = templateEditForm.serializeObject().networks; if (networks instanceof Array) { -- 1.8.5.3

On 04/08/2014 11:53 PM, Rodrigo Trujillo wrote:
This patch changes edit template window to fix consistence: - Show storagepool + volume name correctly in storagepool field after saving - Show disk size according to storagepool or storagepool/volume selected - Block disk size input box when disk is type volume (iscsi/scsi volumes cannot be changed)
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.template_edit_main.js | 33 +++++++++++++++++++++++++++++++-- 1 file changed, 31 insertions(+), 2 deletions(-)
diff --git a/ui/js/src/kimchi.template_edit_main.js b/ui/js/src/kimchi.template_edit_main.js index 386095b..c96021f 100644 --- a/ui/js/src/kimchi.template_edit_main.js +++ b/ui/js/src/kimchi.template_edit_main.js @@ -30,6 +30,11 @@ kimchi.template_edit_main = function() { } var disks = template.disks; $('input[name="disks"]').val(disks[0].size); + if (disks[0].volume) { + var spool_value = $('#form-template-edit [name="storagepool"]').val(); + $('input[name="storagepool"]', templateEditForm).val(spool_value + '/' + disks[0].volume); + $('input[name="disks"]', templateEditForm).attr('disabled','disabled'); + }
var options = [{label: 'VNC', value: 'vnc'}]; kimchi.getCapabilities(function(result) { @@ -37,7 +42,7 @@ kimchi.template_edit_main = function() { options.push({label: 'Spice', value: 'spice'}) } }, function() { - }, function(){ + }, function() { kimchi.select('template-edit-graphics-list', options); });
@@ -101,6 +106,29 @@ kimchi.template_edit_main = function() { kimchi.window.close(); });
+ $('input[name="storagepool"]', templateEditForm).change(function() { + var storagepool = $('#form-template-edit [name="storagepool"]').val(); + var storageArray = storagepool.split("/"); + if (storageArray.length > 3) { + volumeName = storageArray.pop(); + poolName = storageArray.pop(); + kimchi.getStoragePoolVolume(poolName, volumeName, function(result) { + $('input[name="disks"]', templateEditForm).val(result.capacity / Math.pow(1024,3)); + $('input[name="disks"]', templateEditForm).attr('disabled','disabled'); + return false; + }, function (err) { + kimchi.message.error(err.responseJSON.reason); + });
+ } else if (origDisks[0].volume) { + // Set default value when original disk was a volume + $('input[name="disks"]', templateEditForm).val(10); + $('input[name="disks"]', templateEditForm).removeAttr('disabled'); + } else {
If 'disks' has 'volume' field it is a iSCSI or SCSI volume so the size is the volume size, right? This 'if' statement is not needed in my perspective as this is handled by the first "if" (if (storageArray.length > 3) {)
+ $('input[name="disks"]', templateEditForm).val(origDisks[0].size); + $('input[name="disks"]', templateEditForm).removeAttr('disabled'); + } + }); + $('#tmpl-edit-button-save').on('click', function() { var editableFields = [ 'name', 'cpus', 'memory', 'storagepool', 'disks', 'graphics']; var data = {}; @@ -124,9 +152,10 @@ kimchi.template_edit_main = function() { storageArray = storagepool.split("/"); if (storageArray.length > 3){ /* Support only 1 disk at this moment */ - delete data["disks"][0].size; data["disks"][0].volume = storageArray.pop(); data['storagepool'] = storageArray.join("/"); + } else if (data["disks"][0].volume) { + delete data["disks"][0].volume; } var networks = templateEditForm.serializeObject().networks; if (networks instanceof Array) {
participants (3)
-
Aline Manera
-
Rodrigo Trujillo
-
Sheldon