[Kimchi-devel] [PATCH] [Kimchi 1/3] Added UI validation for s390x Virtualization Guest Edit Add Storage module

rajgupta at linux.vnet.ibm.com rajgupta at linux.vnet.ibm.com
Thu Oct 13 08:22:24 UTC 2016


From: Rajat Gupta <rajggupta at linux.vnet.ibm.com>

Added UI validation for s390x Virtualization Guest Edit Add Storage module

Signed-off-by: Rajat Gupta <rajggupta at linux.vnet.ibm.com>
---
 ui/js/src/kimchi.guest_storage_add.main.js | 130 +++++++++++++++++++----------
 ui/pages/i18n.json.tmpl                    |   3 +
 2 files changed, 87 insertions(+), 46 deletions(-)

diff --git a/ui/js/src/kimchi.guest_storage_add.main.js b/ui/js/src/kimchi.guest_storage_add.main.js
index bebcff7..9fa9175 100644
--- a/ui/js/src/kimchi.guest_storage_add.main.js
+++ b/ui/js/src/kimchi.guest_storage_add.main.js
@@ -272,12 +272,14 @@ kimchi.guest_storage_add_main = function() {
                 case 'path':
                     $('#new-disk-box div.pool').hide();
                     $('#new-disk-box div.directorypath').show();
+                    $(directorypathTextbox).val("");
 
                     break;
                 default:
                     $('#new-disk-box div.pool').show();
                     $('#new-disk-box div.directorypath').hide();
             }
+            $(capacityTextbox).val("").trigger('change');
         });
 
         sourceTextbox.on('change', function() {
@@ -285,11 +287,14 @@ kimchi.guest_storage_add_main = function() {
                 case 'path':
                     $('#existing-disk-box div.pool,div.volume').hide();
                     $('#existing-disk-box div.diskpath').show();
+                    $(diskpathTextbox).val("").trigger('change');
+                    $(submitButton).prop('disabled', true);
 
                     break;
                 default:
                     $('#existing-disk-box div.pool,div.volume').show();
                     $('#existing-disk-box div.diskpath').hide();
+                    $(submitButton).prop('disabled', false);
             }
         });
     }
