]> git.proxmox.com Git - pve-manager.git/blob - www/manager6/qemu/CreateWizard.js
update shipped appliance info index
[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 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 },
21 },
22
23 cbindData: {
24 nodename: undefined,
25 },
26
27 subject: gettext('Virtual Machine'),
28
29 items: [
30 {
31 xtype: 'inputpanel',
32 title: gettext('General'),
33 onlineHelp: 'qm_general_settings',
34 column1: [
35 {
36 xtype: 'pveNodeSelector',
37 name: 'nodename',
38 cbind: {
39 selectCurNode: '{!nodename}',
40 preferredValue: '{nodename}',
41 },
42 bind: {
43 value: '{nodename}',
44 },
45 fieldLabel: gettext('Node'),
46 allowBlank: false,
47 onlineValidator: true,
48 },
49 {
50 xtype: 'pveGuestIDSelector',
51 name: 'vmid',
52 guestType: 'qemu',
53 value: '',
54 loadNextFreeID: true,
55 validateExists: false,
56 },
57 {
58 xtype: 'textfield',
59 name: 'name',
60 vtype: 'DnsName',
61 value: '',
62 fieldLabel: gettext('Name'),
63 allowBlank: true,
64 },
65 ],
66 column2: [
67 {
68 xtype: 'pvePoolSelector',
69 fieldLabel: gettext('Resource Pool'),
70 name: 'pool',
71 value: '',
72 allowBlank: true,
73 },
74 ],
75 advancedColumn1: [
76 {
77 xtype: 'proxmoxcheckbox',
78 name: 'onboot',
79 uncheckedValue: 0,
80 defaultValue: 0,
81 deleteDefaultValue: true,
82 fieldLabel: gettext('Start at boot'),
83 },
84 ],
85 advancedColumn2: [
86 {
87 xtype: 'textfield',
88 name: 'order',
89 defaultValue: '',
90 emptyText: 'any',
91 labelWidth: 120,
92 fieldLabel: gettext('Start/Shutdown order'),
93 },
94 {
95 xtype: 'textfield',
96 name: 'up',
97 defaultValue: '',
98 emptyText: 'default',
99 labelWidth: 120,
100 fieldLabel: gettext('Startup delay'),
101 },
102 {
103 xtype: 'textfield',
104 name: 'down',
105 defaultValue: '',
106 emptyText: 'default',
107 labelWidth: 120,
108 fieldLabel: gettext('Shutdown timeout'),
109 },
110 ],
111 onGetValues: function(values) {
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,
121 down: values.down,
122 });
123
124 if (res) {
125 values.startup = res;
126 }
127
128 delete values.order;
129 delete values.up;
130 delete values.down;
131
132 return values;
133 },
134 },
135 {
136 xtype: 'container',
137 layout: 'hbox',
138 defaults: {
139 flex: 1,
140 padding: '0 10',
141 },
142 title: gettext('OS'),
143 items: [
144 {
145 xtype: 'pveQemuCDInputPanel',
146 bind: {
147 nodename: '{nodename}',
148 },
149 confid: 'ide2',
150 insideWizard: true,
151 },
152 {
153 xtype: 'pveQemuOSTypePanel',
154 insideWizard: true,
155 },
156 ],
157 },
158 {
159 xtype: 'pveQemuSystemPanel',
160 title: gettext('System'),
161 isCreate: true,
162 insideWizard: true,
163 },
164 {
165 xtype: 'pveMultiHDPanel',
166 bind: {
167 nodename: '{nodename}',
168 },
169 title: gettext('Disks'),
170 },
171 {
172 xtype: 'pveQemuProcessorPanel',
173 insideWizard: true,
174 title: gettext('CPU'),
175 },
176 {
177 xtype: 'pveQemuMemoryPanel',
178 insideWizard: true,
179 title: gettext('Memory'),
180 },
181 {
182 xtype: 'pveQemuNetworkInputPanel',
183 bind: {
184 nodename: '{nodename}',
185 },
186 title: gettext('Network'),
187 insideWizard: true,
188 },
189 {
190 title: gettext('Confirm'),
191 layout: 'fit',
192 items: [
193 {
194 xtype: 'grid',
195 store: {
196 model: 'KeyValue',
197 sorters: [{
198 property: 'key',
199 direction: 'ASC',
200 }],
201 },
202 columns: [
203 { header: 'Key', width: 150, dataIndex: 'key' },
204 { header: 'Value', flex: 1, dataIndex: 'value' },
205 ],
206 },
207 ],
208 dockedItems: [
209 {
210 xtype: 'proxmoxcheckbox',
211 name: 'start',
212 dock: 'bottom',
213 margin: '5 0 0 0',
214 boxLabel: gettext('Start after created'),
215 },
216 ],
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 });
227
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');
235 },
236 },
237 onSubmit: function() {
238 var wizard = this.up('window');
239 var kv = wizard.getValues();
240 delete kv.delete;
241
242 var nodename = kv.nodename;
243 delete kv.nodename;
244
245 Proxmox.Utils.API2Request({
246 url: '/nodes/' + nodename + '/qemu',
247 waitMsgTarget: wizard,
248 method: 'POST',
249 params: kv,
250 success: function(response) {
251 wizard.close();
252 },
253 failure: function(response, opts) {
254 Ext.Msg.alert(gettext('Error'), response.htmlStatus);
255 },
256 });
257 },
258 },
259 ],
260 });
261
262