]>
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' ),
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
,
135 xtype
: 'pveVlanField' ,
137 value
: me
. vlanidvalue
,
138 disabled
: me
. disablevlanid
,
144 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)' ,
146 } else if ( me
. iftype
=== 'bond' ) {
149 fieldLabel
: gettext ( 'Slaves' ),
153 let policySelector
= Ext
. createWidget ( 'bondPolicySelector' , {
154 fieldLabel
: gettext ( 'Hash policy' ),
155 name
: 'bond_xmit_hash_policy' ,
156 deleteEmpty
: ! me
. isCreate
,
160 let primaryfield
= Ext
. createWidget ( 'textfield' , {
161 fieldLabel
: 'bond-primary' ,
162 name
: 'bond-primary' ,
168 xtype
: 'bondModeSelector' ,
169 fieldLabel
: gettext ( 'Mode' ),
171 value
: me
. isCreate
? 'balance-rr' : undefined ,
173 change : function ( f
, value
) {
174 if ( value
=== 'balance-xor' ||
175 value
=== '802.3ad' ) {
176 policySelector
. setDisabled ( false );
177 primaryfield
. setDisabled ( true );
178 primaryfield
. setValue ( '' );
179 } else if ( value
=== 'active-backup' ) {
180 primaryfield
. setDisabled ( false );
181 policySelector
. setDisabled ( true );
182 policySelector
. setValue ( '' );
184 policySelector
. setDisabled ( true );
185 policySelector
. setValue ( '' );
186 primaryfield
. setDisabled ( true );
187 primaryfield
. setValue ( '' );
194 column2
. push ( policySelector
);
195 column2
. push ( primaryfield
);
196 } else if ( me
. iftype
=== 'OVSBond' ) {
198 xtype
: me
. isCreate
? 'PVE.form.BridgeSelector' : 'displayfield' ,
199 fieldLabel
: Proxmox
. Utils
. render_network_iface_type ( 'OVSBridge' ),
201 nodename
: me
. nodename
,
202 bridgeType
: 'OVSBridge' ,
206 xtype
: 'pveVlanField' ,
207 deleteEmpty
: ! me
. isCreate
,
213 fieldLabel
: gettext ( 'OVS options' ),
220 fieldLabel
: gettext ( 'Comment' ),
222 nodename
: me
. nodename
,
230 url
= "/api2/extjs/nodes/" + me
. nodename
+ "/network" ;
233 url
= "/api2/extjs/nodes/" + me
. nodename
+ "/network/" + me
. iface
;
238 xtype
: 'hiddenfield' ,
243 xtype
: me
. isCreate
? 'textfield' : 'displayfield' ,
244 fieldLabel
: gettext ( 'Name' ),
251 'data-qtip' : gettext ( 'For example, vmbr0.100, vmbr0, vlan0.100, vlan0' ),
254 change : function ( f
, value
) {
255 if ( me
. isCreate
&& iface_vtype
=== 'VlanName' ) {
256 let vlanidField
= me
. down ( 'field[name=vlan-id]' );
257 let vlanrawdeviceField
= me
. down ( 'field[name=vlan-raw-device]' );
258 if ( Proxmox
. Utils
. VlanInterface_match
. test ( value
)) {
259 vlanidField
. setDisabled ( true );
260 vlanrawdeviceField
. setDisabled ( true );
261 // User defined those values in the `iface` (Name)
262 // field. Match them (instead of leaving the
263 // previous value) to make clear what is submitted
264 // and how the fields `iface`, `vlan-id` and
265 // `vlan-raw-device` are connected
266 vlanidField
. setValue (
267 value
. match ( Proxmox
. Utils
. VlanInterface_match
)[ 2 ],
269 vlanrawdeviceField
. setValue (
270 value
. match ( Proxmox
. Utils
. VlanInterface_match
)[ 1 ],
272 } else if ( Proxmox
. Utils
. Vlan_match
. test ( value
)) {
273 vlanidField
. setDisabled ( true );
274 vlanidField
. setValue (
275 value
. match ( Proxmox
. Utils
. Vlan_match
)[ 1 ],
277 vlanrawdeviceField
. setDisabled ( false );
279 vlanidField
. setDisabled ( false );
280 vlanrawdeviceField
. setDisabled ( false );
287 if ( me
. iftype
=== 'OVSBond' ) {
290 xtype
: 'bondModeSelector' ,
291 fieldLabel
: gettext ( 'Mode' ),
294 value
: me
. isCreate
? 'active-backup' : undefined ,
299 fieldLabel
: gettext ( 'Slaves' ),
306 xtype
: 'proxmoxtextfield' ,
307 deleteEmpty
: ! me
. isCreate
,
308 fieldLabel
: 'IPv4/CIDR' ,
309 vtype
: 'IPCIDRAddress' ,
313 xtype
: 'proxmoxtextfield' ,
314 deleteEmpty
: ! me
. isCreate
,
315 fieldLabel
: gettext ( 'Gateway' ) + ' (IPv4)' ,
320 xtype
: 'proxmoxtextfield' ,
321 deleteEmpty
: ! me
. isCreate
,
322 fieldLabel
: 'IPv6/CIDR' ,
323 vtype
: 'IP6CIDRAddress' ,
327 xtype
: 'proxmoxtextfield' ,
328 deleteEmpty
: ! me
. isCreate
,
329 fieldLabel
: gettext ( 'Gateway' ) + ' (IPv6)' ,
335 advancedColumn1
. push (
337 xtype
: 'proxmoxintegerfield' ,
340 deleteEmpty
: ! me
. isCreate
,
355 advancedColumn1
: advancedColumn1
,
356 advancedColumn2
: advancedColumn2
,
363 me
. down ( 'field[name=iface]' ). setValue ( me
. iface_default
);
366 success : function ( response
, options
) {
367 let data
= response
. result
. data
;
368 if ( data
. type
!== me
. iftype
) {
369 let msg
= "Got unexpected device type" ;
370 Ext
. Msg
. alert ( gettext ( 'Error' ), msg
, function () {
376 me
. isValid (); // trigger validation