]>
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 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 |