[Kimchi-devel] [PATCH] [Kimchi] Introducing s390x UI Storage module for Edit Guest under virtualization

rajgupta at linux.vnet.ibm.com rajgupta at linux.vnet.ibm.com
Fri Sep 9 15:37:25 UTC 2016


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

Introducing s390x UI Storage module for Edit Guest under virtualization

Signed-off-by: Rajat Gupta <rajgupta at linux.vnet.ibm.com>
---
 ui/js/src/kimchi.guest_storage_add.main.js | 170 +++++++++++++++++++++++++----
 ui/pages/guest-storage-add.html.tmpl       |  28 ++++-
 2 files changed, 172 insertions(+), 26 deletions(-)

diff --git a/ui/js/src/kimchi.guest_storage_add.main.js b/ui/js/src/kimchi.guest_storage_add.main.js
index 29fccab..d931e8e 100644
--- a/ui/js/src/kimchi.guest_storage_add.main.js
+++ b/ui/js/src/kimchi.guest_storage_add.main.js
@@ -60,11 +60,23 @@ kimchi.guest_storage_add_main = function() {
         value: 'disk'
     }];
 
+    var source = [{
+      label: 'Pool',
+      value: 'pool'
+    },{
+      label: 'Path',
+      value: 'path'
+    }];
+
     var storageAddForm = $('#form-guest-storage-add');
     var submitButton = $('#guest-storage-button-add');
     var typeTextbox = $('select#guest-storage-type', storageAddForm);
     var pathTextbox = $('input[name="path"]', storageAddForm);
     var poolTextbox = $('select#guest-disk-pool', storageAddForm);
+    var sourceTextbox = $('select#guest-disk-source', storageAddForm);
+    var sourcenewTextbox = $('select#guest-disk-source-new', storageAddForm);
+    var directorypathTextbox = $('#directorypath', storageAddForm);
+    var diskpathTextbox = $('#diskpath', storageAddForm);
     var volTextbox = $('select#guest-disk-vol', storageAddForm);
     var newPoolTextbox = $('select#guest-disk-pool-new', storageAddForm);
     var capacityTextbox = $('input[name="capacity"]', storageAddForm);
