
On 22/10/2015 22:52, Jose Ricardo Ziviani wrote:
Signed-off-by: Jose Ricardo Ziviani <joserz@linux.vnet.ibm.com> --- src/wok/plugins/kimchi/API.json | 5 ++ .../kimchi/ui/css/theme-default/storage.css | 22 ++++++++ src/wok/plugins/kimchi/ui/js/src/kimchi.api.js | 11 ++++ .../ui/js/src/kimchi.storagepool_add_main.js | 58 ++++++++++++++++++++-- .../kimchi/ui/pages/storagepool-add.html.tmpl | 38 +++++++++++++- 5 files changed, 129 insertions(+), 5 deletions(-)
diff --git a/src/wok/plugins/kimchi/API.json b/src/wok/plugins/kimchi/API.json index fc1d2dd..ce09039 100644 --- a/src/wok/plugins/kimchi/API.json +++ b/src/wok/plugins/kimchi/API.json @@ -165,6 +165,11 @@ "error": "KCHPOOL0025E" } } + }, + "vgselect": { + "description": "Use an existing VG or create a new one", + "type": "string", + "error": "KCHPOOL0026E"
It is better to use a boolean parameter here.
} } } diff --git a/src/wok/plugins/kimchi/ui/css/theme-default/storage.css b/src/wok/plugins/kimchi/ui/css/theme-default/storage.css index 88447b5..a5952ae 100644 --- a/src/wok/plugins/kimchi/ui/css/theme-default/storage.css +++ b/src/wok/plugins/kimchi/ui/css/theme-default/storage.css @@ -422,6 +422,28 @@ white-space: nowrap; }
+.existing-groups { + padding-left:13px; +} + +.form-section .field { + font-size: 13px; + font-weight: lighter; +} + +.existing-groups>table { + width: 300px; + padding: 13px; + margin-left: 20px; + font-size: 13px; + font-weight: lighter; +} + +.existing-groups>table>thead { + text-align: left; + background-color: rgb(0, 138, 191); +} + .storage-type-wrapper-controls { width: 300px; display: inline-block; diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js index a16c95e..bd60bbb 100644 --- a/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js +++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.api.js @@ -745,6 +745,17 @@ var kimchi = { }); },
+ listExistingVGs : function(suc, err) { + wok.requestJSON({ + url : 'plugins/kimchi/host/vgs', + type: 'GET', + contentType : 'aplication/json', + dataType : 'json', + success : suc, + error : err + }); + }, + getStorageServers: function(type, suc, err) { var url = 'plugins/kimchi/storageservers?_target_type=' + type; wok.requestJSON({ diff --git a/src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js b/src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js index 8c27539..9cfa446 100644 --- a/src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js +++ b/src/wok/plugins/kimchi/ui/js/src/kimchi.storagepool_add_main.js @@ -141,6 +141,32 @@ kimchi.initStorageAddPage = function() { $('.host-partition').addClass('text-help'); });
+ kimchi.listExistingVGs(function(data) { + if (data.length == 0) { + $('.existing-groups').html(i18n['KCHPOOL6011M']); + $('.existing-groups').addClass('text-help'); + return; + } + var deviceHtml = $('#vgTmpl').html(); + var listHtml = ''; + $.each(data, function(index, value) { + value.size /= Math.pow(1024, 3); + value.size = value.size.toFixed() + " GiB"; + value.free /= Math.pow(1024, 3); + value.free = value.free.toFixed() + " GiB"; + listHtml += wok.substitute(deviceHtml, value); + }); + $('#vgrows').html(listHtml); + + $('input[type=radio][name=devices]').change(function() { + var vgdev=$('input[type=radio][name=devices]:checked').val(); + $('#poolId').val(vgdev); + }); + }, function(err) { + $('.existing-groups').html(i18n['KCHPOOL6013M'] + '<br/>(' + err.responseJSON.reason + ')'); + $('.existing-groups').addClass('text-help'); + }); + kimchi.getHostFCDevices(function(data){ if(data.length>0){ for(var i=0;i<data.length;i++){ @@ -235,6 +261,22 @@ kimchi.initStorageAddPage = function() { $(value).addClass('tmpl-html'); } }); + + $("#poolId").removeAttr("disabled"); + if (selectType == 'logical') { + $('input[type=radio][name=vgselect]').attr('checked', 'checked'); + } + }); + $('input[type=radio][name=vgselect]').change(function() { + if ($(this).val() == 'existingvg') { + $('.existing-groups').removeClass('tmpl-html'); + $('.host-partition').addClass('tmpl-html'); + $("#poolId").attr("disabled", "disabled"); + } else { + $('.existing-groups').addClass('tmpl-html'); + $('.host-partition').removeClass('tmpl-html'); + $("#poolId").removeAttr("disabled"); + } }); $('#authId').click(function() { if ($(this).prop("checked")) { @@ -274,7 +316,11 @@ kimchi.inputsNotBlank = function() { if (!$('#iscsiserverId').val()) return false; if (!$('#iscsiTargetId').val()) return false; } else if (poolType === "logical") { - if ($("input[name=devices]:checked").length === 0) + var vgtype=$('input[type=radio][name=vgselect]:checked').val(); + if (vgtype == 'newvg' && $('input[name=devices]:checked').length === 0) + return false; + else if (vgtype == 'existingvg' && + $('input[type=radio][name=devices]:checked').length !== 1) return false; } return true; @@ -336,12 +382,16 @@ kimchi.validateServer = function(serverField) { };
kimchi.validateLogicalForm = function () { - if ($("input[name=devices]:checked").length === 0) { + var vgtype=$('input[type=radio][name=vgselect]:checked').val(); + if (vgtype == 'newvg' && $("input[name=devices]:checked").length === 0) { + wok.message.error.code('KCHPOOL6006E'); + return false; + } else if (vgtype == 'existingvg' && + $('input[type=radio][name=devices]:checked').length !== 1) { wok.message.error.code('KCHPOOL6006E'); return false; - } else { - return true; } + return true; };
kimchi.addPool = function(event) { diff --git a/src/wok/plugins/kimchi/ui/pages/storagepool-add.html.tmpl b/src/wok/plugins/kimchi/ui/pages/storagepool-add.html.tmpl index a697af5..23e5877 100644 --- a/src/wok/plugins/kimchi/ui/pages/storagepool-add.html.tmpl +++ b/src/wok/plugins/kimchi/ui/pages/storagepool-add.html.tmpl @@ -99,8 +99,15 @@ </section> </div> <div class="logical-section tmpl-html"> + <section class="form-section"> + <h2>3. Create a new volume group or use an existing one?</h2> + <div class="field"> + <input type="radio" name="vgselect" value="newvg" checked="checked">New VG</input> + <input type="radio" name="vgselect" value="existingvg">Existing VG</input> + </div> + </section> <section class="form-section storageType"> - <h2>3. $_("Device path")</h2> + <h2>4. $_("Device path")</h2> <div class="host-partition"> <div class="icon-info-circled light-grey c1 help-inline"></div> <p class="text-help help-inline"> @@ -108,6 +115,27 @@ <img src = "plugins/kimchi/images/theme-default/loading.gif" /> </p> </div> + <div class="existing-groups tmpl-html"> + <div class="icon-info-circled light-grey c1 help-inline"></div> + <table class="volume-groups"> + <thead> + <tr> + <th></th> + <th>Volume Group</th> + <th>Size</th> + <th>Free space</th> + </tr> + </thead> + <tbody id="vgrows"> + <tr class="text-help help-inline"> + <td colspan="4"> + $_("Looking for available partitions ...") + <img src = "plugins/kimchi/images/theme-default/loading.gif" /> + </td> + </tr> + </tbody> + </table> + </div> </section> </div> <div class="iscsi-section tmpl-html"> @@ -182,5 +210,13 @@ <label for="{name}">{path}</label> </div> </script> + <script id="vgTmpl" type="html/text"> + <tr> + <td><input type="radio" name="devices" value="{vgname}"/></td> + <td>{vgname}</td> + <td>{size}</td> + <td>{free}</td> + </tr> + </script> </body> </html>