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

Rajat Gupta rajgupta at linux.vnet.ibm.com
Thu Oct 13 08:01:09 UTC 2016


Hello Aline,

Please ignore following patch, I will be sending new patch with multiple 
changes.


On 10/6/2016 11:19 PM, Aline Manera wrote:
> Hi,
>
> I could not apply it on top of master branch.
>
> [alinefm at alinefm-TP440 kimchi]$ git am -3 
> /home/alinefm/mail-patches/\[PATCH\]\ \[Kimchi\]\ Added\ UI\ 
> validation\ for\ Virtualization\ Guest\ Edit\ Add\ Storage\ module.eml
> Applying: Added UI validation for Virtualization Guest Edit Add 
> Storage module
> Using index info to reconstruct a base tree...
> M    ui/js/src/kimchi.guest_storage_add.main.js
> M    ui/pages/i18n.json.tmpl
> Falling back to patching base and 3-way merge...
> Auto-merging ui/pages/i18n.json.tmpl
> Auto-merging ui/js/src/kimchi.guest_storage_add.main.js
> CONFLICT (content): Merge conflict in 
> ui/js/src/kimchi.guest_storage_add.main.js
> error: Failed to merge in the changes.
> Patch failed at 0001 Added UI validation for Virtualization Guest Edit 
> Add Storage module
> The copy of the patch that failed is found in: 
> /home/alinefm/wok/.git/modules/src/wok/plugins/kimchi/rebase-apply/patch
> When you have resolved this problem, run "git am --continue".
> If you prefer to skip this patch, run "git am --skip" instead.
> To restore the original branch and stop patching, run "git am --abort".
>
>
> Could you rebase and resend, please?
>
> Thanks,
> Aline Manera
>
> On 09/27/2016 03:42 AM, rajgupta at linux.vnet.ibm.com wrote:
>> From: rajgupta <rajgupta at localhost.localdomain>
>>
>> Added UI validation for Virtualization Guest Edit Add Storage module
>>
>> Signed-off-by: rajgupta <rajgupta at localhost.localdomain>
>> ---
>>   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 08e71db..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 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['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 7beee19..ec9ef57 100644
>> --- a/ui/pages/i18n.json.tmpl
>> +++ b/ui/pages/i18n.json.tmpl
>> @@ -118,6 +118,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")"
>>   }
>




More information about the Kimchi-devel mailing list