]> git.proxmox.com Git - pve-manager.git/commitdiff
implement restore GUI
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 4 Nov 2011 12:45:52 +0000 (13:45 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 4 Nov 2011 12:45:52 +0000 (13:45 +0100)
www/manager/Makefile
www/manager/storage/ContentView.js
www/manager/window/Restore.js [new file with mode: 0644]

index b605e8ada37f9e2f4944292cd46e9b0113939dc7..22f40d0710802cdbbf232663dc16e14f0db20a5b 100644 (file)
@@ -52,6 +52,7 @@ JSSRC=                                                        \
        window/Wizard.js                                \
        window/NotesEdit.js                             \
        window/Backup.js                                \
+       window/Restore.js                               \
        panel/NotesView.js                              \
        grid/SelectFeature.js                           \
        grid/ObjectGrid.js                              \
index f0528db3dd6f6c3360b3a27cf173937252736c97..aca28204e818626e53197097228e7601d6fb4397 100644 (file)
@@ -223,7 +223,32 @@ Ext.define('PVE.storage.ContentView', {
            features: [ groupingFeature ],
            tbar: [
                {
-                   text: 'Restore'
+                   xtype: 'pveButton',
+                   text: 'Restore',
+                   selModel: sm,
+                   disabled: true,
+                   enableFn: function(rec) {
+                       return rec && rec.data.content === 'backup';
+                   },
+                   handler: function(b, e, rec) {
+                       var vmtype;
+                       if (rec.data.volid.match(/vzdump-qemu-/)) {
+                           vmtype = 'qemu';
+                       } else if (rec.data.volid.match(/vzdump-openvz-/)) {
+                           vmtype = 'openvz';
+                       } else {
+                           return;
+                       }
+
+                       var win = Ext.create('PVE.window.Restore', {
+                           nodename: nodename,
+                           volid: rec.data.volid,
+                           volidText: PVE.Utils.render_storage_content(rec.data.volid, {}, rec),
+                           vmtype: vmtype
+                       });
+                       win.show();
+                       win.on('destroy', reload);
+                   }
                },
                {
                    xtype: 'pveButton',
diff --git a/www/manager/window/Restore.js b/www/manager/window/Restore.js
new file mode 100644 (file)
index 0000000..481d624
--- /dev/null
@@ -0,0 +1,114 @@
+Ext.define('PVE.window.Restore', {
+    extend: 'Ext.window.Window', // fixme: PVE.window.Edit?
+
+    resizable: false,
+
+    initComponent : function() {
+       var me = this;
+
+       if (!me.nodename) {
+           throw "no node name specified";
+       }
+
+       if (!me.volid) {
+           throw "no volume ID specified";
+       }
+
+       if (!me.vmtype) {
+           throw "no vmtype specified";
+       }
+
+       var storagesel = Ext.create('PVE.form.StorageSelector', {
+           nodename: me.nodename,
+           name: 'storage',
+           value: '',
+           fieldLabel: 'Storage',
+           storageContent: (me.vmtype === 'openvz') ? 'rootdir' : 'images',
+           allowBlank: true
+       });
+
+       me.formPanel = Ext.create('Ext.form.Panel', {
+           bodyPadding: 10,
+           border: false,
+           fieldDefaults: {
+               labelWidth: 60,
+               anchor: '100%'
+           },
+           items: [
+               {
+                   xtype: 'displayfield',
+                   value: me.volidText || me.volid,
+                   fieldLabel: 'Source'
+               },
+               storagesel,
+               {
+                   xtype: 'pveVMIDSelector',
+                   name: 'vmid',
+                   value: PVE.data.ResourceStore.findNextVMID(),
+                   validateExists: false
+               }
+           ]
+       });
+
+       var form = me.formPanel.getForm();
+
+       form.on('validitychange', function(f, valid) {
+           submitBtn.setDisabled(!valid);
+       });
+
+       var submitBtn = Ext.create('Ext.Button', {
+           text: 'Restore',
+           handler: function(){
+               var storage = storagesel.getValue();
+               var values = form.getValues();
+
+               var params = {
+                   storage: storage,
+                   vmid: values.vmid
+               };
+
+               if (me.vmtype === 'openvz') {
+                   url = '/nodes/' + me.nodename + '/openvz';
+                   params.ostemplate = me.volid;
+               } else if (me.vmtype === 'qemu') {
+                   url = '/nodes/' + me.nodename + '/qemu';
+                   params.archive = me.volid;
+               } else {
+                   throw 'unknown VM type';
+               }
+               
+               PVE.Utils.API2Request({
+                   url: url,
+                   params: params,
+                   method: 'POST',
+                   failure: function (response, opts) {
+                       Ext.Msg.alert('Error',response.htmlStatus);
+                   },
+                   success: function(response, options) {
+                       var upid = response.result.data;
+                       
+                       var win = Ext.create('PVE.window.TaskViewer', { 
+                           upid: upid
+                       });
+                       win.show();
+                       me.close();
+                   }
+               });
+           }
+       });
+
+       var title = (me.vmtype === 'openvz') ? "Restore CT" : "Restore VM";
+
+       Ext.apply(me, {
+           title: title,
+           width: 450,
+           modal: true,
+           layout: 'auto',
+           border: false,
+           items: [ me.formPanel ],
+           buttons: [ submitBtn ],
+       });
+
+       me.callParent();
+    }
+});