]>
Commit | Line | Data |
---|---|---|
aff192e6 DM |
1 | Ext.define('PVE.node.NetworkEdit', { |
2 | extend: 'PVE.window.Edit', | |
3 | alias: ['widget.pveNodeNetworkEdit'], | |
4 | ||
5 | initComponent : function() { | |
6 | var me = this; | |
7 | ||
8 | var nodename = me.pveSelNode.data.node; | |
9 | if (!nodename) { | |
10 | throw "no node name specified"; | |
11 | } | |
12 | ||
13 | if (!me.iftype) { | |
14 | throw "no network device type specified"; | |
15 | } | |
16 | ||
17 | me.create = !me.iface; | |
18 | ||
aff192e6 DM |
19 | var iface_vtype; |
20 | ||
e4d5bf72 DM |
21 | if (me.iftype === 'bridge') { |
22 | me.subject = "Bridge"; | |
23 | iface_vtype = 'BridgeName'; | |
24 | } else if (me.iftype === 'bond') { | |
25 | me.subject = "Bond"; | |
26 | iface_vtype = 'BondName'; | |
aff192e6 | 27 | } else { |
e4d5bf72 | 28 | throw "no known network device type specified"; |
aff192e6 DM |
29 | } |
30 | ||
31 | var column2 = [ | |
32 | { | |
33 | xtype: 'pvecheckbox', | |
34 | fieldLabel: 'Autostart', | |
35 | name: 'autostart', | |
36 | uncheckedValue: 0, | |
37 | checked: me.create ? true : undefined | |
38 | } | |
39 | ]; | |
40 | ||
41 | if (me.iftype === 'bridge') { | |
42 | column2.push({ | |
43 | xtype: 'textfield', | |
44 | fieldLabel: 'Bridge ports', | |
45 | name: 'bridge_ports' | |
46 | }); | |
47 | } else if (me.iftype === 'bond') { | |
48 | column2.push({ | |
49 | xtype: 'textfield', | |
50 | fieldLabel: 'Slaves', | |
51 | name: 'slaves' | |
52 | }); | |
53 | column2.push({ | |
54 | xtype: 'bondModeSelector', | |
55 | fieldLabel: 'Mode', | |
56 | name: 'bond_mode', | |
57 | value: me.create ? 'balance-rr' : undefined, | |
58 | allowBlank: false | |
59 | }); | |
60 | } | |
61 | ||
62 | var url; | |
63 | var method; | |
64 | ||
65 | if (me.create) { | |
66 | url = "/api2/extjs/nodes/" + nodename + "/network"; | |
67 | method = 'POST'; | |
68 | } else { | |
69 | url = "/api2/extjs/nodes/" + nodename + "/network/" + me.iface; | |
70 | method = 'PUT'; | |
71 | } | |
72 | ||
73 | var column1 = [ | |
74 | { | |
75 | xtype: me.create ? 'textfield' : 'displayfield', | |
e4d5bf72 | 76 | fieldLabel: gettext('Name'), |
aff192e6 DM |
77 | height: 22, // hack: set same height as text fields |
78 | name: 'iface', | |
79 | value: me.iface, | |
80 | vtype: iface_vtype, | |
81 | allowBlank: false | |
82 | }, | |
83 | { | |
84 | xtype: 'pvetextfield', | |
85 | deleteEmpty: !me.create, | |
e4d5bf72 | 86 | fieldLabel: gettext('IP address'), |
aff192e6 DM |
87 | vtype: 'IPAddress', |
88 | name: 'address' | |
89 | }, | |
90 | { | |
91 | xtype: 'pvetextfield', | |
92 | deleteEmpty: !me.create, | |
e4d5bf72 | 93 | fieldLabel: gettext('Subnet mask'), |
aff192e6 DM |
94 | vtype: 'IPAddress', |
95 | name: 'netmask', | |
96 | validator: function(value) { | |
97 | /*jslint confusion: true */ | |
98 | if (!me.items) { | |
99 | return true; | |
100 | } | |
101 | var address = me.down('field[name=address]').getValue(); | |
102 | if (value !== '') { | |
103 | if (address === '') { | |
104 | return "Subnet mask requires option 'IP address'"; | |
105 | } | |
106 | } else { | |
107 | if (address !== '') { | |
108 | return "Option 'IP address' requires a subnet mask"; | |
109 | } | |
110 | } | |
111 | ||
112 | return true; | |
113 | } | |
114 | }, | |
115 | { | |
116 | xtype: 'pvetextfield', | |
117 | deleteEmpty: !me.create, | |
118 | fieldLabel: 'Gateway', | |
119 | vtype: 'IPAddress', | |
120 | name: 'gateway' | |
121 | } | |
122 | ]; | |
123 | ||
124 | Ext.applyIf(me, { | |
aff192e6 DM |
125 | url: url, |
126 | method: method, | |
127 | items: { | |
128 | xtype: 'inputpanel', | |
129 | column1: column1, | |
130 | column2: column2 | |
131 | } | |
132 | }); | |
133 | ||
134 | me.callParent(); | |
135 | ||
136 | if (me.create) { | |
137 | me.down('field[name=iface]').setValue(me.iface_default); | |
138 | } else { | |
139 | me.load({ | |
140 | success: function(response, options) { | |
141 | var data = response.result.data; | |
142 | if (data.type !== me.iftype) { | |
143 | var msg = "Got unexpected device type"; | |
e4d5bf72 | 144 | Ext.Msg.alert(gettext('Error'), msg, function() { |
aff192e6 DM |
145 | me.close(); |
146 | }); | |
147 | return; | |
148 | } | |
149 | me.setValues(data); | |
e4d5bf72 | 150 | me.isValid(); // trigger validation |
aff192e6 DM |
151 | } |
152 | }); | |
153 | } | |
154 | } | |
155 | }); |