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