]>
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 TL |
163 | insideWizard: true, |
164 | }, | |
165 | ], | |
8cdfb23f | 166 | }, |
471d03aa DC |
167 | { |
168 | xtype: 'pveQemuSystemPanel', | |
169 | title: gettext('System'), | |
170 | isCreate: true, | |
f6710aac | 171 | insideWizard: true, |
471d03aa | 172 | }, |
8cdfb23f | 173 | { |
9dbc4dfa | 174 | xtype: 'pveMultiHDPanel', |
8cdfb23f | 175 | bind: { |
f6710aac | 176 | nodename: '{nodename}', |
8cdfb23f | 177 | }, |
9dbc4dfa | 178 | title: gettext('Disks'), |
8cdfb23f TL |
179 | }, |
180 | { | |
181 | xtype: 'pveQemuProcessorPanel', | |
182 | insideWizard: true, | |
f6710aac | 183 | title: gettext('CPU'), |
8cdfb23f TL |
184 | }, |
185 | { | |
186 | xtype: 'pveQemuMemoryPanel', | |
187 | insideWizard: true, | |
f6710aac | 188 | title: gettext('Memory'), |
8cdfb23f TL |
189 | }, |
190 | { | |
191 | xtype: 'pveQemuNetworkInputPanel', | |
192 | bind: { | |
f6710aac | 193 | nodename: '{nodename}', |
8cdfb23f TL |
194 | }, |
195 | title: gettext('Network'), | |
f6710aac | 196 | insideWizard: true, |
8cdfb23f TL |
197 | }, |
198 | { | |
199 | title: gettext('Confirm'), | |
200 | layout: 'fit', | |
201 | items: [ | |
202 | { | |
203 | xtype: 'grid', | |
204 | store: { | |
205 | model: 'KeyValue', | |
206 | sorters: [{ | |
8058410f | 207 | property: 'key', |
f6710aac TL |
208 | direction: 'ASC', |
209 | }], | |
9bbc1e4d | 210 | }, |
8cdfb23f | 211 | columns: [ |
8058410f TL |
212 | { header: 'Key', width: 150, dataIndex: 'key' }, |
213 | { header: 'Value', flex: 1, dataIndex: 'value' }, | |
f6710aac TL |
214 | ], |
215 | }, | |
8cdfb23f | 216 | ], |
d8e2ae99 TL |
217 | dockedItems: [ |
218 | { | |
219 | xtype: 'proxmoxcheckbox', | |
220 | name: 'start', | |
221 | dock: 'bottom', | |
222 | margin: '5 0 0 0', | |
f6710aac TL |
223 | boxLabel: gettext('Start after created'), |
224 | }, | |
d8e2ae99 | 225 | ], |
8cdfb23f TL |
226 | listeners: { |
227 | show: function(panel) { | |
228 | var kv = this.up('window').getValues(); | |
229 | var data = []; | |
230 | Ext.Object.each(kv, function(key, value) { | |
231 | if (key === 'delete') { // ignore | |
232 | return; | |
233 | } | |
234 | data.push({ key: key, value: value }); | |
235 | }); | |
9bbc1e4d | 236 | |
8cdfb23f TL |
237 | var summarystore = panel.down('grid').getStore(); |
238 | summarystore.suspendEvents(); | |
239 | summarystore.removeAll(); | |
240 | summarystore.add(data); | |
241 | summarystore.sort(); | |
242 | summarystore.resumeEvents(); | |
243 | summarystore.fireEvent('refresh'); | |
f6710aac | 244 | }, |
8cdfb23f TL |
245 | }, |
246 | onSubmit: function() { | |
247 | var wizard = this.up('window'); | |
248 | var kv = wizard.getValues(); | |
399ffa76 | 249 | delete kv.delete; |
8cdfb23f TL |
250 | |
251 | var nodename = kv.nodename; | |
252 | delete kv.nodename; | |
9bbc1e4d | 253 | |
8cdfb23f TL |
254 | Proxmox.Utils.API2Request({ |
255 | url: '/nodes/' + nodename + '/qemu', | |
256 | waitMsgTarget: wizard, | |
257 | method: 'POST', | |
258 | params: kv, | |
8058410f | 259 | success: function(response) { |
8cdfb23f TL |
260 | wizard.close(); |
261 | }, | |
262 | failure: function(response, opts) { | |
263 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
f6710aac | 264 | }, |
8cdfb23f | 265 | }); |
f6710aac TL |
266 | }, |
267 | }, | |
268 | ], | |
9bbc1e4d DM |
269 | }); |
270 | ||
271 |