Signed-off-by: Alexandre Derumier <[email protected]>
---
 www/manager/Makefile             |    1 +
 www/manager/qemu/HDMove.js       |  139 ++++++++++++++++++++++++++++++++++++++
 www/manager/qemu/HardwareView.js |   40 ++++++++++-
 3 files changed, 179 insertions(+), 1 deletion(-)
 create mode 100644 www/manager/qemu/HDMove.js

diff --git a/www/manager/Makefile b/www/manager/Makefile
index 013e762..e225374 100644
--- a/www/manager/Makefile
+++ b/www/manager/Makefile
@@ -97,6 +97,7 @@ JSSRC=                                                        
\
        qemu/CDEdit.js                                  \
        qemu/HDEdit.js                                  \
        qemu/HDResize.js                                \
+       qemu/HDMove.js                                  \
        qemu/DisplayEdit.js                             \
        qemu/KeyboardEdit.js                            \
        qemu/HardwareView.js                            \
diff --git a/www/manager/qemu/HDMove.js b/www/manager/qemu/HDMove.js
new file mode 100644
index 0000000..837467a
--- /dev/null
+++ b/www/manager/qemu/HDMove.js
@@ -0,0 +1,139 @@
+Ext.define('PVE.window.HDMove', {
+    extend: 'Ext.window.Window',
+
+    resizable: false,
+
+
+    move_disk: function(disk, storage, format) {
+       var me = this;
+
+        params =  { disk: disk, storage: storage };
+
+        if (format) {
+            params.format = format;
+        }
+
+       PVE.Utils.API2Request({
+           params: params,
+           url: '/nodes/' + me.nodename + '/qemu/' + me.vmid + '/move',
+           waitMsgTarget: me,
+           method: 'PUT',
+           failure: function(response, opts) {
+               Ext.Msg.alert('Error', response.htmlStatus);
+           },
+           success: function(response, options) {
+               me.close();
+           }
+       });
+
+    },
+
+    initComponent : function() {
+       var me = this;
+
+       var diskarray = [];
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+       if (!me.vmid) {
+           throw "no VM ID specified";
+       }
+
+        var items = [
+            {
+                xtype: 'displayfield',
+                name: 'disk',
+                value: me.disk,
+                fieldLabel: 'Disk',
+                vtype: 'StorageId',
+                allowBlank: false
+            },
+
+        ];
+
+        me.hdstoragesel = Ext.create('PVE.form.StorageSelector', {
+                name: 'hdstorage',
+                nodename: me.nodename,
+                fieldLabel: 'Target Storage',
+                storageContent: 'images',
+                autoSelect: me.insideWizard,
+                allowBlank: true,
+                disabled: false,
+                hidden: false,
+                listeners: {
+                    change: function(f, value) {
+                        var rec = f.store.getById(value);
+                       if (rec.data.type === 'iscsi') {
+                            me.formatsel.setValue('raw');
+                            me.formatsel.setDisabled(true);
+                        } else if (rec.data.type === 'lvm' ||
+                                   rec.data.type === 'rbd' ||
+                                   rec.data.type === 'sheepdog' ||
+                                   rec.data.type === 'nexenta'
+                        ) {
+                            me.formatsel.setValue('raw');
+                            me.formatsel.setDisabled(true);
+                        } else {
+                            me.formatsel.setDisabled(false);
+                        }
+
+                    }
+                }
+
+       });
+
+       me.formatsel = Ext.create('PVE.form.DiskFormatSelector', {
+               name: 'diskformat',
+               fieldLabel: gettext('Format'),
+               value: 'raw',
+                disabled: true,
+                hidden: false,
+               allowBlank: false
+       });
+
+
+       items.push(me.hdstoragesel);
+       items.push(me.formatsel);
+
+       me.formPanel = Ext.create('Ext.form.Panel', {
+           bodyPadding: 10,
+           border: false,
+           fieldDefaults: {
+               labelWidth: 100,
+               anchor: '100%'
+           },
+           items: items
+       });
+
+       var form = me.formPanel.getForm();
+
+       var submitBtn;
+
+       me.title = "Move disk";
+       submitBtn = Ext.create('Ext.Button', {
+           text: gettext('Move'),
+           handler: function() {
+               if (form.isValid()) {
+                   var values = form.getValues();
+                   me.move_disk(me.disk, values.hdstorage, values.diskformat);
+               }
+           }
+       });
+
+       Ext.apply(me, {
+           modal: true,
+           width: 350,
+           border: false,
+           layout: 'fit',
+           buttons: [ submitBtn ],
+           items: [ me.formPanel ]
+       });
+
+
+       me.callParent();
+
+
+    }
+});
diff --git a/www/manager/qemu/HardwareView.js b/www/manager/qemu/HardwareView.js
index 67cc6ba..fbd18b0 100644
--- a/www/manager/qemu/HardwareView.js
+++ b/www/manager/qemu/HardwareView.js
@@ -234,6 +234,28 @@ Ext.define('PVE.qemu.HardwareView', {
            win.on('destroy', reload);
        };
 
+       var run_move = function() {
+           var rec = sm.getSelection()[0];
+           if (!rec) {
+               return;
+           }
+
+           var rowdef = rows[rec.data.key];
+           if (!rowdef.editor) {
+               return;
+           }
+
+           var win = Ext.create('PVE.window.HDMove', {
+               disk: rec.data.key,
+               nodename: nodename,
+               vmid: vmid
+           });
+
+           win.show();
+
+           win.on('destroy', reload);
+       };
+
        var edit_btn = new PVE.button.Button({
            text: gettext('Edit'),
            selModel: sm,
@@ -262,6 +284,21 @@ Ext.define('PVE.qemu.HardwareView', {
            handler: run_resize
        });
 
+
+       var move_btn = new PVE.button.Button({
+           text: gettext('Move disk'),
+           selModel: sm,
+           disabled: true,
+           enableFn: function(rec) {
+               if (!rec) {
+                   return false;
+               }
+               var rowdef = rows[rec.data.key];
+               return rowdef.tdCls == 'pve-itype-icon-storage' && 
!rec.data.value.match(/media=cdrom/)
+           },
+           handler: run_move
+       });
+
        var remove_btn = new PVE.button.Button({
            text: gettext('Remove'),
            selModel: sm,
@@ -355,7 +392,8 @@ Ext.define('PVE.qemu.HardwareView', {
                }, 
                remove_btn,
                edit_btn,
-               resize_btn
+               resize_btn,
+               move_btn
            ],
            rows: rows,
            sorterFn: sorterFn,
-- 
1.7.10.4

_______________________________________________
pve-devel mailing list
[email protected]
http://pve.proxmox.com/cgi-bin/mailman/listinfo/pve-devel

Reply via email to