]> git.proxmox.com Git - proxmox-widget-toolkit.git/blame - node/NetworkEdit.js
node/net: fix indentation a bit
[proxmox-widget-toolkit.git] / node / NetworkEdit.js
CommitLineData
a58001dd
DM
1Ext.define('Proxmox.node.NetworkEdit', {
2 extend: 'Proxmox.window.Edit',
3 alias: ['widget.proxmoxNodeNetworkEdit'],
4
5 initComponent : function() {
6 var me = this;
7
8 if (!me.nodename) {
9 throw "no node name specified";
10 }
11
12 if (!me.iftype) {
13 throw "no network device type specified";
14 }
15
b33f451f 16 me.isCreate = !me.iface;
a58001dd
DM
17
18 var iface_vtype;
19
20 if (me.iftype === 'bridge') {
21 iface_vtype = 'BridgeName';
22 } else if (me.iftype === 'bond') {
23 iface_vtype = 'BondName';
b33f451f 24 } else if (me.iftype === 'eth' && !me.isCreate) {
a58001dd 25 iface_vtype = 'InterfaceName';
8aefd47c
AD
26 } else if (me.iftype === 'vlan') {
27 iface_vtype = 'VlanName';
a58001dd
DM
28 } else if (me.iftype === 'OVSBridge') {
29 iface_vtype = 'BridgeName';
30 } else if (me.iftype === 'OVSBond') {
31 iface_vtype = 'BondName';
32 } else if (me.iftype === 'OVSIntPort') {
33 iface_vtype = 'InterfaceName';
34 } else if (me.iftype === 'OVSPort') {
35 iface_vtype = 'InterfaceName';
36 } else {
37 console.log(me.iftype);
38 throw "unknown network device type specified";
39 }
40
41 me.subject = Proxmox.Utils.render_network_iface_type(me.iftype);
42
43 var column2 = [];
44
45 if (!(me.iftype === 'OVSIntPort' || me.iftype === 'OVSPort' ||
46 me.iftype === 'OVSBond')) {
47 column2.push({
fccec7c6 48 xtype: 'proxmoxcheckbox',
a58001dd
DM
49 fieldLabel: gettext('Autostart'),
50 name: 'autostart',
51 uncheckedValue: 0,
b33f451f 52 checked: me.isCreate ? true : undefined
a58001dd
DM
53 });
54 }
55
56 if (me.iftype === 'bridge') {
57 column2.push({
fccec7c6 58 xtype: 'proxmoxcheckbox',
a58001dd
DM
59 fieldLabel: gettext('VLAN aware'),
60 name: 'bridge_vlan_aware',
b33f451f 61 deleteEmpty: !me.isCreate
a58001dd
DM
62 });
63 column2.push({
64 xtype: 'textfield',
65 fieldLabel: gettext('Bridge ports'),
66 name: 'bridge_ports'
67 });
68 } else if (me.iftype === 'OVSBridge') {
69 column2.push({
70 xtype: 'textfield',
71 fieldLabel: gettext('Bridge ports'),
72 name: 'ovs_ports'
73 });
74 column2.push({
75 xtype: 'textfield',
76 fieldLabel: gettext('OVS options'),
77 name: 'ovs_options'
78 });
79 } else if (me.iftype === 'OVSPort' || me.iftype === 'OVSIntPort') {
80 column2.push({
b33f451f 81 xtype: me.isCreate ? 'PVE.form.BridgeSelector' : 'displayfield',
a58001dd
DM
82 fieldLabel: Proxmox.Utils.render_network_iface_type('OVSBridge'),
83 allowBlank: false,
84 nodename: me.nodename,
85 bridgeType: 'OVSBridge',
86 name: 'ovs_bridge'
87 });
88 column2.push({
89 xtype: 'pveVlanField',
b33f451f 90 deleteEmpty: !me.isCreate,
a58001dd
DM
91 name: 'ovs_tag',
92 value: ''
93 });
94 column2.push({
95 xtype: 'textfield',
96 fieldLabel: gettext('OVS options'),
97 name: 'ovs_options'
98 });
8aefd47c
AD
99 } else if (me.iftype === 'vlan') {
100
ea7da80c 101 if (!me.isCreate) {
8aefd47c 102
ea7da80c
TL
103 me.disablevlanid = false;
104 me.disablevlanrawdevice = false;
105 me.vlanrawdevicevalue = '';
106 me.vlanidvalue = '';
8aefd47c 107
ea7da80c
TL
108 if (Proxmox.Utils.VlanInterface_match.test(me.iface)) {
109 me.disablevlanid = true;
110 me.disablevlanrawdevice = true;
111 var arr = Proxmox.Utils.VlanInterface_match.exec(me.iface);
112 me.vlanrawdevicevalue = arr[1];
113 me.vlanidvalue = arr[2];
8aefd47c 114
ea7da80c
TL
115 } else if (Proxmox.Utils.Vlan_match.test(me.iface)) {
116 me.disablevlanid = true;
117 var arr = Proxmox.Utils.Vlan_match.exec(me.iface);
118 me.vlanidvalue = arr[1];
119 }
120 } else {
8aefd47c 121
ea7da80c
TL
122 me.disablevlanid = true;
123 me.disablevlanrawdevice = true;
8aefd47c
AD
124 }
125
126 column2.push({
127 xtype: 'textfield',
128 fieldLabel: gettext('Vlan raw device'),
129 name: 'vlan-raw-device',
ea7da80c 130 value: me.vlanrawdevicevalue,
8aefd47c
AD
131 disabled: me.disablevlanrawdevice
132 });
133
134 column2.push({
135 xtype: 'pveVlanField',
136 name: 'vlan-id',
ea7da80c 137 value: me.vlanidvalue,
8aefd47c
AD
138 disabled: me.disablevlanid
139
140 });
141
a58001dd
DM
142 } else if (me.iftype === 'bond') {
143 column2.push({
144 xtype: 'textfield',
145 fieldLabel: gettext('Slaves'),
146 name: 'slaves'
147 });
148
149 var policySelector = Ext.createWidget('bondPolicySelector', {
150 fieldLabel: gettext('Hash policy'),
151 name: 'bond_xmit_hash_policy',
b33f451f 152 deleteEmpty: !me.isCreate,
a58001dd
DM
153 disabled: true
154 });
155
b154853a
AD
156 var primaryfield = Ext.createWidget('textfield', {
157 fieldLabel: gettext('bond-primary'),
158 name: 'bond-primary',
159 value: '',
160 disabled: true
161 });
162
a58001dd
DM
163 column2.push({
164 xtype: 'bondModeSelector',
165 fieldLabel: gettext('Mode'),
166 name: 'bond_mode',
b33f451f 167 value: me.isCreate ? 'balance-rr' : undefined,
a58001dd
DM
168 listeners: {
169 change: function(f, value) {
170 if (value === 'balance-xor' ||
171 value === '802.3ad') {
172 policySelector.setDisabled(false);
b154853a
AD
173 primaryfield.setDisabled(true);
174 primaryfield.setValue('');
175 } else if (value === 'active-backup') {
176 primaryfield.setDisabled(false);
177 policySelector.setDisabled(true);
178 policySelector.setValue('');
a58001dd
DM
179 } else {
180 policySelector.setDisabled(true);
181 policySelector.setValue('');
b154853a
AD
182 primaryfield.setDisabled(true);
183 primaryfield.setValue('');
a58001dd
DM
184 }
185 }
186 },
187 allowBlank: false
188 });
189
190 column2.push(policySelector);
b154853a 191 column2.push(primaryfield);
a58001dd
DM
192
193 } else if (me.iftype === 'OVSBond') {
194 column2.push({
b33f451f 195 xtype: me.isCreate ? 'PVE.form.BridgeSelector' : 'displayfield',
a58001dd
DM
196 fieldLabel: Proxmox.Utils.render_network_iface_type('OVSBridge'),
197 allowBlank: false,
198 nodename: me.nodename,
199 bridgeType: 'OVSBridge',
200 name: 'ovs_bridge'
201 });
202 column2.push({
203 xtype: 'pveVlanField',
b33f451f 204 deleteEmpty: !me.isCreate,
a58001dd
DM
205 name: 'ovs_tag',
206 value: ''
207 });
208 column2.push({
209 xtype: 'textfield',
210 fieldLabel: gettext('OVS options'),
211 name: 'ovs_options'
212 });
213 }
214
215 column2.push({
216 xtype: 'textfield',
217 fieldLabel: gettext('Comment'),
218 allowBlank: true,
219 nodename: me.nodename,
220 name: 'comments'
221 });
222
223 var url;
224 var method;
225
b33f451f 226 if (me.isCreate) {
a58001dd
DM
227 url = "/api2/extjs/nodes/" + me.nodename + "/network";
228 method = 'POST';
229 } else {
230 url = "/api2/extjs/nodes/" + me.nodename + "/network/" + me.iface;
231 method = 'PUT';
232 }
233
ea7da80c
TL
234 var column1 = [{
235 xtype: 'hiddenfield',
236 name: 'type',
237 value: me.iftype
238 },
239 {
240 xtype: me.isCreate ? 'textfield' : 'displayfield',
241 fieldLabel: gettext('Name'),
242 name: 'iface',
243 value: me.iface,
244 vtype: iface_vtype,
245 allowBlank: false,
246 listeners: {
247 change: function(f, value) {
248 if (me.isCreate && iface_vtype === 'VlanName') {
249 var vlanidField = me.down('field[name=vlan-id]');
250 var vlanrawdeviceField = me.down('field[name=vlan-raw-device]');
251 if (Proxmox.Utils.VlanInterface_match.test(value)) {
252 vlanidField.setDisabled(true);
253 vlanrawdeviceField.setDisabled(true);
254 } else if (Proxmox.Utils.Vlan_match.test(value)) {
255 vlanidField.setDisabled(true);
256 vlanrawdeviceField.setDisabled(false);
257 } else {
258 vlanidField.setDisabled(false);
259 vlanrawdeviceField.setDisabled(false);
260 }
261 }
262 }
a58001dd 263 }
ea7da80c 264 }];
a58001dd
DM
265
266 if (me.iftype === 'OVSBond') {
267 column1.push(
268 {
269 xtype: 'bondModeSelector',
270 fieldLabel: gettext('Mode'),
271 name: 'bond_mode',
272 openvswitch: true,
b33f451f 273 value: me.isCreate ? 'active-backup' : undefined,
a58001dd
DM
274 allowBlank: false
275 },
276 {
277 xtype: 'textfield',
278 fieldLabel: gettext('Slaves'),
279 name: 'ovs_bonds'
280 }
281 );
282 } else {
283
284 column1.push(
285 {
a0ec1620 286 xtype: 'proxmoxtextfield',
b33f451f 287 deleteEmpty: !me.isCreate,
8e2d096c
DC
288 fieldLabel: 'IPv4/CIDR',
289 vtype: 'IPCIDRAddress',
290 name: 'cidr'
a58001dd
DM
291 },
292 {
a0ec1620 293 xtype: 'proxmoxtextfield',
b33f451f 294 deleteEmpty: !me.isCreate,
8e2d096c 295 fieldLabel: gettext('Gateway') + ' (IPv4)',
a58001dd
DM
296 vtype: 'IPAddress',
297 name: 'gateway'
298 },
299 {
a0ec1620 300 xtype: 'proxmoxtextfield',
b33f451f 301 deleteEmpty: !me.isCreate,
8e2d096c
DC
302 fieldLabel: 'IPv6/CIDR',
303 vtype: 'IP6CIDRAddress',
304 name: 'cidr6'
a58001dd
DM
305 },
306 {
a0ec1620 307 xtype: 'proxmoxtextfield',
b33f451f 308 deleteEmpty: !me.isCreate,
8e2d096c 309 fieldLabel: gettext('Gateway') + ' (IPv6)',
a58001dd
DM
310 vtype: 'IP6Address',
311 name: 'gateway6'
aedaf2b6
AD
312 },
313 {
314 xtype: 'proxmoxintegerfield',
315 minValue: 1280,
316 maxValue: 65520,
317 deleteEmpty: !me.isCreate,
318 fieldLabel: 'MTU',
319 name: 'mtu'
a58001dd
DM
320 }
321 );
322 }
323
324 Ext.applyIf(me, {
325 url: url,
326 method: method,
327 items: {
328 xtype: 'inputpanel',
329 column1: column1,
330 column2: column2
331 }
332 });
333
334 me.callParent();
335
b33f451f 336 if (me.isCreate) {
a58001dd
DM
337 me.down('field[name=iface]').setValue(me.iface_default);
338 } else {
339 me.load({
340 success: function(response, options) {
341 var data = response.result.data;
342 if (data.type !== me.iftype) {
343 var msg = "Got unexpected device type";
344 Ext.Msg.alert(gettext('Error'), msg, function() {
345 me.close();
346 });
347 return;
348 }
349 me.setValues(data);
350 me.isValid(); // trigger validation
351 }
352 });
353 }
354 }
355});