]>
git.proxmox.com Git - proxmox-widget-toolkit.git/blob - 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' ),
71 } else if ( me
. iftype
=== 'OVSBridge' ) {
74 fieldLabel
: gettext ( 'Bridge ports' ),
79 fieldLabel
: gettext ( 'OVS options' ),
82 } else if ( me
. iftype
=== 'OVSPort' || me
. iftype
=== 'OVSIntPort' ) {
84 xtype
: me
. isCreate
? 'PVE.form.BridgeSelector' : 'displayfield' ,
85 fieldLabel
: Proxmox
. Utils
. render_network_iface_type ( 'OVSBridge' ),
87 nodename
: me
. nodename
,
88 bridgeType
: 'OVSBridge' ,
92 xtype
: 'pveVlanField' ,
93 deleteEmpty
: ! me
. isCreate
,
99 fieldLabel
: gettext ( 'OVS options' ),
102 } else if ( me
. iftype
=== 'vlan' ) {
104 me
. disablevlanid
= false ;
105 me
. disablevlanrawdevice
= false ;
106 me
. vlanrawdevicevalue
= '' ;
109 if ( Proxmox
. Utils
. VlanInterface_match
. test ( me
. iface
)) {
110 me
. disablevlanid
= true ;
111 me
. disablevlanrawdevice
= true ;
112 let arr
= Proxmox
. Utils
. VlanInterface_match
. exec ( me
. iface
);
113 me
. vlanrawdevicevalue
= arr
[ 1 ];
114 me
. vlanidvalue
= arr
[ 2 ];
115 } else if ( Proxmox
. Utils
. Vlan_match
. test ( me
. iface
)) {
116 me
. disablevlanid
= true ;
117 let arr
= Proxmox
. Utils
. Vlan_match
. exec ( me
. iface
);
118 me
. vlanidvalue
= arr
[ 1 ];
121 me
. disablevlanid
= true ;
122 me
. disablevlanrawdevice
= true ;
127 fieldLabel
: gettext ( 'Vlan raw device' ),
128 name
: 'vlan-raw-device' ,
129 value
: me
. vlanrawdevicevalue
,
130 disabled
: me
. disablevlanrawdevice
,
134 xtype
: 'pveVlanField' ,
136 value
: me
. vlanidvalue
,
137 disabled
: me
. disablevlanid
,
143 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)' ,
145 } else if ( me
. iftype
=== 'bond' ) {
148 fieldLabel
: gettext ( 'Slaves' ),
152 let policySelector
= Ext
. createWidget ( 'bondPolicySelector' , {
153 fieldLabel
: gettext ( 'Hash policy' ),
154 name
: 'bond_xmit_hash_policy' ,
155 deleteEmpty
: ! me
. isCreate
,
159 let primaryfield
= Ext
. createWidget ( 'textfield' , {
160 fieldLabel
: gettext ( 'bond-primary' ),
161 name
: 'bond-primary' ,
167 xtype
: 'bondModeSelector' ,
168 fieldLabel
: gettext ( 'Mode' ),
170 value
: me
. isCreate
? 'balance-rr' : undefined ,
172 change : function ( f
, value
) {
173 if ( value
=== 'balance-xor' ||
174 value
=== '802.3ad' ) {
175 policySelector
. setDisabled ( false );
176 primaryfield
. setDisabled ( true );
177 primaryfield
. setValue ( '' );
178 } else if ( value
=== 'active-backup' ) {
179 primaryfield
. setDisabled ( false );
180 policySelector
. setDisabled ( true );
181 policySelector
. setValue ( '' );
183 policySelector
. setDisabled ( true );
184 policySelector
. setValue ( '' );
185 primaryfield
. setDisabled ( true );
186 primaryfield
. setValue ( '' );
193 column2
. push ( policySelector
);
194 column2
. push ( primaryfield
);
195 } else if ( me
. iftype
=== 'OVSBond' ) {
197 xtype
: me
. isCreate
? 'PVE.form.BridgeSelector' : 'displayfield' ,
198 fieldLabel
: Proxmox
. Utils
. render_network_iface_type ( 'OVSBridge' ),
200 nodename
: me
. nodename
,
201 bridgeType
: 'OVSBridge' ,
205 xtype
: 'pveVlanField' ,
206 deleteEmpty
: ! me
. isCreate
,
212 fieldLabel
: gettext ( 'OVS options' ),
219 fieldLabel
: gettext ( 'Comment' ),
221 nodename
: me
. nodename
,
229 url
= "/api2/extjs/nodes/" + me
. nodename
+ "/network" ;
232 url
= "/api2/extjs/nodes/" + me
. nodename
+ "/network/" + me
. iface
;
237 xtype
: 'hiddenfield' ,
242 xtype
: me
. isCreate
? 'textfield' : 'displayfield' ,
243 fieldLabel
: gettext ( 'Name' ),
249 change : function ( f
, value
) {
250 if ( me
. isCreate
&& iface_vtype
=== 'VlanName' ) {
251 let vlanidField
= me
. down ( 'field[name=vlan-id]' );
252 let vlanrawdeviceField
= me
. down ( 'field[name=vlan-raw-device]' );
253 if ( Proxmox
. Utils
. VlanInterface_match
. test ( value
)) {
254 vlanidField
. setDisabled ( true );
255 vlanrawdeviceField
. setDisabled ( true );
256 } else if ( Proxmox
. Utils
. Vlan_match
. test ( value
)) {
257 vlanidField
. setDisabled ( true );
258 vlanrawdeviceField
. setDisabled ( false );
260 vlanidField
. setDisabled ( false );
261 vlanrawdeviceField
. setDisabled ( false );
268 if ( me
. iftype
=== 'OVSBond' ) {
271 xtype
: 'bondModeSelector' ,
272 fieldLabel
: gettext ( 'Mode' ),
275 value
: me
. isCreate
? 'active-backup' : undefined ,
280 fieldLabel
: gettext ( 'Slaves' ),
287 xtype
: 'proxmoxtextfield' ,
288 deleteEmpty
: ! me
. isCreate
,
289 fieldLabel
: 'IPv4/CIDR' ,
290 vtype
: 'IPCIDRAddress' ,
294 xtype
: 'proxmoxtextfield' ,
295 deleteEmpty
: ! me
. isCreate
,
296 fieldLabel
: gettext ( 'Gateway' ) + ' (IPv4)' ,
301 xtype
: 'proxmoxtextfield' ,
302 deleteEmpty
: ! me
. isCreate
,
303 fieldLabel
: 'IPv6/CIDR' ,
304 vtype
: 'IP6CIDRAddress' ,
308 xtype
: 'proxmoxtextfield' ,
309 deleteEmpty
: ! me
. isCreate
,
310 fieldLabel
: gettext ( 'Gateway' ) + ' (IPv6)' ,
315 advancedColumn1
. push (
317 xtype
: 'proxmoxintegerfield' ,
320 deleteEmpty
: ! me
. isCreate
,
336 advancedColumn1
: advancedColumn1
,
337 advancedColumn2
: advancedColumn2
,
344 me
. down ( 'field[name=iface]' ). setValue ( me
. iface_default
);
347 success : function ( response
, options
) {
348 let data
= response
. result
. data
;
349 if ( data
. type
!== me
. iftype
) {
350 let msg
= "Got unexpected device type" ;
351 Ext
. Msg
. alert ( gettext ( 'Error' ), msg
, function () {
357 me
. isValid (); // trigger validation