]>
Commit | Line | Data |
---|---|---|
7404e8fe DM |
1 | Ext.define('PVE.window.Restore', { |
2 | extend: 'Ext.window.Window', // fixme: PVE.window.Edit? | |
3 | ||
4 | resizable: false, | |
5 | ||
6 | initComponent : function() { | |
7 | var me = this; | |
8 | ||
9 | if (!me.nodename) { | |
10 | throw "no node name specified"; | |
11 | } | |
12 | ||
13 | if (!me.volid) { | |
14 | throw "no volume ID specified"; | |
15 | } | |
16 | ||
17 | if (!me.vmtype) { | |
18 | throw "no vmtype specified"; | |
19 | } | |
20 | ||
21 | var storagesel = Ext.create('PVE.form.StorageSelector', { | |
22 | nodename: me.nodename, | |
23 | name: 'storage', | |
24 | value: '', | |
6b21ab95 | 25 | fieldLabel: gettext('Storage'), |
7404e8fe DM |
26 | storageContent: (me.vmtype === 'openvz') ? 'rootdir' : 'images', |
27 | allowBlank: true | |
28 | }); | |
29 | ||
30 | me.formPanel = Ext.create('Ext.form.Panel', { | |
31 | bodyPadding: 10, | |
32 | border: false, | |
33 | fieldDefaults: { | |
34 | labelWidth: 60, | |
35 | anchor: '100%' | |
36 | }, | |
37 | items: [ | |
38 | { | |
39 | xtype: 'displayfield', | |
40 | value: me.volidText || me.volid, | |
6b21ab95 | 41 | fieldLabel: gettext('Source') |
7404e8fe DM |
42 | }, |
43 | storagesel, | |
44 | { | |
9f767883 | 45 | xtype: me.vmid ? 'displayfield' : 'pveVMIDSelector', |
7404e8fe | 46 | name: 'vmid', |
9f767883 | 47 | fieldLabel: 'VM ID', |
e893439e DM |
48 | value: me.vmid, |
49 | loadNextFreeVMID: me.vmid ? false: true, | |
7404e8fe DM |
50 | validateExists: false |
51 | } | |
52 | ] | |
53 | }); | |
54 | ||
55 | var form = me.formPanel.getForm(); | |
56 | ||
9f767883 DM |
57 | var doRestore = function(url, params) { |
58 | PVE.Utils.API2Request({ | |
59 | url: url, | |
60 | params: params, | |
61 | method: 'POST', | |
2c535170 | 62 | waitMsgTarget: me, |
9f767883 | 63 | failure: function (response, opts) { |
0070ee37 | 64 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); |
9f767883 DM |
65 | }, |
66 | success: function(response, options) { | |
67 | var upid = response.result.data; | |
68 | ||
69 | var win = Ext.create('PVE.window.TaskViewer', { | |
70 | upid: upid | |
71 | }); | |
72 | win.show(); | |
73 | me.close(); | |
74 | } | |
75 | }); | |
76 | }; | |
77 | ||
7404e8fe | 78 | var submitBtn = Ext.create('Ext.Button', { |
6b21ab95 | 79 | text: gettext('Restore'), |
7404e8fe DM |
80 | handler: function(){ |
81 | var storage = storagesel.getValue(); | |
82 | var values = form.getValues(); | |
83 | ||
84 | var params = { | |
85 | storage: storage, | |
a2f57991 | 86 | vmid: me.vmid || values.vmid, |
9f767883 | 87 | force: me.vmid ? 1 : 0 |
7404e8fe DM |
88 | }; |
89 | ||
a2f57991 | 90 | var url; |
7404e8fe DM |
91 | if (me.vmtype === 'openvz') { |
92 | url = '/nodes/' + me.nodename + '/openvz'; | |
93 | params.ostemplate = me.volid; | |
9f767883 | 94 | params.restore = 1; |
7404e8fe DM |
95 | } else if (me.vmtype === 'qemu') { |
96 | url = '/nodes/' + me.nodename + '/qemu'; | |
97 | params.archive = me.volid; | |
98 | } else { | |
99 | throw 'unknown VM type'; | |
100 | } | |
9f767883 DM |
101 | |
102 | if (me.vmid) { | |
6b21ab95 DM |
103 | var msg = gettext('Are you sure you want to restore this VM?') + ' ' + |
104 | gettext('This will permanently erase current VM data.'); | |
0070ee37 | 105 | Ext.Msg.confirm(gettext('Confirmation'), msg, function(btn) { |
9f767883 DM |
106 | if (btn !== 'yes') { |
107 | return; | |
108 | } | |
109 | doRestore(url, params); | |
110 | }); | |
111 | } else { | |
112 | doRestore(url, params); | |
113 | } | |
7404e8fe DM |
114 | } |
115 | }); | |
116 | ||
a2f57991 DM |
117 | form.on('validitychange', function(f, valid) { |
118 | submitBtn.setDisabled(!valid); | |
119 | }); | |
120 | ||
0070ee37 | 121 | var title = (me.vmtype === 'openvz') ? gettext('Restore CT') : gettext('Restore VM'); |
7404e8fe DM |
122 | |
123 | Ext.apply(me, { | |
124 | title: title, | |
125 | width: 450, | |
126 | modal: true, | |
127 | layout: 'auto', | |
128 | border: false, | |
129 | items: [ me.formPanel ], | |
a2f57991 | 130 | buttons: [ submitBtn ] |
7404e8fe DM |
131 | }); |
132 | ||
133 | me.callParent(); | |
134 | } | |
135 | }); |