
When I select the text associated to the radio box it does not select the option. Need to fix it More comments below On 02/05/2014 12:18 PM, Rodrigo Trujillo wrote:
This patch implements the UI functions and API calls to show to user the list of volumes (LUNs) of a SCSI FC storagepools. The user can then select the LUN when creating a new VM.
Signed-off-by: Rodrigo Trujillo <rodrigo.trujillo@linux.vnet.ibm.com> --- ui/js/src/kimchi.api.js | 13 +++++++ ui/js/src/kimchi.guest_add_main.js | 73 +++++++++++++++++++++++++++++++++++--- ui/pages/i18n.html.tmpl | 1 + 3 files changed, 83 insertions(+), 4 deletions(-)
diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js index 66fc41e..4597c5d 100644 --- a/ui/js/src/kimchi.api.js +++ b/ui/js/src/kimchi.api.js @@ -155,6 +155,19 @@ var kimchi = { }); },
+ /* + * Retrieve the information of a storage pool by the given name. + */ + retrieveStoragePool : function(storagePoolName, suc, err) { + kimchi.requestJSON({ + url : kimchi.url + "storagepools/" + + encodeURIComponent(storagePoolName), + type : 'GET', + contentType : 'application/json', + dataType : 'json' + }).done(suc); + }, + /** * Retrieve the information of a template by the given name. */ diff --git a/ui/js/src/kimchi.guest_add_main.js b/ui/js/src/kimchi.guest_add_main.js index 2085562..6b8fc38 100644 --- a/ui/js/src/kimchi.guest_add_main.js +++ b/ui/js/src/kimchi.guest_add_main.js @@ -62,9 +62,7 @@ kimchi.guest_add_main = function() { } });
- var addGuest = function(event) { - var formData = $('#form-vm-add').serializeObject(); - + var addGuest = function(formData) { kimchi.createVM(formData, function() { kimchi.listVmsAuto(); kimchi.window.close(); @@ -79,8 +77,75 @@ kimchi.guest_add_main = function() { return false; };
+ // This function is used to select a lun for new vm disk if template has + // a SCSI storagepool associated. + function getLun() { + var formData = $('#form-vm-add').serializeObject(); + var templateName = formData.template.substring(11);
+ kimchi.retrieveTemplate(templateName,
function(templateInfo) { + var poolName = templateInfo.storagepool.substring(14); + kimchi.retrieveStoragePool(poolName, function(poolInfo){ + if (poolInfo.type === "scsi") { + kimchi.listStorageVolumes(poolInfo.name, function(lunsList) { + if (lunsList.length == 0) { + kimchi.message.error('There are not volumes for this pool');
You need to add the message to i18n.html.tmpl and use it here, otherwise this message will not be translated.
+ return false; + } + var popUpList = '<section class="form-section">' + + '<h2>1. Storage Pool: ' + poolInfo.name + '</h2>' + + '<div class="lun_radios">';
We need to improve the message to the user. "You select a Template associated to a SCSI Storage Pool so you need to select which LUN you wan to use as primary disk to guest." Or something like it
+ $.each(lunsList, function(index, value) { + popUpList += '<div class="field">' + + '<input type="radio" id="lun-' + value.name + '" name="lun" value="' + value.name + '">' + + '<label for="lun-' + value.name + '">' + value.name + '</label></div>'; + }); + popUpList += '</div></section>'; + console.log(popUpList) + var popup = $(popUpList); + popup.dialog({ + autoOpen : true, + modal : true, + width : 400, + draggable : false, + resizable : false, + closeText: "X", + dialogClass : "network-config", + title: "Please, select a LUN", + close: function( event, ui ) { $('input[name=lun]').attr('checked',false); }, + buttons : [ { + text : i18n.action_select_lun, + class: "ui-button-primary", + click : function() { + var lunName = $('input:radio[name=lun]:checked').val(); + if (lunName === undefined) { + kimchi.message.error('You must select a LUN'); + } else { + formData.volumes = new Array(lunName); + addGuest(formData); + } + $( this ).dialog( "close" ); + } + }] + });
What about split this big function into smaller ones? It is hard to read it that way Example: 1) function to get template 2) function to get storage associate to template 3) function to get type of storage pool get template; get storage pool get storage pool type if pool type != scsi: return 4) function to display new dialog
+ },function() { + // listStorageVolumes error handler + kimchi.message.error(i18n['msg.kimchi.list.volume.fail']); + }); + } + else { addGuest(formData); } + }, function() { + // retrieveStoragePool error handler + kimchi.message.error(i18n['msg.kimchi.retrieve.pool.fail']); + }); + }, function() { + // retrieveStoragePool error handler + kimchi.message.error(i18n['msg.fail.template.retrieve']); + }); + return false; + } + $('#form-vm-add').on('submit', addGuest); - $('#vm-doAdd').on('click', addGuest); + $('#vm-doAdd').on('click', getLun);
showTemplates(); }; diff --git a/ui/pages/i18n.html.tmpl b/ui/pages/i18n.html.tmpl index a4c3ccb..f635fdf 100644 --- a/ui/pages/i18n.html.tmpl +++ b/ui/pages/i18n.html.tmpl @@ -123,6 +123,7 @@ var i18n = { 'network_dialog_ok': "$_("OK")", 'network_dialog_cancel': "$_("Cancel")", 'action_create': "$_("Create")", + 'action_select_lun': "$_("Select")", 'msg_warning': "$_("Warning")", 'msg.logicalpool.confirm.delete': "$_("It will format your disk and you will loose any data in" " there, are you sure to continue? ")",