]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/CreateWizard.js
ui: vm vNIC: add empty text for MTU field
[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
DC
110 ],
111 onGetValues: function(values) {
29e19e95
DC
112 ['name', 'pool', 'onboot', 'agent'].forEach(function(field) {
113 if (!values[field]) {
114 delete values[field];
115 }
116 });
117
118 var res = PVE.Parser.printStartup({
119 order: values.order,
120 up: values.up,
f6710aac 121 down: values.down,
29e19e95
DC
122 });
123
124 if (res) {
125 values.startup = res;
8cdfb23f 126 }
29e19e95
DC
127
128 delete values.order;
129 delete values.up;
130 delete values.down;
131
8cdfb23f 132 return values;
f6710aac 133 },
8cdfb23f
TL
134 },
135 {
136 xtype: 'container',
137 layout: 'hbox',
138 defaults: {
139 flex: 1,
f6710aac 140 padding: '0 10',
8cdfb23f
TL
141 },
142 title: gettext('OS'),
143 items: [
8d4f1d4d 144 {
8cdfb23f
TL
145 xtype: 'pveQemuCDInputPanel',
146 bind: {
f6710aac 147 nodename: '{nodename}',
8cdfb23f
TL
148 },
149 confid: 'ide2',
f6710aac 150 insideWizard: true,
8d4f1d4d 151 },
9bbc1e4d 152 {
8cdfb23f 153 xtype: 'pveQemuOSTypePanel',
f6710aac
TL
154 insideWizard: true,
155 },
156 ],
8cdfb23f 157 },
471d03aa
DC
158 {
159 xtype: 'pveQemuSystemPanel',
160 title: gettext('System'),
161 isCreate: true,
f6710aac 162 insideWizard: true,
471d03aa 163 },
8cdfb23f 164 {
9dbc4dfa 165 xtype: 'pveMultiHDPanel',
8cdfb23f 166 bind: {
f6710aac 167 nodename: '{nodename}',
8cdfb23f 168 },
9dbc4dfa 169 title: gettext('Disks'),
8cdfb23f
TL
170 },
171 {
172 xtype: 'pveQemuProcessorPanel',
173 insideWizard: true,
f6710aac 174 title: gettext('CPU'),
8cdfb23f
TL
175 },
176 {
177 xtype: 'pveQemuMemoryPanel',
178 insideWizard: true,
f6710aac 179 title: gettext('Memory'),
8cdfb23f
TL
180 },
181 {
182 xtype: 'pveQemuNetworkInputPanel',
183 bind: {
f6710aac 184 nodename: '{nodename}',
8cdfb23f
TL
185 },
186 title: gettext('Network'),
f6710aac 187 insideWizard: true,
8cdfb23f
TL
188 },
189 {
190 title: gettext('Confirm'),
191 layout: 'fit',
192 items: [
193 {
194 xtype: 'grid',
195 store: {
196 model: 'KeyValue',
197 sorters: [{
8058410f 198 property: 'key',
f6710aac
TL
199 direction: 'ASC',
200 }],
9bbc1e4d 201 },
8cdfb23f 202 columns: [
8058410f
TL
203 { header: 'Key', width: 150, dataIndex: 'key' },
204 { header: 'Value', flex: 1, dataIndex: 'value' },
f6710aac
TL
205 ],
206 },
8cdfb23f 207 ],
d8e2ae99
TL
208 dockedItems: [
209 {
210 xtype: 'proxmoxcheckbox',
211 name: 'start',
212 dock: 'bottom',
213 margin: '5 0 0 0',
f6710aac
TL
214 boxLabel: gettext('Start after created'),
215 },
d8e2ae99 216 ],
8cdfb23f
TL
217 listeners: {
218 show: function(panel) {
219 var kv = this.up('window').getValues();
220 var data = [];
221 Ext.Object.each(kv, function(key, value) {
222 if (key === 'delete') { // ignore
223 return;
224 }
225 data.push({ key: key, value: value });
226 });
9bbc1e4d 227
8cdfb23f
TL
228 var summarystore = panel.down('grid').getStore();
229 summarystore.suspendEvents();
230 summarystore.removeAll();
231 summarystore.add(data);
232 summarystore.sort();
233 summarystore.resumeEvents();
234 summarystore.fireEvent('refresh');
f6710aac 235 },
8cdfb23f
TL
236 },
237 onSubmit: function() {
238 var wizard = this.up('window');
239 var kv = wizard.getValues();
399ffa76 240 delete kv.delete;
8cdfb23f
TL
241
242 var nodename = kv.nodename;
243 delete kv.nodename;
9bbc1e4d 244
8cdfb23f
TL
245 Proxmox.Utils.API2Request({
246 url: '/nodes/' + nodename + '/qemu',
247 waitMsgTarget: wizard,
248 method: 'POST',
249 params: kv,
8058410f 250 success: function(response) {
8cdfb23f
TL
251 wizard.close();
252 },
253 failure: function(response, opts) {
254 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
f6710aac 255 },
8cdfb23f 256 });
f6710aac
TL
257 },
258 },
259 ],
9bbc1e4d
DM
260});
261
262