]>
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 | }, | |
8d4f1d4d EK |
13 | }, |
14 | ||
8cdfb23f | 15 | cbindData: { |
f6710aac | 16 | nodename: undefined, |
8cdfb23f | 17 | }, |
9bbc1e4d | 18 | |
8cdfb23f | 19 | subject: gettext('Virtual Machine'), |
9bbc1e4d | 20 | |
8cdfb23f TL |
21 | items: [ |
22 | { | |
23 | xtype: 'inputpanel', | |
24 | title: gettext('General'), | |
25 | onlineHelp: 'qm_general_settings', | |
26 | column1: [ | |
9bbc1e4d | 27 | { |
8cdfb23f TL |
28 | xtype: 'pveNodeSelector', |
29 | name: 'nodename', | |
30 | cbind: { | |
31 | selectCurNode: '{!nodename}', | |
f6710aac | 32 | preferredValue: '{nodename}', |
8d4f1d4d | 33 | }, |
8cdfb23f | 34 | bind: { |
f6710aac | 35 | value: '{nodename}', |
8cdfb23f TL |
36 | }, |
37 | fieldLabel: gettext('Node'), | |
38 | allowBlank: false, | |
f6710aac | 39 | onlineValidator: true, |
7da4966d | 40 | }, |
8d4f1d4d | 41 | { |
8cdfb23f TL |
42 | xtype: 'pveGuestIDSelector', |
43 | name: 'vmid', | |
44 | guestType: 'qemu', | |
45 | value: '', | |
46 | loadNextFreeID: true, | |
f6710aac | 47 | validateExists: false, |
8d4f1d4d | 48 | }, |
9bbc1e4d | 49 | { |
8cdfb23f TL |
50 | xtype: 'textfield', |
51 | name: 'name', | |
52 | vtype: 'DnsName', | |
53 | value: '', | |
54 | fieldLabel: gettext('Name'), | |
f6710aac TL |
55 | allowBlank: true, |
56 | }, | |
8cdfb23f TL |
57 | ], |
58 | column2: [ | |
9bbc1e4d | 59 | { |
8cdfb23f TL |
60 | xtype: 'pvePoolSelector', |
61 | fieldLabel: gettext('Resource Pool'), | |
62 | name: 'pool', | |
63 | value: '', | |
f6710aac TL |
64 | allowBlank: true, |
65 | }, | |
8cdfb23f | 66 | ], |
29e19e95 DC |
67 | advancedColumn1: [ |
68 | { | |
69 | xtype: 'proxmoxcheckbox', | |
70 | name: 'onboot', | |
71 | uncheckedValue: 0, | |
72 | defaultValue: 0, | |
73 | deleteDefaultValue: true, | |
f6710aac TL |
74 | fieldLabel: gettext('Start at boot'), |
75 | }, | |
29e19e95 DC |
76 | ], |
77 | advancedColumn2: [ | |
78 | { | |
79 | xtype: 'textfield', | |
80 | name: 'order', | |
81 | defaultValue: '', | |
82 | emptyText: 'any', | |
83 | labelWidth: 120, | |
f6710aac | 84 | fieldLabel: gettext('Start/Shutdown order'), |
29e19e95 DC |
85 | }, |
86 | { | |
87 | xtype: 'textfield', | |
88 | name: 'up', | |
89 | defaultValue: '', | |
90 | emptyText: 'default', | |
91 | labelWidth: 120, | |
f6710aac | 92 | fieldLabel: gettext('Startup delay'), |
29e19e95 DC |
93 | }, |
94 | { | |
95 | xtype: 'textfield', | |
96 | name: 'down', | |
97 | defaultValue: '', | |
98 | emptyText: 'default', | |
99 | labelWidth: 120, | |
f6710aac TL |
100 | fieldLabel: gettext('Shutdown timeout'), |
101 | }, | |
29e19e95 DC |
102 | ], |
103 | onGetValues: function(values) { | |
29e19e95 DC |
104 | ['name', 'pool', 'onboot', 'agent'].forEach(function(field) { |
105 | if (!values[field]) { | |
106 | delete values[field]; | |
107 | } | |
108 | }); | |
109 | ||
110 | var res = PVE.Parser.printStartup({ | |
111 | order: values.order, | |
112 | up: values.up, | |
f6710aac | 113 | down: values.down, |
29e19e95 DC |
114 | }); |
115 | ||
116 | if (res) { | |
117 | values.startup = res; | |
8cdfb23f | 118 | } |
29e19e95 DC |
119 | |
120 | delete values.order; | |
121 | delete values.up; | |
122 | delete values.down; | |
123 | ||
8cdfb23f | 124 | return values; |
f6710aac | 125 | }, |
8cdfb23f TL |
126 | }, |
127 | { | |
128 | xtype: 'container', | |
129 | layout: 'hbox', | |
130 | defaults: { | |
131 | flex: 1, | |
f6710aac | 132 | padding: '0 10', |
8cdfb23f TL |
133 | }, |
134 | title: gettext('OS'), | |
135 | items: [ | |
8d4f1d4d | 136 | { |
8cdfb23f TL |
137 | xtype: 'pveQemuCDInputPanel', |
138 | bind: { | |
f6710aac | 139 | nodename: '{nodename}', |
8cdfb23f TL |
140 | }, |
141 | confid: 'ide2', | |
f6710aac | 142 | insideWizard: true, |
8d4f1d4d | 143 | }, |
9bbc1e4d | 144 | { |
8cdfb23f | 145 | xtype: 'pveQemuOSTypePanel', |
f6710aac TL |
146 | insideWizard: true, |
147 | }, | |
148 | ], | |
8cdfb23f | 149 | }, |
471d03aa DC |
150 | { |
151 | xtype: 'pveQemuSystemPanel', | |
152 | title: gettext('System'), | |
153 | isCreate: true, | |
f6710aac | 154 | insideWizard: true, |
471d03aa | 155 | }, |
8cdfb23f TL |
156 | { |
157 | xtype: 'pveQemuHDInputPanel', | |
74c0b9a9 | 158 | padding: 0, |
8cdfb23f | 159 | bind: { |
f6710aac | 160 | nodename: '{nodename}', |
8cdfb23f TL |
161 | }, |
162 | title: gettext('Hard Disk'), | |
163 | isCreate: true, | |
f6710aac | 164 | insideWizard: true, |
8cdfb23f TL |
165 | }, |
166 | { | |
167 | xtype: 'pveQemuProcessorPanel', | |
168 | insideWizard: true, | |
f6710aac | 169 | title: gettext('CPU'), |
8cdfb23f TL |
170 | }, |
171 | { | |
172 | xtype: 'pveQemuMemoryPanel', | |
173 | insideWizard: true, | |
f6710aac | 174 | title: gettext('Memory'), |
8cdfb23f TL |
175 | }, |
176 | { | |
177 | xtype: 'pveQemuNetworkInputPanel', | |
178 | bind: { | |
f6710aac | 179 | nodename: '{nodename}', |
8cdfb23f TL |
180 | }, |
181 | title: gettext('Network'), | |
f6710aac | 182 | insideWizard: true, |
8cdfb23f TL |
183 | }, |
184 | { | |
185 | title: gettext('Confirm'), | |
186 | layout: 'fit', | |
187 | items: [ | |
188 | { | |
189 | xtype: 'grid', | |
190 | store: { | |
191 | model: 'KeyValue', | |
192 | sorters: [{ | |
8058410f | 193 | property: 'key', |
f6710aac TL |
194 | direction: 'ASC', |
195 | }], | |
9bbc1e4d | 196 | }, |
8cdfb23f | 197 | columns: [ |
8058410f TL |
198 | { header: 'Key', width: 150, dataIndex: 'key' }, |
199 | { header: 'Value', flex: 1, dataIndex: 'value' }, | |
f6710aac TL |
200 | ], |
201 | }, | |
8cdfb23f | 202 | ], |
d8e2ae99 TL |
203 | dockedItems: [ |
204 | { | |
205 | xtype: 'proxmoxcheckbox', | |
206 | name: 'start', | |
207 | dock: 'bottom', | |
208 | margin: '5 0 0 0', | |
f6710aac TL |
209 | boxLabel: gettext('Start after created'), |
210 | }, | |
d8e2ae99 | 211 | ], |
8cdfb23f TL |
212 | listeners: { |
213 | show: function(panel) { | |
214 | var kv = this.up('window').getValues(); | |
215 | var data = []; | |
216 | Ext.Object.each(kv, function(key, value) { | |
217 | if (key === 'delete') { // ignore | |
218 | return; | |
219 | } | |
220 | data.push({ key: key, value: value }); | |
221 | }); | |
9bbc1e4d | 222 | |
8cdfb23f TL |
223 | var summarystore = panel.down('grid').getStore(); |
224 | summarystore.suspendEvents(); | |
225 | summarystore.removeAll(); | |
226 | summarystore.add(data); | |
227 | summarystore.sort(); | |
228 | summarystore.resumeEvents(); | |
229 | summarystore.fireEvent('refresh'); | |
f6710aac | 230 | }, |
8cdfb23f TL |
231 | }, |
232 | onSubmit: function() { | |
233 | var wizard = this.up('window'); | |
234 | var kv = wizard.getValues(); | |
399ffa76 | 235 | delete kv.delete; |
8cdfb23f TL |
236 | |
237 | var nodename = kv.nodename; | |
238 | delete kv.nodename; | |
9bbc1e4d | 239 | |
8cdfb23f TL |
240 | Proxmox.Utils.API2Request({ |
241 | url: '/nodes/' + nodename + '/qemu', | |
242 | waitMsgTarget: wizard, | |
243 | method: 'POST', | |
244 | params: kv, | |
8058410f | 245 | success: function(response) { |
8cdfb23f TL |
246 | wizard.close(); |
247 | }, | |
248 | failure: function(response, opts) { | |
249 | Ext.Msg.alert(gettext('Error'), response.htmlStatus); | |
f6710aac | 250 | }, |
8cdfb23f | 251 | }); |
f6710aac TL |
252 | }, |
253 | }, | |
254 | ], | |
9bbc1e4d DM |
255 | }); |
256 | ||
257 |