]> git.proxmox.com Git - pve-manager.git/blame - www/manager/openvz/CreateWizard.js
use new button class
[pve-manager.git] / www / manager / openvz / CreateWizard.js
CommitLineData
aff192e6
DM
1Ext.define('PVE.openvz.CreateWizard', {
2 extend: 'PVE.window.Wizard',
c6594d0e
DM
3 requires: [
4 'Ext.form.*',
5 'PVE.data.ResourceStore'
6 ],
aff192e6
DM
7
8 initComponent: function() {
9 var me = this;
10
c6594d0e
DM
11 var nextvmid = PVE.data.ResourceStore.findNextVMID();
12
13 var summarystore = Ext.create('Ext.data.Store', {
14 model: 'KeyValue',
15 sorters: [
16 {
17 property : 'key',
18 direction: 'ASC'
19 }
20 ]
21 });
22
23 var tmplsel = Ext.create('PVE.form.FileSelector', {
24 name: 'ostemplate',
25 storageContent: 'vztmpl',
26 fieldLabel: 'OS template',
27 allowBlank: false
28 });
29
30 var bridgesel = Ext.create('PVE.form.BridgeSelector', {
31 name: 'bridge',
32 fieldLabel: 'Bridge',
33 labelAlign: 'right',
34 autoSelect: true,
35 disabled: true,
36 allowBlank: false
37 });
38
aff192e6
DM
39 Ext.applyIf(me, {
40 title: 'Create new container',
41 items: [
42 {
c6594d0e
DM
43 xtype: 'inputpanel',
44 title: 'General',
45 column1: [
46 {
47 xtype: 'PVE.form.NodeSelector',
48 name: 'nodename',
49 fieldLabel: 'Node',
50 allowBlank: false,
51 onlineValidator: true,
52 listeners: {
53 change: function(f, value) {
54 tmplsel.setStorage('local', value);
55 bridgesel.setNodename(value);
56 }
57 }
58 },
59 {
60 xtype: 'numberfield',
61 name: 'vmid',
62 value: nextvmid,
63 minValue: 100,
64 maxValue: 999999999,
65 fieldLabel: 'VM ID',
66 allowBlank: false,
67 validator: function(value) {
68 /*jslint confusion: true */
69 if (!PVE.data.ResourceStore.findVMID(value)) {
70 return true;
71 }
72 return "This VM ID is already in use.";
73 }
74 },
75 {
76 xtype: 'pvetextfield',
77 name: 'hostname',
78 value: '',
79 fieldLabel: 'Hostname',
80 skipEmptyText: true,
81 allowBlank: true
82 }
83 ],
84 column2: [
85 {
86 xtype: 'textfield',
87 inputType: 'password',
88 name: 'password',
89 value: '',
90 fieldLabel: 'Password',
91 allowBlank: false,
92 minLength: 5,
93 change: function(f, value) {
94 if (!me.rendered) {
95 return;
96 }
97 me.down('field[name=confirmpw]').validate();
98 }
99 },
100 {
101 xtype: 'textfield',
102 inputType: 'password',
103 name: 'confirmpw',
104 value: '',
105 fieldLabel: 'Confirm password',
106 allowBlank: false,
107 validator: function(value) {
108 var pw = me.down('field[name=password]').getValue();
109 if (pw !== value) {
110 return "Passowords does not match!";
111 }
112 return true;
113 }
114 }
115 ],
116 onGetValues: function(values) {
117 delete values.confirmpw;
118 return values;
119 }
120 },
121 {
122 xtype: 'inputpanel',
123 title: 'Template',
124 items: tmplsel
125 },
126 {
d9f0ffa9 127 xtype: 'pveOpenVZResourceInputPanel',
c6594d0e 128 title: 'Resources',
c6594d0e
DM
129 },
130 {
131 xtype: 'inputpanel',
132 title: 'Network',
133 column1: [
134 {
135 xtype: 'radiofield',
136 name: 'networkmode',
137 inputValue: 'routed',
138 boxLabel: 'Routed mode (venet)',
139 checked: true,
140 listeners: {
141 change: function(f, value) {
142 if (!me.rendered) {
143 return;
144 }
145 me.down('field[name=ip_address]').setDisabled(!value);
146 me.down('field[name=ip_address]').validate();
147 }
148 }
149 },
150 {
151 xtype: 'textfield',
152 name: 'ip_address',
153 vtype: 'IPAddress',
154 value: '',
155 fieldLabel: 'IP address',
156 labelAlign: 'right',
157 allowBlank: false
158 }
159 ],
160 column2: [
161 {
162 xtype: 'radiofield',
163 name: 'networkmode',
164 inputValue: 'bridge',
165 boxLabel: 'Bridged mode',
166 checked: false,
167 listeners: {
168 change: function(f, value) {
169 if (!me.rendered) {
170 return;
171 }
172 me.down('field[name=bridge]').setDisabled(!value);
173 me.down('field[name=bridge]').validate();
174 }
175 }
176 },
177 bridgesel
178 ],
179 onGetValues: function(values) {
877d3f6d
DM
180 if (values.networkmode === 'bridge') {
181 return { netif: 'ifname=eth0,bridge=' + values.bridge };
182 } else {
183 return { ip_address: values.ip_address };
184 }
c6594d0e
DM
185 }
186 },
187 {
188 xtype: 'inputpanel',
189 title: 'DNS',
190 column1: [
191 {
192 xtype: 'pvetextfield',
193 name: 'searchdomain',
194 skipEmptyText: true,
195 fieldLabel: 'DNS domain',
196 emptyText: 'use host settings',
197 allowBlank: true,
198 listeners: {
199 change: function(f, value) {
200 if (!me.rendered) {
201 return;
202 }
203 var field = me.down('#dns1');
204 field.setDisabled(!value);
205 field.clearInvalid();
206 var field = me.down('#dns2');
207 field.setDisabled(!value);
208 field.clearInvalid();
209 }
210 }
211 },
212 {
213 xtype: 'pvetextfield',
214 fieldLabel: 'DNS server 1',
215 vtype: 'IPAddress',
216 allowBlank: true,
217 disabled: true,
218 name: 'nameserver',
219 itemId: 'dns1'
220 },
221 {
222 xtype: 'pvetextfield',
223 fieldLabel: 'DNS server 2',
224 vtype: 'IPAddress',
225 skipEmptyText: true,
226 disabled: true,
227 name: 'nameserver',
228 itemId: 'dns2'
229 }
230 ]
231 },
232 {
233 title: 'Confirm',
aff192e6 234 layout: 'fit',
c6594d0e
DM
235 items: [
236 {
237 title: 'Settings',
238 xtype: 'grid',
239 store: summarystore,
240 columns: [
241 {header: 'Key', width: 150, dataIndex: 'key'},
242 {header: 'Value', flex: 1, dataIndex: 'value'}
243 ]
244 }
245 ],
246 listeners: {
247 show: function(panel) {
248 var form = me.down('form').getForm();
249 var kv = me.getValues();
250 var data = [];
251 Ext.Object.each(kv, function(key, value) {
252 if (key === 'delete') { // ignore
253 return;
254 }
255 if (key === 'password') { // don't show pw
256 return;
257 }
258 var html = Ext.htmlEncode(Ext.JSON.encode(value));
259 data.push({ key: key, value: value });
260 });
261 summarystore.suspendEvents();
262 summarystore.removeAll();
263 summarystore.add(data);
264 summarystore.sort();
265 summarystore.resumeEvents();
266 summarystore.fireEvent('datachanged', summarystore);
267 }
268 },
269 onSubmit: function() {
270 var kv = me.getValues();
271 delete kv['delete'];
272
273 var nodename = kv.nodename;
274 delete kv.nodename;
275
276 PVE.Utils.API2Request({
277 url: '/nodes/' + nodename + '/openvz',
278 waitMsgTarget: me,
279 method: 'POST',
280 params: kv,
281 success: function(response){
282 me.close();
283 },
284 failure: function(response, opts) {
285 Ext.Msg.alert('Error', response.htmlStatus);
286 }
287 });
288 }
aff192e6
DM
289 }
290 ]
291 });
292
293 me.callParent();
294 }
295});
296
297
298