]>
Commit | Line | Data |
---|---|---|
d7683c68 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: '', | |
25 | fieldLabel: gettext('Storage'), | |
a00a9ffd | 26 | storageContent: (me.vmtype === 'lxc') ? 'rootdir' : 'images', |
d7683c68 DM |
27 | allowBlank: true |
28 | }); | |
29 | ||
30 | me.formPanel = Ext.create('Ext.form.Panel', { | |
31 | bodyPadding: 10, | |
32 | border: false, | |
33 | fieldDefaults: { | |
34 | labelWidth: 100, | |
35 | anchor: '100%' | |
36 | }, | |
37 | items: [ | |
38 | { | |
39 | xtype: 'displayfield', | |
40 | value: me.volidText || me.volid, | |
41 | fieldLabel: gettext('Source') | |
42 | }, | |
43 | storagesel, | |
44 | { | |
45 | xtype: me.vmid ? 'displayfield' : 'pveVMIDSelector', | |
46 | name: 'vmid', | |
47 | fieldLabel: 'VM ID', | |
48 | value: me.vmid, | |
49 | loadNextFreeVMID: me.vmid ? false: true, | |
50 | validateExists: false | |
51 | } | |
52 | ] | |
53 | }); | |
54 | ||
55 | var form = me.formPanel.getForm(); | |
56 | ||
57 | var doRestore = function(url, params) { | |
58 | PVE.Utils.API2Request({ | |
59 | url: url, | |
60 | params: params, | |
61 | method: 'POST', | |
62 | waitMsgTarget: me, | |
63 | failure: function (response, opts) { | |
64 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
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 | ||
78 | var submitBtn = Ext.create('Ext.Button', { | |
79 | text: gettext('Restore'), | |
80 | handler: function(){ | |
81 | var storage = storagesel.getValue(); | |
82 | var values = form.getValues(); | |
83 | ||
84 | var params = { | |
85 | storage: storage, | |
86 | vmid: me.vmid || values.vmid, | |
87 | force: me.vmid ? 1 : 0 | |
88 | }; | |
89 | ||
90 | var url; | |
a00a9ffd AG |
91 | if (me.vmtype === 'lxc') { |
92 | url = '/nodes/' + me.nodename + '/lxc'; | |
d7683c68 DM |
93 | params.ostemplate = me.volid; |
94 | params.restore = 1; | |
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 | } | |
101 | ||
102 | if (me.vmid) { | |
103 | var msg = gettext('Are you sure you want to restore this VM?') + ' ' + | |
104 | gettext('This will permanently erase current VM data.'); | |
105 | Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) { | |
106 | if (btn !== 'yes') { | |
107 | return; | |
108 | } | |
109 | doRestore(url, params); | |
110 | }); | |
111 | } else { | |
112 | doRestore(url, params); | |
113 | } | |
114 | } | |
115 | }); | |
116 | ||
117 | form.on('validitychange', function(f, valid) { | |
118 | submitBtn.setDisabled(!valid); | |
119 | }); | |
120 | ||
121 | var title = (me.vmtype === 'openvz') ? gettext('Restore CT') : | |
122 | gettext('Restore VM'); | |
123 | ||
124 | Ext.apply(me, { | |
125 | title: title, | |
126 | width: 500, | |
127 | modal: true, | |
128 | layout: 'auto', | |
129 | border: false, | |
130 | items: [ me.formPanel ], | |
131 | buttons: [ submitBtn ] | |
132 | }); | |
133 | ||
134 | me.callParent(); | |
135 | } | |
136 | }); |