]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - src/node/NetworkEdit.js
1 Ext
. define ( 'Proxmox.node.NetworkEdit' , {
2 extend
: 'Proxmox.window.Edit' ,
3 alias
: [ 'widget.proxmoxNodeNetworkEdit' ],
5 initComponent : function () {
9 throw "no node name specified" ;
13 throw "no network device type specified" ;
16 me
. isCreate
= ! me
. iface
;
20 if ( me
. iftype
=== 'bridge' ) {
21 iface_vtype
= 'BridgeName' ;
22 } else if ( me
. iftype
=== 'bond' ) {
23 iface_vtype
= 'BondName' ;
24 } else if ( me
. iftype
=== 'eth' && ! me
. isCreate
) {
25 iface_vtype
= 'InterfaceName' ;
26 } else if ( me
. iftype
=== 'vlan' ) {
27 iface_vtype
= 'VlanName' ;
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' ;
37 console
. log ( me
. iftype
);
38 throw "unknown network device type specified" ;
41 me
. subject
= Proxmox
. Utils
. render_network_iface_type ( me
. iftype
);
49 if (!( me
. iftype
=== 'OVSIntPort' || me
. iftype
=== 'OVSPort' || me
. iftype
=== 'OVSBond' )) {
51 xtype
: 'proxmoxcheckbox' ,
52 fieldLabel
: gettext ( 'Autostart' ),
55 checked
: me
. isCreate
? true : undefined ,
59 if ( me
. iftype
=== 'bridge' ) {
61 xtype
: 'proxmoxcheckbox' ,
62 fieldLabel
: gettext ( 'VLAN aware' ),
63 name
: 'bridge_vlan_aware' ,
64 deleteEmpty
: ! me
. isCreate
,
68 fieldLabel
: gettext ( 'Bridge ports' ),
72 'data-qtip' : gettext ( 'Space-separated list of interfaces, for example: enp0s0 enp1s0' ),
75 } else if ( me
. iftype
=== 'OVSBridge' ) {
78 fieldLabel
: gettext ( 'Bridge ports' ),
82 'data-qtip' : gettext ( 'Space-separated list of interfaces, for example: enp0s0 enp1s0' ),
87 fieldLabel
: gettext ( 'OVS options' ),
90 } else if ( me
. iftype
=== 'OVSPort' || me
. iftype
=== 'OVSIntPort' ) {
92 xtype
: me
. isCreate
? 'PVE.form.BridgeSelector' : 'displayfield' ,
93 fieldLabel
: Proxmox
. Utils
. render_network_iface_type ( 'OVSBridge' ),
95 nodename
: me
. nodename
,
96 bridgeType
: 'OVSBridge' ,
100 xtype
: 'pveVlanField' ,
101 deleteEmpty
: ! me
. isCreate
,
107 fieldLabel
: gettext ( 'OVS options' ),
110 } else if ( me
. iftype
=== 'vlan' ) {
112 me
. disablevlanid
= false ;
113 me
. disablevlanrawdevice
= false ;
114 me
. vlanrawdevicevalue
= '' ;
117 if ( Proxmox
. Utils
. VlanInterface_match
. test ( me
. iface
)) {
118 me
. disablevlanid
= true ;
119 me
. disablevlanrawdevice
= true ;
120 let arr
= Proxmox
. Utils
. VlanInterface_match
. exec ( me
. iface
);
121 me
. vlanrawdevicevalue
= arr
[ 1 ];
122 me
. vlanidvalue
= arr
[ 2 ];
123 } else if ( Proxmox
. Utils
. Vlan_match
. test ( me
. iface
)) {
124 me
. disablevlanid
= true ;
125 let arr
= Proxmox
. Utils
. Vlan_match
. exec ( me
. iface
);
126 me
. vlanidvalue
= arr
[ 1 ];
129 me
. disablevlanid
= true ;
130 me
. disablevlanrawdevice
= true ;
135 fieldLabel
: gettext ( 'Vlan raw device' ),
136 name
: 'vlan-raw-device' ,
137 value
: me
. vlanrawdevicevalue
,
138 disabled
: me
. disablevlanrawdevice
,
143 xtype
: 'pveVlanField' ,
145 value
: me
. vlanidvalue
,
146 disabled
: me
. disablevlanid
,
152 text
: 'Either add the VLAN number to an existing interface name, or choose your own name and set the VLAN raw device (for the latter ifupdown1 supports vlanXY naming only)' ,
154 } else if ( me
. iftype
=== 'bond' ) {
157 fieldLabel
: gettext ( 'Slaves' ),
161 let policySelector
= Ext
. createWidget ( 'bondPolicySelector' , {
162 fieldLabel
: gettext ( 'Hash policy' ),
163 name
: 'bond_xmit_hash_policy' ,
164 deleteEmpty
: ! me
. isCreate
,
168 let primaryfield
= Ext
. createWidget ( 'textfield' , {
169 fieldLabel
: 'bond-primary' ,
170 name
: 'bond-primary' ,
176 xtype
: 'bondModeSelector' ,
177 fieldLabel
: gettext ( 'Mode' ),
179 value
: me
. isCreate
? 'balance-rr' : undefined ,
181 change : function ( f
, value
) {
182 if ( value
=== 'balance-xor' ||
183 value
=== '802.3ad' ) {
184 policySelector
. setDisabled ( false );
185 primaryfield
. setDisabled ( true );
186 primaryfield
. setValue ( '' );
187 } else if ( value
=== 'active-backup' ) {
188 primaryfield
. setDisabled ( false );
189 policySelector
. setDisabled ( true );
190 policySelector
. setValue ( '' );
192 policySelector
. setDisabled ( true );
193 policySelector
. setValue ( '' );
194 primaryfield
. setDisabled ( true );
195 primaryfield
. setValue ( '' );
202 column2
. push ( policySelector
);
203 column2
. push ( primaryfield
);
204 } else if ( me
. iftype
=== 'OVSBond' ) {
206 xtype
: me
. isCreate
? 'PVE.form.BridgeSelector' : 'displayfield' ,
207 fieldLabel
: Proxmox
. Utils
. render_network_iface_type ( 'OVSBridge' ),
209 nodename
: me
. nodename
,
210 bridgeType
: 'OVSBridge' ,
214 xtype
: 'pveVlanField' ,
215 deleteEmpty
: ! me
. isCreate
,
221 fieldLabel
: gettext ( 'OVS options' ),
228 fieldLabel
: gettext ( 'Comment' ),
230 nodename
: me
. nodename
,
238 url
= "/api2/extjs/nodes/" + me
. nodename
+ "/network" ;
241 url
= "/api2/extjs/nodes/" + me
. nodename
+ "/network/" + me
. iface
;
246 xtype
: 'hiddenfield' ,
251 xtype
: me
. isCreate
? 'textfield' : 'displayfield' ,
252 fieldLabel
: gettext ( 'Name' ),
260 'data-qtip' : gettext ( 'For example, vmbr0.100, vmbr0, vlan0.100, vlan0' ),
263 change : function ( f
, value
) {
264 if ( me
. isCreate
&& iface_vtype
=== 'VlanName' ) {
265 let vlanidField
= me
. down ( 'field[name=vlan-id]' );
266 let vlanrawdeviceField
= me
. down ( 'field[name=vlan-raw-device]' );
267 if ( Proxmox
. Utils
. VlanInterface_match
. test ( value
)) {
268 vlanidField
. setDisabled ( true );
269 vlanrawdeviceField
. setDisabled ( true );
270 // User defined those values in the `iface` (Name)
271 // field. Match them (instead of leaving the
272 // previous value) to make clear what is submitted
273 // and how the fields `iface`, `vlan-id` and
274 // `vlan-raw-device` are connected
275 vlanidField
. setValue (
276 value
. match ( Proxmox
. Utils
. VlanInterface_match
)[ 2 ],
278 vlanrawdeviceField
. setValue (
279 value
. match ( Proxmox
. Utils
. VlanInterface_match
)[ 1 ],
281 } else if ( Proxmox
. Utils
. Vlan_match
. test ( value
)) {
282 vlanidField
. setDisabled ( true );
283 vlanidField
. setValue (
284 value
. match ( Proxmox
. Utils
. Vlan_match
)[ 1 ],
286 vlanrawdeviceField
. setDisabled ( false );
288 vlanidField
. setDisabled ( false );
289 vlanrawdeviceField
. setDisabled ( false );
296 if ( me
. iftype
=== 'OVSBond' ) {
299 xtype
: 'bondModeSelector' ,
300 fieldLabel
: gettext ( 'Mode' ),
303 value
: me
. isCreate
? 'active-backup' : undefined ,
308 fieldLabel
: gettext ( 'Slaves' ),
315 xtype
: 'proxmoxtextfield' ,
316 deleteEmpty
: ! me
. isCreate
,
317 fieldLabel
: 'IPv4/CIDR' ,
318 vtype
: 'IPCIDRAddress' ,
322 xtype
: 'proxmoxtextfield' ,
323 deleteEmpty
: ! me
. isCreate
,
324 fieldLabel
: gettext ( 'Gateway' ) + ' (IPv4)' ,
329 xtype
: 'proxmoxtextfield' ,
330 deleteEmpty
: ! me
. isCreate
,
331 fieldLabel
: 'IPv6/CIDR' ,
332 vtype
: 'IP6CIDRAddress' ,
336 xtype
: 'proxmoxtextfield' ,
337 deleteEmpty
: ! me
. isCreate
,
338 fieldLabel
: gettext ( 'Gateway' ) + ' (IPv6)' ,
344 advancedColumn1
. push (
346 xtype
: 'proxmoxintegerfield' ,
349 deleteEmpty
: ! me
. isCreate
,
364 advancedColumn1
: advancedColumn1
,
365 advancedColumn2
: advancedColumn2
,
372 me
. down ( 'field[name=iface]' ). setValue ( me
. iface_default
);
375 success : function ( response
, options
) {
376 let data
= response
. result
. data
;
377 if ( data
. type
!== me
. iftype
) {
378 let msg
= "Got unexpected device type" ;
379 Ext
. Msg
. alert ( gettext ( 'Error' ), msg
, function () {
385 me
. isValid (); // trigger validation