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