[Kimchi-devel] [V1] StoragePool Edit: Add Disk to Logical Pool
Aline Manera
alinefm at linux.vnet.ibm.com
Tue Mar 4 15:10:48 UTC 2014
On 03/04/2014 12:05 PM, Aline Manera wrote:
> On 02/24/2014 06:55 AM, huoyuxin at linux.vnet.ibm.com wrote:
>> From: Yu Xin Huo<huoyuxin at linux.vnet.ibm.com>
>>
>> Signed-off-by: Yu Xin Huo<huoyuxin at linux.vnet.ibm.com>
>> ---
>> ui/js/src/kimchi.api.js | 12 +++++++++
>> ui/js/src/kimchi.storage_main.js | 38 ++++++++++++++++++++++++++++++
>> ui/js/src/kimchi.storagepool_add_main.js | 2 +-
>> ui/pages/i18n.html.tmpl | 1 +
>> ui/pages/tabs/storage.html.tmpl | 10 ++++++++
>> 5 files changed, 62 insertions(+), 1 deletions(-)
>>
>> diff --git a/ui/js/src/kimchi.api.js b/ui/js/src/kimchi.api.js
>> index 686141b..ee7f0d8 100644
>> --- a/ui/js/src/kimchi.api.js
>> +++ b/ui/js/src/kimchi.api.js
>> @@ -745,5 +745,17 @@ var kimchi = {
>> kimchi.message.error(data.responseJSON.reason);
>> }
>> });
>> + },
>> +
>> + updateStoragePool : function(name, content, suc, err) {
>> + $.ajax({
>> + url : kimchi.url + "storagepools/" + encodeURIComponent(name),
>> + type : 'PUT',
>> + contentType : 'application/json',
>> + dataType : 'json',
>> + data : JSON.stringify(content)
>
>> + }).done(suc).fail(err ? err : function(data) {
>> + kimchi.message.error(data.responseJSON.reason);
>> + });
>> }
>
> I am not sure if this error handle is working.
>
> I got it on console:
>
> [04/Mar/2014:11:46:07] HTTP Traceback (most recent call last):
> File "/usr/lib/python2.7/site-packages/cherrypy/_cprequest.py", line
> 656, in respond
> response.body = self.handler()
> File "/usr/lib/python2.7/site-packages/cherrypy/lib/encoding.py",
> line 188, in __call__
> self.body = self.oldhandler(*args, **kwargs)
> File "/usr/lib/python2.7/site-packages/cherrypy/_cpdispatch.py",
> line 34, in __call__
> return self.callable(*self.args, **self.kwargs)
> File "/root/kimchi/src/kimchi/control/base.py", line 137, in index
> return self.update()
> File "/root/kimchi/src/kimchi/control/base.py", line 166, in update
> ident = update(*args)
> File "/root/kimchi/src/kimchi/model/storagepools.py", line 294, in
> update
> self._update_lvm_disks(name, params['disks'])
> File "/root/kimchi/src/kimchi/model/storagepools.py", line 267, in
> _update_lvm_disks
> 'pool': pool_name})
> OperationFailed: KCHPOOL0027E: /dev/sdb is not a valid disk/partition.
> Could not add it to the pool as.
>
> And on UI:
>
>
>
Sorry, the error handling is not working due a problem on backend.
I will send a patch to fix it.
>
> Also when I select the text "/dev/vdb" it does not select the option -
> need to fix it.
>
> We need to ask for user confirmation before updating the storage pool.
> Add a new disk to a logical pool may cause loose of data.
>
>> };
>> diff --git a/ui/js/src/kimchi.storage_main.js b/ui/js/src/kimchi.storage_main.js
>> index d65da0b..40aceb7 100644
>> --- a/ui/js/src/kimchi.storage_main.js
>> +++ b/ui/js/src/kimchi.storage_main.js
>> @@ -27,6 +27,7 @@ kimchi.doListStoragePools = function() {
>> value.usage = parseInt(value.allocated / value.capacity * 100) || 0;
>> value.capacity = kimchi.changetoProperUnit(value.capacity,1);
>> value.allocated = kimchi.changetoProperUnit(value.allocated,1);
>> + value.enableExt = value.type==="logical" ? "" : "hide-content";
>> if ('kimchi-iso' !== value.type) {
>> listHtml += kimchi.template(storageHtml, value);
>> }
>> @@ -140,6 +141,10 @@ kimchi.storageBindClick = function() {
>> }
>> }
>> });
>> + $('.pool-extend').on('click', function() {
>> + $("#logicalPoolExtend").dialog("option", "poolName", $(this).data('name'));
>> + $("#logicalPoolExtend").dialog("open");
>> + });
>> }
>>
>> kimchi.doListVolumes = function(poolObj) {
>> @@ -170,11 +175,44 @@ kimchi.doListVolumes = function(poolObj) {
>> });
>> }
>>
>> +kimchi.initLogicalPoolExtend = function() {
>> + $("#logicalPoolExtend").dialog({
>> + autoOpen : false,
>> + modal : true,
>> + width : 600,
>> + resizable : false,
>> + closeText: "X",
>> + open : function(){
>> + $(".ui-dialog-titlebar-close", $("#logicalPoolExtend").parent()).removeAttr("title");
>> + kimchi.listHostPartitions(function(data) {
>> + for(var i=0;i<data.length;i++){
>> + if (data[i].type === 'part' || data[i].type === 'disk') {
>> + $('.host-partition', '#logicalPoolExtend').append(kimchi.template($('#logicalPoolExtendTmpl').html(), data[i]));
>> + }
>> + }
>> + });
>> + },
>> + beforeClose : function() { $('.host-partition', '#logicalPoolExtend').empty(); },
>> + buttons : [{
>> + class: "ui-button-primary",
>> + text: i18n.KCHAPI6007M,
>> + click: function(){
>> + var devicePaths = [];
>> + $("input[type='checkbox']:checked", "#logicalPoolExtend").each(function(){
>> + devicePaths.push($(this).prop('value'));
>> + })
>> + kimchi.updateStoragePool($("#logicalPoolExtend").dialog("option", "poolName"),{disks: devicePaths});
>> + }
>> + }]
>> + });
>> +}
>> +
>> kimchi.storage_main = function() {
>> $('#storage-pool-add').on('click', function() {
>> kimchi.window.open('storagepool-add.html');
>> });
>> kimchi.doListStoragePools();
>> + kimchi.initLogicalPoolExtend();
>> }
>>
>> kimchi.changeArrow = function(obj) {
>> diff --git a/ui/js/src/kimchi.storagepool_add_main.js b/ui/js/src/kimchi.storagepool_add_main.js
>> index 43ff31a..beb59ed 100644
>> --- a/ui/js/src/kimchi.storagepool_add_main.js
>> +++ b/ui/js/src/kimchi.storagepool_add_main.js
>> @@ -53,7 +53,7 @@ kimchi.initStorageAddPage = function() {
>> listHtml += kimchi.template(deviceHtml, value);
>> }
>> });
>> - $('.host-partition').html(listHtml);
>> + $('.host-partition', '#form-pool-add').html(listHtml);
>> }
>> kimchi.getStorageServers('netfs', function(data) {
>> var serverContent = [];
>> diff --git a/ui/pages/i18n.html.tmpl b/ui/pages/i18n.html.tmpl
>> index fe8ed5b..26ac47b 100644
>> --- a/ui/pages/i18n.html.tmpl
>> +++ b/ui/pages/i18n.html.tmpl
>> @@ -62,6 +62,7 @@ var i18n = {
>> 'KCHAPI6004M': "$_("Confirm")",
>> 'KCHAPI6005M': "$_("Create")",
>> 'KCHAPI6006M': "$_("Warning")",
>> + 'KCHAPI6007M': "$_("Save")",
>>
>> 'KCHTMPL6001W': "$_("No iso found")",
>>
>> diff --git a/ui/pages/tabs/storage.html.tmpl b/ui/pages/tabs/storage.html.tmpl
>> index 6930c22..d36c90e 100644
>> --- a/ui/pages/tabs/storage.html.tmpl
>> +++ b/ui/pages/tabs/storage.html.tmpl
>> @@ -44,6 +44,9 @@
>> </div>
>> <ul id="storagepoolsList" class="list-storage"></ul>
>> </div>
>> +<div id="logicalPoolExtend" title="$_("Device path")">
>> + <div class="host-partition"></div>
>> +</div>
>> <script id="storageTmpl" type="html/text">
>> <li id="{name}">
>> <div class="storage-li in" data-name="{name}" data-stat="{state}">
>> @@ -78,6 +81,7 @@
>> <button class="button-big pool-deactivate" data-stat="{state}" data-name="{name}"><span class="text">$_("Deactivate")</span></button>
>> <button class="button-big pool-activate" data-stat="{state}" data-name="{name}"><span class="text">$_("Activate")</span></button>
>> <button class="button-big red pool-delete" data-stat="{state}" data-name="{name}"><span class="text">$_("Undefine")</span></button>
>> + <button class="button-big pool-extend {enableExt}" data-stat="{state}" data-name="{name}"><span class="text">$_("Extend")</span></button>
>> </div>
>> </div>
>> </div>
>> @@ -110,6 +114,12 @@
>> </div>
>> </div>
>> </script>
>> +<script id="logicalPoolExtendTmpl" type="html/text">
>> + <div>
>> + <input type="checkbox" value="{path}" name="devices">
>> + <label for="{name}">{path}</label>
>> + </div>
>> +</script>
>> <script>
>> kimchi.storage_main();
>> </script>
>
>
>
> _______________________________________________
> Kimchi-devel mailing list
> Kimchi-devel at ovirt.org
> http://lists.ovirt.org/mailman/listinfo/kimchi-devel
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ovirt.org/pipermail/kimchi-devel/attachments/20140304/a0e101e9/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: image/png
Size: 137956 bytes
Desc: not available
URL: <http://lists.ovirt.org/pipermail/kimchi-devel/attachments/20140304/a0e101e9/attachment.png>
More information about the Kimchi-devel
mailing list