]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CreateWizard.js
ui: hdmove: modernize/refactor
[pve-manager.git] / www / manager6 / qemu / CreateWizard.js
1 Ext.define('PVE.qemu.CreateWizard', {
2 extend: 'PVE.window.Wizard',
3 alias: 'widget.pveQemuCreateWizard',
4 mixins: ['Proxmox.Mixin.CBind'],
5
6 viewModel: {
7 data: {
8 nodename: '',
9 current: {
10 scsihw: '',
11 },
12 },
13 },
14
15 cbindData: {
16 nodename: undefined,
17 },
18
19 subject: gettext('Virtual Machine'),
20
21 items: [
22 {
23 xtype: 'inputpanel',
24 title: gettext('General'),
25 onlineHelp: 'qm_general_settings',
26 column1: [
27 {
28 xtype: 'pveNodeSelector',
29 name: 'nodename',
30 cbind: {
31 selectCurNode: '{!nodename}',
32 preferredValue: '{nodename}',
33 },
34 bind: {
35 value: '{nodename}',
36 },
37 fieldLabel: gettext('Node'),
38 allowBlank: false,
39 onlineValidator: true,
40 },
41 {
42 xtype: 'pveGuestIDSelector',
43 name: 'vmid',
44 guestType: 'qemu',
45 value: '',
46 loadNextFreeID: true,
47 validateExists: false,
48 },
49 {
50 xtype: 'textfield',
51 name: 'name',
52 vtype: 'DnsName',
53 value: '',
54 fieldLabel: gettext('Name'),
55 allowBlank: true,
56 },
57 ],
58 column2: [
59 {
60 xtype: 'pvePoolSelector',
61 fieldLabel: gettext('Resource Pool'),
62 name: 'pool',
63 value: '',
64 allowBlank: true,
65 },
66 ],
67 advancedColumn1: [
68 {
69 xtype: 'proxmoxcheckbox',
70 name: 'onboot',
71 uncheckedValue: 0,
72 defaultValue: 0,
73 deleteDefaultValue: true,
74 fieldLabel: gettext('Start at boot'),
75 },
76 ],
77 advancedColumn2: [
78 {
79 xtype: 'textfield',
80 name: 'order',
81 defaultValue: '',
82 emptyText: 'any',
83 labelWidth: 120,
84 fieldLabel: gettext('Start/Shutdown order'),
85 },
86 {
87 xtype: 'textfield',
88 name: 'up',
89 defaultValue: '',
90 emptyText: 'default',
91 labelWidth: 120,
92 fieldLabel: gettext('Startup delay'),
93 },
94 {
95 xtype: 'textfield',
96 name: 'down',
97 defaultValue: '',
98 emptyText: 'default',
99 labelWidth: 120,
100 fieldLabel: gettext('Shutdown timeout'),
101 },
102 ],
103 onGetValues: function(values) {
104 ['name', 'pool', 'onboot', 'agent'].forEach(function(field) {
105 if (!values[field]) {
106 delete values[field];
107 }
108 });
109
110 var res = PVE.Parser.printStartup({
111 order: values.order,
112 up: values.up,
113 down: values.down,
114 });
115
116 if (res) {
117 values.startup = res;
118 }
119
120 delete values.order;
121 delete values.up;
122 delete values.down;
123
124 return values;
125 },
126 },
127 {
128 xtype: 'container',
129 layout: 'hbox',
130 defaults: {
131 flex: 1,
132 padding: '0 10',
133 },
134 title: gettext('OS'),
135 items: [
136 {
137 xtype: 'pveQemuCDInputPanel',
138 bind: {
139 nodename: '{nodename}',
140 },
141 confid: 'ide2',
142 insideWizard: true,
143 },
144 {
145 xtype: 'pveQemuOSTypePanel',
146 insideWizard: true,
147 },
148 ],
149 },
150 {
151 xtype: 'pveQemuSystemPanel',
152 title: gettext('System'),
153 isCreate: true,
154 insideWizard: true,
155 },
156 {
157 xtype: 'pveMultiHDPanel',
158 bind: {
159 nodename: '{nodename}',
160 },
161 title: gettext('Disks'),
162 },
163 {
164 xtype: 'pveQemuProcessorPanel',
165 insideWizard: true,
166 title: gettext('CPU'),
167 },
168 {
169 xtype: 'pveQemuMemoryPanel',
170 insideWizard: true,
171 title: gettext('Memory'),
172 },
173 {
174 xtype: 'pveQemuNetworkInputPanel',
175 bind: {
176 nodename: '{nodename}',
177 },
178 title: gettext('Network'),
179 insideWizard: true,
180 },
181 {
182 title: gettext('Confirm'),
183 layout: 'fit',
184 items: [
185 {
186 xtype: 'grid',
187 store: {
188 model: 'KeyValue',
189 sorters: [{
190 property: 'key',
191 direction: 'ASC',
192 }],
193 },
194 columns: [
195 { header: 'Key', width: 150, dataIndex: 'key' },
196 { header: 'Value', flex: 1, dataIndex: 'value' },
197 ],
198 },
199 ],
200 dockedItems: [
201 {
202 xtype: 'proxmoxcheckbox',
203 name: 'start',
204 dock: 'bottom',
205 margin: '5 0 0 0',
206 boxLabel: gettext('Start after created'),
207 },
208 ],
209 listeners: {
210 show: function(panel) {
211 var kv = this.up('window').getValues();
212 var data = [];
213 Ext.Object.each(kv, function(key, value) {
214 if (key === 'delete') { // ignore
215 return;
216 }
217 data.push({ key: key, value: value });
218 });
219
220 var summarystore = panel.down('grid').getStore();
221 summarystore.suspendEvents();
222 summarystore.removeAll();
223 summarystore.add(data);
224 summarystore.sort();
225 summarystore.resumeEvents();
226 summarystore.fireEvent('refresh');
227 },
228 },
229 onSubmit: function() {
230 var wizard = this.up('window');
231 var kv = wizard.getValues();
232 delete kv.delete;
233
234 var nodename = kv.nodename;
235 delete kv.nodename;
236
237 Proxmox.Utils.API2Request({
238 url: '/nodes/' + nodename + '/qemu',
239 waitMsgTarget: wizard,
240 method: 'POST',
241 params: kv,
242 success: function(response) {
243 wizard.close();
244 },
245 failure: function(response, opts) {
246 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
247 },
248 });
249 },
250 },
251 ],
252 });
253
254