@@ -322,6 +327,7 @@ kimchi.guest_storage_add_main = function() {
             getStoragePools('existing');
             if(kimchi.hostarch === s390xArch){
                 getStorageSource('pool');
+                $(diskpathTextbox).val("").trigger('change');
             }
             $(pathTextbox).val("");
             $(newPoolTextbox).val("");
@@ -349,6 +355,7 @@ kimchi.guest_storage_add_main = function() {
                 $('#guest-storage-add-window .modal-body .template-pager').animate({
                     height: "400px"
                 }, 400);
+                $(capacityTextbox).val("").trigger('change');
             }else{
                 $('#guest-storage-add-window .modal-body .template-pager').animate({
                     height: "300px"
@@ -449,48 +456,66 @@ kimchi.guest_storage_add_main = function() {
     var bNewDisk = 'false';
 
     var validateDisk = function(settings) {
+        bNewDisk = 'false';
         // Determine whether it's existing disk or new disk
         if($(capacityTextbox).is(":visible") === true ) {
             bNewDisk = 'true';
         }
-        if (bNewDisk === 'true') {
-            if (settings['newpool'] && settings['capacity'] && settings['format']){
-                //Change settings['newpool'] to settings['pool']
-                settings['pool']=settings['newpool'];
-                var vmname = settings['vm'];
-                vmname = vmname + new Date().getTime();
-                //Unique vol name to be created
-                settings['vol']=vmname + ".img";
-                //This is all that is needed for attaching newly created volume to VM
-                var addVolSettings = {
-                    vm: settings['vm'],
-                    type: settings['type'],
-                    vol:  settings['vol'],
-                    pool: settings['pool']
-                };
-                var sizeInBytes = parseInt(settings['capacity']) * 1024 * 1024 * 1024;
-                settings['capacity'] = sizeInBytes;
-                //These need to be deleted so they don't get passed to backend
-                delete settings['path'];
-                delete settings['newpool'];
-                //Create an empty storage volume and attach to VM if successful
-                createVol(settings, addVolSettings);
-                return true;
-            } else {
-                wok.message.error(i18n['KCHVMSTOR0002E'],'#alert-modal-container2');
-                return false;
-            }
-        } else {
-            if (settings['pool'] && settings['vol']){
-                // Delete path property since it's not needed for disk
-                delete settings['path'];
-                return true;
-            }
-            else {
-                wok.message.error(i18n['KCHVMSTOR0002E'],'#alert-modal-container2');
-                return false;
+        if (kimchi.hostarch === s390xArch && ((sourceTextbox.val() === 'path' || sourcenewTextbox.val() === 'path'))) {
+            if (bNewDisk === 'true') {
+                if ((/^((https|http|ftp|ftps|tftp|\/).*)+$/.test(settings['dir_path'])) && settings['size'] && settings['format']){
+                    return true;
+                }else{
+                    wok.message.error(i18n['KCHVMSTOR0003E'],'#alert-modal-container2');
+                    return false;
+                }
+            }else{
+                if (/^((https|http|ftp|ftps|tftp|\/).*)+$/.test(settings['path'])){
+                    return true;
+                }else{
+                    wok.message.error(i18n['KCHVMSTOR0004E'],'#alert-modal-container2');
+                    return false;
+                }
             }
-        }
+        }else{
+            if (bNewDisk === 'true') {
+                if (settings['newpool'] && settings['capacity'] && settings['format']){
+                    //Change settings['newpool'] to settings['pool']
+                    settings['pool']=settings['newpool'];
+                    var vmname = settings['vm'];
+                    vmname = vmname + new Date().getTime();
+                    //Unique vol name to be created
+                    settings['vol']=vmname + ".img";
+                    //This is all that is needed for attaching newly created volume to VM
+                    var addVolSettings = {
+                        vm: settings['vm'],
+                        type: settings['type'],
+                        vol:  settings['vol'],
+                        pool: settings['pool']
+                    };
+                    var sizeInMB = parseInt(settings['capacity']) * 1024;
+                    settings['capacity'] = sizeInMB;
+                    //These need to be deleted so they don't get passed to backend
+                    delete settings['path'];
+                    delete settings['newpool'];
+                    //Create an empty storage volume and attach to VM if successful
+                    createVol(settings, addVolSettings);
+                    return true;
+                } else {
+                    wok.message.error(i18n['KCHVMSTOR0005E'],'#alert-modal-container2');
+                    return false;
+                }
+            } else {
+                if (settings['pool'] && settings['vol']){
+                    // Delete path property since it's not needed for disk
+                    delete settings['path'];
+                    return true;
+                } else {
+                    wok.message.error(i18n['KCHVMSTOR0002E'],'#alert-modal-container2');
+                    return false;
+                }
+           }
+       }
     };
 
     validator = {cdrom: validateCDROM, disk: validateDisk};
@@ -505,7 +530,7 @@ kimchi.guest_storage_add_main = function() {
         }
 
         var formData = storageAddForm.serializeObject();
-        if (kimchi.hostarch === s390xArch && ((sourceTextbox.val() === 'path') || sourcenewTextbox.val() === 'path')) {
+        if (kimchi.hostarch === s390xArch && ((sourceTextbox.val() === 'path' || sourcenewTextbox.val() === 'path'))) {
             if ($('#new-disk').prop('checked')) {
                 var settings = {
                     vm: kimchi.selectedGuest,
@@ -541,7 +566,6 @@ kimchi.guest_storage_add_main = function() {
             $(c).prop('disabled', true);
         });
 
-        if (kimchi.hostarch != s390xArch) {
             // Validate form for cdrom and disk
             validateSpecifiedForm = validator[settings['type']];
             if (!validateSpecifiedForm(settings)) {
@@ -551,12 +575,11 @@ kimchi.guest_storage_add_main = function() {
                 });
                 return false;
             }
-            if(bNewDisk === 'false'){
+
+            if((bNewDisk === 'false' || ((kimchi.hostarch === s390xArch && ((sourceTextbox.val() === 'path' || sourcenewTextbox.val() === 'path')))))){
                 addStorage(settings);
             }
-        } else {
-            addStorage(settings);
-        }
+
         $(submitButton).addClass('loading').text(i18n['KCHVMCD6003M']);
         event.preventDefault();
     };
@@ -569,8 +592,23 @@ kimchi.guest_storage_add_main = function() {
     volTextbox.on('change propertychange', function (event) {
         $(submitButton).prop('disabled', $(this).val() === '');
     });
-    capacityTextbox.on('change input propertychange', function(event) {
-        $(submitButton).prop('disabled', $(this).val() === '');
-    });
 
+
+    if(kimchi.hostarch === s390xArch){
+        $(capacityTextbox).add(directorypathTextbox).on('change input propertychange', function(event){
+            if(sourcenewTextbox.val() === 'path'){
+                $(submitButton).prop('disabled', $(capacityTextbox).val() === '' || $(directorypathTextbox).val() === '');
+            }else{
+                $(submitButton).prop('disabled', $(capacityTextbox).val() === '');
+            }
+        });
+
+        diskpathTextbox.on('change input propertychange', function(event) {
+            $(submitButton).prop('disabled', $(this).val() === '');
+        });
+    }else{
+        capacityTextbox.on('change input propertychange', function(event) {
+            $(submitButton).prop('disabled', $(this).val() === '');
+        });
+    }
 };
diff --git a/ui/pages/i18n.json.tmpl b/ui/pages/i18n.json.tmpl
index c67e9e8..399c58f 100644
--- a/ui/pages/i18n.json.tmpl
+++ b/ui/pages/i18n.json.tmpl
@@ -119,6 +119,9 @@
 
     "KCHVMSTOR0001E": "$_("CDROM path needs to be a valid local/remote path and cannot be blank.")",
     "KCHVMSTOR0002E": "$_("Disk pool or volume cannot be blank.")",
+    "KCHVMSTOR0003E": "$_("Disk size or Format or Directory path cannot be blank and Directory path needs to be a valid local/remote path.")",
+    "KCHVMSTOR0004E": "$_("Disk path needs to be a valid local/remote path and cannot be blank.")",
+    "KCHVMSTOR0005E": "$_("Storage pool or Disk size or Format cannot be blank.")",
 
     "KCHPEERS0001M": "$_("Peers")"
 }
-- 
2.1.0




More information about the Kimchi-devel mailing list