]>
Commit | Line | Data |
---|---|---|
9bbc1e4d DM |
1 | Ext.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 |