]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/window/Restore.js
unprivileged:true by default in restore window
[pve-manager.git] / www / manager6 / window / Restore.js
1 Ext.define('PVE.window.Restore', {
2 extend: 'Ext.window.Window', // fixme: Proxmox.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'),
26 storageContent: (me.vmtype === 'lxc') ? 'rootdir' : 'images',
27 allowBlank: true
28 });
29
30 var IDfield;
31 if (me.vmid) {
32 IDfield = Ext.create('Ext.form.field.Display', {
33 name: 'vmid',
34 value: me.vmid,
35 fieldLabel: (me.vmtype === 'lxc') ? 'CT' : 'VM'
36 });
37 } else {
38 IDfield = Ext.create('PVE.form.GuestIDSelector', {
39 name: 'vmid',
40 guestType: me.vmtype,
41 loadNextGuestID: true,
42 validateExists: false
43 });
44 }
45
46 var items = [
47 {
48 xtype: 'displayfield',
49 value: me.volidText || me.volid,
50 fieldLabel: gettext('Source')
51 },
52 storagesel,
53 IDfield,
54 {
55 xtype: 'proxmoxintegerfield',
56 name: 'bwlimit',
57 fieldLabel: gettext('Read Limit (MiB/s)'),
58 minValue: 0,
59 emptyText: gettext('Defaults to target storage restore limit'),
60 autoEl: {
61 tag: 'div',
62 'data-qtip': gettext("Use '0' to disable all bandwidth limits.")
63 }
64 }
65 ];
66
67 if (me.vmtype === 'lxc') {
68 items.push({
69 xtype: 'proxmoxcheckbox',
70 name: 'unprivileged',
71 value: true,
72 fieldLabel: gettext('Unprivileged container')
73 });
74 }
75
76 me.formPanel = Ext.create('Ext.form.Panel', {
77 bodyPadding: 10,
78 border: false,
79 fieldDefaults: {
80 labelWidth: 100,
81 anchor: '100%'
82 },
83 items: items
84 });
85
86 var form = me.formPanel.getForm();
87
88 var doRestore = function(url, params) {
89 Proxmox.Utils.API2Request({
90 url: url,
91 params: params,
92 method: 'POST',
93 waitMsgTarget: me,
94 failure: function (response, opts) {
95 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
96 },
97 success: function(response, options) {
98 var upid = response.result.data;
99
100 var win = Ext.create('Proxmox.window.TaskViewer', {
101 upid: upid
102 });
103 win.show();
104 me.close();
105 }
106 });
107 };
108
109 var submitBtn = Ext.create('Ext.Button', {
110 text: gettext('Restore'),
111 handler: function(){
112 var storage = storagesel.getValue();
113 var values = form.getValues();
114
115 var params = {
116 storage: storage,
117 vmid: me.vmid || values.vmid,
118 force: me.vmid ? 1 : 0
119 };
120
121 if (values.bwlimit !== undefined) {
122 params.bwlimit = values.bwlimit * 1024;
123 }
124
125 var url;
126 var msg;
127 if (me.vmtype === 'lxc') {
128 url = '/nodes/' + me.nodename + '/lxc';
129 params.ostemplate = me.volid;
130 params.restore = 1;
131 if (values.unprivileged) { params.unprivileged = 1; }
132 msg = Proxmox.Utils.format_task_description('vzrestore', params.vmid);
133 } else if (me.vmtype === 'qemu') {
134 url = '/nodes/' + me.nodename + '/qemu';
135 params.archive = me.volid;
136 msg = Proxmox.Utils.format_task_description('qmrestore', params.vmid);
137 } else {
138 throw 'unknown VM type';
139 }
140
141 if (me.vmid) {
142 msg += '. ' + gettext('This will permanently erase current VM data.');
143 Ext.Msg.confirm(gettext('Confirm'), msg, function(btn) {
144 if (btn !== 'yes') {
145 return;
146 }
147 doRestore(url, params);
148 });
149 } else {
150 doRestore(url, params);
151 }
152 }
153 });
154
155 form.on('validitychange', function(f, valid) {
156 submitBtn.setDisabled(!valid);
157 });
158
159 var title = gettext('Restore') + ": " + (
160 (me.vmtype === 'lxc') ? 'CT' : 'VM');
161
162 if (me.vmid) {
163 title += " " + me.vmid;
164 }
165
166 Ext.apply(me, {
167 title: title,
168 width: 500,
169 modal: true,
170 layout: 'auto',
171 border: false,
172 items: [ me.formPanel ],
173 buttons: [ submitBtn ]
174 });
175
176 me.callParent();
177 }
178 });