@@ -73,6 +85,7 @@ kimchi.guest_storage_add_main = function() {
     var selectStoragePoolHTML = '';
     var selectStorageVolHTML  = '';
     var rbExisting = 'false';
+    var s390xArch = 's390x';
 
     var getFormatList = function() {
         var format = ["qcow", "qcow2", "qed", "raw", "vmdk", "vpc"];
@@ -177,6 +190,49 @@ kimchi.guest_storage_add_main = function() {
     //First time retrieving list of Storage Pools - defaulting to new disk
     getStoragePools('new');
 
+    if(kimchi.hostarch === s390xArch){
+
+      //initialize source dropdown for new disk
+      $('#new-disk-box div.source').show();
+
+      var getStorageSourceNew = function(sourceSelected ) {
+
+            selectStorageSourceHTML = ''; //reset string
+
+                $.each(source, function(index, storageSource) {
+                      selectStorageSourceHTML += '<option value="'+ storageSource.value + '">' + storageSource.label + '</option>';
+                    });
+
+                    sourcenewTextbox.empty();
+                    sourcenewTextbox.append(selectStorageSourceHTML);
+                    sourcenewTextbox.val(sourceSelected);
+                    $(sourcenewTextbox).trigger('change');
+                    sourcenewTextbox.selectpicker();
+                    $('.selectpicker').selectpicker('refresh');
+      };
+      getStorageSourceNew('pool');
+
+      //initialize source dropdown for existing disk
+      $('#existing-disk-box div.source').show();
+
+      var getStorageSource = function(sourceSelected ) {
+
+            selectStorageSourceHTML = ''; //reset string
+
+                $.each(source, function(index, storageSource) {
+                      selectStorageSourceHTML += '<option value="'+ storageSource.value + '">' + storageSource.label + '</option>';
+                    });
+
+                    sourceTextbox.empty();
+                    sourceTextbox.append(selectStorageSourceHTML);
+                    sourceTextbox.val(sourceSelected);
+                    $(sourceTextbox).trigger('change');
+                    sourceTextbox.selectpicker();
+                    $('.selectpicker').selectpicker('refresh');
+    };
+    getStorageSource('pool');
+  }
+
     poolTextbox.on('change',function() {
         var options = [];
         selectStorageVolHTML = '';
@@ -214,6 +270,36 @@ kimchi.guest_storage_add_main = function() {
         }, null, false);
     });
 
+    if (kimchi.hostarch === s390xArch) {
+        sourcenewTextbox.on('change', function() {
+
+            switch ($(this).val()) {
+                case 'path':
+                    $('#new-disk-box div.pool').hide();
+                    $('#new-disk-box div.directorypath').show();
+                    break;
+                default:
+
+                    $('#new-disk-box div.pool').show();
+                    $('#new-disk-box div.directorypath').hide();
+            }
+        });
+
+        sourceTextbox.on('change', function() {
+
+            switch ($(this).val()) {
+                case 'path':
+                    $('#existing-disk-box div.pool,div.volume').hide();
+                    $('#existing-disk-box div.diskpath').show();
+                    break;
+                default:
+
+                    $('#existing-disk-box div.pool,div.volume').show();
+                    $('#existing-disk-box div.diskpath').hide();
+            }
+        });
+    }
+
     typeTextbox.on('change',function() {
         var pathObject = {'cdrom': ".path-section", 'disk': '.volume-section'};
         var selectType = $(this).val();
@@ -237,9 +323,12 @@ kimchi.guest_storage_add_main = function() {
             $('#existing-disk-box').removeClass('hidden');
             $('#new-disk-box').addClass('hidden');
             $('#guest-storage-add-window .modal-body .template-pager').animate({
-                height: "200px"
+                height: "300px"
             }, 300);
             getStoragePools('existing');
+            if(kimchi.hostarch === s390xArch){
+            getStorageSource('pool');
+          }
             $(pathTextbox).val("");
             $(newPoolTextbox).val("");
             $(capacityTextbox).val("");
@@ -260,9 +349,18 @@ kimchi.guest_storage_add_main = function() {
             currentPage = 'new-disk-box';
             $('#existing-disk-box').addClass('hidden');
             $('#new-disk-box').removeClass('hidden');
+
+            if(kimchi.hostarch === s390xArch){
+            getStorageSourceNew('pool');
+
+            $('#guest-storage-add-window .modal-body .template-pager').animate({
+                height: "400px"
+            }, 400);
+          }else{
             $('#guest-storage-add-window .modal-body .template-pager').animate({
                 height: "300px"
             }, 400);
+          }
             $(pathTextbox).val("");
             $(poolTextbox).val("");
             $(volTextbox).val("");
@@ -409,40 +507,66 @@ kimchi.guest_storage_add_main = function() {
         }
         var bNewDisk = 'false';
         // Determine whether it's existing disk or new disk
-        if($(capacityTextbox).is(":visible") === true ) {
+        if ($(capacityTextbox).is(":visible") === true) {
             bNewDisk = 'true';
         }
 
         var formData = storageAddForm.serializeObject();
-        var settings = {
-            vm: kimchi.selectedGuest,
-            type: typeTextbox.val(),
-            path: pathTextbox.val(),
-            pool: poolTextbox.val(),
-            vol: volTextbox.val(),
-            newpool: newPoolTextbox.val(),
-            format: formatTextbox.val(),
-            capacity: capacityTextbox.val()
-        };
+        if (kimchi.hostarch === s390xArch && ((sourceTextbox.val() === 'path') || sourcenewTextbox.val() === 'path')) {
+
+            if ($('#new-disk').prop('checked')) {
+                var settings = {
+                    vm: kimchi.selectedGuest,
+                    dir_path: directorypathTextbox.val(),
+                    name: kimchi.selectedGuest + '_' + $.now() + '.img',
+                    size: capacityTextbox.val(),
+                    type: typeTextbox.val(),
+                    format: formatTextbox.val()
+                };
+            } else if ($('#existing-disk').prop('checked')) {
+                var settings = {
+                    vm: kimchi.selectedGuest,
+                    path: diskpathTextbox.val(),
+                    type: typeTextbox.val(),
+                    format: formatTextbox.val()
+                };
+            }
+
+        } else {
+            var settings = {
+                vm: kimchi.selectedGuest,
+                type: typeTextbox.val(),
+                path: pathTextbox.val(),
+                pool: poolTextbox.val(),
+                vol: volTextbox.val(),
+                newpool: newPoolTextbox.val(),
+                format: formatTextbox.val(),
+                capacity: capacityTextbox.val()
+            };
+        }
 
         $(submitButton).prop('disabled', true);
         $.each([pathTextbox, poolTextbox, volTextbox, newPoolTextbox, capacityTextbox, formatTextbox], function(i, c) {
             $(c).prop('disabled', true);
         });
-        // Validate form for cdrom and disk
-        validateSpecifiedForm = validator[settings['type']];
-        if (!validateSpecifiedForm(settings)) {
-            $(submitButton).prop('disabled', false);
-            $.each([submitButton, pathTextbox, poolTextbox, volTextbox, newPoolTextbox, capacityTextbox, formatTextbox], function(i, c) {
-                $(c).prop('disabled', false);
-            });
-            return false;
-        }
-        $(submitButton).addClass('loading').text(i18n['KCHVMCD6003M']);
 
-        if(bNewDisk === 'false'){
+        if (kimchi.hostarch != s390xArch) {
+            // Validate form for cdrom and disk
+            validateSpecifiedForm = validator[settings['type']];
+            if (!validateSpecifiedForm(settings)) {
+                $(submitButton).prop('disabled', false);
+                $.each([submitButton, pathTextbox, poolTextbox, volTextbox, newPoolTextbox, capacityTextbox, formatTextbox], function(i, c) {
+                    $(c).prop('disabled', false);
+                });
+                return false;
+            }
+            if (bNewDisk === 'false') {
+                addStorage(settings);
+            }
+        } else {
             addStorage(settings);
         }
+        $(submitButton).addClass('loading').text(i18n['KCHVMCD6003M']);
         event.preventDefault();
     };
 
diff --git a/ui/pages/guest-storage-add.html.tmpl b/ui/pages/guest-storage-add.html.tmpl
index afc72c8..2fe74dd 100644
--- a/ui/pages/guest-storage-add.html.tmpl
+++ b/ui/pages/guest-storage-add.html.tmpl
@@ -53,7 +53,13 @@
                     </div>
                     <div class="template-pager">
                         <div class="page" id="new-disk-box">
-                            <div class="form-group">
+                          <div class="form-group source" style="display:none;">
+                              <label>$_("Source")</label>
+                              <select id="guest-disk-source-new" class="selectpicker col-md-12 col-lg-12">
+                              </select>
+                              <p class="help-block"><i class="fa fa-info-circle"></i> $_("Storage based on Libvirt pool or direct block device")</p>
+                          </div>
+                            <div class="form-group pool">
                                 <label>$_("Storage Pool")</label>
                                 <select id="guest-disk-pool-new" class="selectpicker col-md-12 col-lg-12">
                                 </select>
@@ -70,20 +76,36 @@
                                 </select>
                                 <p class="help-block"><i class="fa fa-info-circle"></i> $_("Format of the new disk to be created")</p>
                             </div>
+                            <div class="form-group directorypath" style="display:none;">
+                                <label>$_("Directory Path")</label>
+                                <input type="text" class="form-control" name="directorypath" id="directorypath" />
+                                <p class="help-block"><i class="fa fa-info-circle"></i> $_("Provide a directory path")</p>
+                            </div>
                         </div>
                         <div class="page" id="existing-disk-box">
-                            <div class="form-group">
+                          <div class="form-group source" style="display:none;">
+                              <label>$_("Source")</label>
+                              <select id="guest-disk-source" class="selectpicker col-md-12 col-lg-12">
+                              </select>
+                              <p class="help-block"><i class="fa fa-info-circle"></i> $_("Storage based on Libvirt pool or direct block device")</p>
+                          </div>
+                            <div class="form-group pool">
                                 <label>$_("Storage Pool")</label>
                                 <select id="guest-disk-pool" class="selectpicker col-md-12 col-lg-12">
                                 </select>
                                 <p class="help-block"><i class="fa fa-info-circle"></i> $_("Storage pool in which the volume is located in")</p>
                             </div>
-                            <div class="form-group">
+                            <div class="form-group volume">
                                 <label>$_("Storage Volume")</label>
                                 <select id="guest-disk-vol" class="selectpicker col-md-12 col-lg-12">
                                 </select>
                                 <p class="help-block"><i class="fa fa-info-circle"></i> $_("Storage volume to be attached")</p>
                             </div>
+                            <div class="form-group diskpath" style="display:none;">
+                                <label>$_("Disk Path")</label>
+                                <input type="text" class="form-control" name="diskpath" id="diskpath" />
+                                <p class="help-block"><i class="fa fa-info-circle"></i> $_("Provide a block device")</p>
+                            </div>
                         </div>
                     </div>
                 </div>
-- 
2.1.0




More information about the Kimchi-devel mailing list