]>
git.proxmox.com Git - pve-manager.git/blob - www/manager6/lxc/Network.js
1 Ext
.define('PVE.lxc.NetworkInputPanel', {
2 extend
: 'PVE.panel.InputPanel',
3 alias
: 'widget.pveLxcNetworkInputPanel',
7 setNodename: function(nodename
) {
10 if (!nodename
|| (me
.nodename
=== nodename
)) {
14 me
.nodename
= nodename
;
16 var bridgesel
= me
.query("[isFormField][name=bridge]")[0];
17 bridgesel
.setNodename(nodename
);
20 onGetValues: function(values
) {
37 if (values
['ipv6mode'] !== 'static')
38 values
['ip6'] = values
['ipv6mode'];
39 if (values
['ipv4mode'] !== 'static')
40 values
['ip'] = values
['ipv4mode']
41 newdata
[id
] = PVE
.Parser
.printLxcNetwork(values
);
45 initComponent : function() {
49 throw "no dataCache specified";
54 if (me
.insideWizard
) {
61 throw "no interface name specified";
63 if (!me
.dataCache
[me
.ifname
]) {
64 throw "no such interface '" + me
.ifname
+ "'";
67 cdata
= PVE
.Parser
.parseLxcNetwork(me
.dataCache
[me
.ifname
]);
71 for (i
= 0; i
< 10; i
++) {
72 netlist
.push({ "name": "net" + i
});
75 var netliststore
= Ext
.create('Ext.data.Store', {
82 fieldLabel
: gettext('ID'),
91 validator: function(value
) {
92 if (me
.create
&& me
.dataCache
[value
]) {
93 return "Network ID already in use";
104 height
: 22, // hack: set same height as text fields
105 fieldLabel
: gettext('Name') + ' (i.e. eth0)',
108 validator: function(value
) {
110 Ext
.Object
.each(me
.dataCache
, function(key
, netstr
) {
111 if (!key
.match(/^net\d+/) || key
=== me
.ifname
) {
114 var net
= PVE
.Parser
.parseLxcNetwork(netstr
);
115 if (net
.name
=== value
) {
116 result
= "interface name already in use";
126 fieldLabel
: gettext('MAC address'),
129 allowBlank
: me
.create
,
133 xtype
: 'PVE.form.BridgeSelector',
135 nodename
: me
.nodename
,
136 fieldLabel
: gettext('Bridge'),
141 xtype
: 'pveVlanField',
146 xtype
: 'pvecheckbox',
147 fieldLabel
: gettext('Firewall'),
149 checked
: cdata
.firewall
,
153 var dhcp4
= (cdata
.ip
=== 'dhcp');
159 var auto6
= (cdata
.ip6
=== 'auto');
160 var dhcp6
= (cdata
.ip6
=== 'dhcp');
161 if (auto6
|| dhcp6
) {
174 height
: 22, // hack: set same height as text fields
178 text
: gettext('IPv4') + ':',
182 boxLabel
: gettext('Static'),
184 inputValue
: 'static',
188 change: function(cb
, value
) {
189 me
.down('field[name=ip]').setDisabled(!value
);
190 me
.down('field[name=gw]').setDisabled(!value
);
196 boxLabel
: gettext('DHCP'),
207 vtype
: 'IPCIDRAddress',
210 fieldLabel
: gettext('IPv4/CIDR')
218 fieldLabel
: gettext('Gateway') + ' (' + gettext('IPv4') +')',
219 margin
: '0 0 3 0' // override bottom margin to account for the menuseparator
222 xtype
: 'menuseparator',
233 height
: 22, // hack: set same height as text fields
237 text
: gettext('IPv6') + ':',
241 boxLabel
: gettext('Static'),
243 inputValue
: 'static',
244 checked
: !(auto6
|| dhcp6
),
247 change: function(cb
, value
) {
248 me
.down('field[name=ip6]').setDisabled(!value
);
249 me
.down('field[name=gw6]').setDisabled(!value
);
255 boxLabel
: gettext('DHCP'),
263 boxLabel
: gettext('SLAAC'),
275 vtype
: 'IP6CIDRAddress',
276 disabled
: (dhcp6
|| auto6
),
277 fieldLabel
: gettext('IPv6/CIDR')
284 disabled
: (dhcp6
|| auto6
),
285 fieldLabel
: gettext('Gateway') + ' (' + gettext('IPv6') +')'
293 /*jslint confusion: true */
294 Ext
.define('PVE.lxc.NetworkEdit', {
295 extend
: 'PVE.window.Edit',
299 initComponent : function() {
303 throw "no dataCache specified";
307 throw "no node name specified";
310 var ipanel
= Ext
.create('PVE.lxc.NetworkInputPanel', {
312 nodename
: me
.nodename
,
313 dataCache
: me
.dataCache
,
318 subject
: gettext('Network Device') + ' (veth)',
319 digest
: me
.dataCache
.digest
,
327 Ext
.define('PVE.lxc.NetworkView', {
328 extend
: 'Ext.grid.GridPanel',
329 alias
: ['widget.pveLxcNetworkView'],
331 dataCache
: {}, // used to store result of last load
336 PVE
.Utils
.setErrorMask(me
, true);
338 PVE
.Utils
.API2Request({
340 failure: function(response
, opts
) {
341 PVE
.Utils
.setErrorMask(me
, gettext('Error') + ': ' + response
.htmlStatus
);
343 success: function(response
, opts
) {
344 PVE
.Utils
.setErrorMask(me
, false);
345 var result
= Ext
.decode(response
.responseText
);
346 var data
= result
.data
|| {};
349 Ext
.Object
.each(data
, function(key
, value
) {
350 if (!key
.match(/^net\d+/)) {
353 var net
= PVE
.Parser
.parseLxcNetwork(value
);
357 me
.store
.loadData(records
);
362 initComponent : function() {
365 var nodename
= me
.pveSelNode
.data
.node
;
367 throw "no node name specified";
370 var vmid
= me
.pveSelNode
.data
.vmid
;
372 throw "no VM ID specified";
375 var caps
= Ext
.state
.Manager
.get('GuiCap');
377 me
.url
= '/nodes/' + nodename
+ '/lxc/' + vmid
+ '/config';
379 var store
= new Ext
.data
.Store({
380 model
: 'pve-lxc-network',
389 var sm
= Ext
.create('Ext.selection.RowModel', {});
391 var remove_btn
= new PVE
.button
.Button({
392 text
: gettext('Remove'),
395 enableFn: function(rec
) {
396 return !!caps
.vms
['VM.Config.Network'];
398 confirmMsg: function (rec
) {
399 return Ext
.String
.format(gettext('Are you sure you want to remove entry {0}'),
400 "'" + rec
.data
.id
+ "'");
402 handler: function(btn
, event
, rec
) {
403 PVE
.Utils
.API2Request({
407 params
: { 'delete': rec
.data
.id
, digest
: me
.dataCache
.digest
},
408 callback: function() {
411 failure: function (response
, opts
) {
412 Ext
.Msg
.alert(gettext('Error'), response
.htmlStatus
);
418 var run_editor = function() {
419 var rec
= sm
.getSelection()[0];
424 if (!caps
.vms
['VM.Config.Network']) {
428 var win
= Ext
.create('PVE.lxc.NetworkEdit', {
431 dataCache
: me
.dataCache
,
434 win
.on('destroy', me
.load
, me
);
438 var edit_btn
= new PVE
.button
.Button({
439 text
: gettext('Edit'),
442 enableFn: function(rec
) {
443 if (!caps
.vms
['VM.Config.Network']) {
457 text
: gettext('Add'),
458 disabled
: !caps
.vms
['VM.Config.Network'],
459 handler: function() {
460 var win
= Ext
.create('PVE.lxc.NetworkEdit', {
464 dataCache
: me
.dataCache
466 win
.on('destroy', me
.load
, me
);
475 header
: gettext('ID'),
480 header
: gettext('Name'),
485 header
: gettext('Bridge'),
490 header
: gettext('Firewall'),
492 dataIndex
: 'firewall',
493 renderer
: PVE
.Utils
.format_boolean
496 header
: gettext('VLAN Tag'),
501 header
: gettext('MAC address'),
506 header
: gettext('IP address'),
509 renderer: function(value
, metaData
, rec
) {
510 if (rec
.data
.ip
&& rec
.data
.ip6
) {
511 return rec
.data
.ip
+ "<br>" + rec
.data
.ip6
;
512 } else if (rec
.data
.ip6
) {
520 header
: gettext('Gateway'),
523 renderer: function(value
, metaData
, rec
) {
524 if (rec
.data
.gw
&& rec
.data
.gw6
) {
525 return rec
.data
.gw
+ "<br>" + rec
.data
.gw6
;
526 } else if (rec
.data
.gw6
) {
536 itemdblclick
: run_editor
546 Ext
.define('pve-lxc-network', {
547 extend
: "Ext.data.Model",
548 proxy
: { type
: 'memory' },
549 fields
: [ 'id', 'name', 'hwaddr', 'bridge',
550 'ip', 'gw', 'ip6', 'gw6', 'tag', 'firewall' ]