Hi,
I could not apply it on top of master branch.
[alinefm@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(a)linux.vnet.ibm.com wrote:
From: rajgupta <rajgupta(a)localhost.localdomain>
Added UI validation for Virtualization Guest Edit Add Storage module
Signed-off-by: rajgupta <rajgupta(a)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")"
}