]> git.proxmox.com Git - pve-manager.git/blame - www/manager6/qemu/NetworkEdit.js
fix: #1145 enable CT/VM firewall by default on creation via WebUI
[pve-manager.git] / www / manager6 / qemu / NetworkEdit.js
CommitLineData
8487aa12 1Ext.define('PVE.qemu.NetworkInputPanel', {
ef4ef788 2 extend: 'Proxmox.panel.InputPanel',
85806e47 3 alias: 'widget.pveQemuNetworkInputPanel',
c8802a60 4 onlineHelp: 'qm_network_device',
8487aa12
DM
5
6 insideWizard: false,
7
8 onGetValues: function(values) {
9 var me = this;
10
11 me.network.model = values.model;
57f034f6 12 if (values.nonetwork) {
8487aa12 13 return {};
57f034f6 14 } else {
8487aa12
DM
15 me.network.bridge = values.bridge;
16 me.network.tag = values.tag;
17 me.network.firewall = values.firewall;
8487aa12
DM
18 }
19 me.network.macaddr = values.macaddr;
20 me.network.disconnect = values.disconnect;
21 me.network.queues = values.queues;
22
23 if (values.rate) {
24 me.network.rate = values.rate;
25 } else {
26 delete me.network.rate;
27 }
28
29 var params = {};
30
31 params[me.confid] = PVE.Parser.printQemuNetwork(me.network);
32
33 return params;
34 },
35
36 setNetwork: function(confid, data) {
37 var me = this;
38
39 me.confid = confid;
40
41 if (data) {
42 data.networkmode = data.bridge ? 'bridge' : 'nat';
43 } else {
44 data = {};
45 data.networkmode = 'bridge';
46 }
47 me.network = data;
48
49 me.setValues(me.network);
50 },
51
52 setNodename: function(nodename) {
53 var me = this;
54
55 me.bridgesel.setNodename(nodename);
56 },
57
58 initComponent : function() {
59 var me = this;
60
61 me.network = {};
62 me.confid = 'net0';
63
57f034f6
DC
64 me.column1 = [];
65 me.column2 = [];
66
8487aa12
DM
67 me.bridgesel = Ext.create('PVE.form.BridgeSelector', {
68 name: 'bridge',
69 fieldLabel: gettext('Bridge'),
70 nodename: me.nodename,
8487aa12
DM
71 autoSelect: true,
72 allowBlank: false
73 });
74
75 me.column1 = [
8487aa12
DM
76 me.bridgesel,
77 {
78 xtype: 'pveVlanField',
79 name: 'tag',
57f034f6 80 value: ''
8487aa12 81 },
8487aa12 82 {
896c0d50 83 xtype: 'proxmoxcheckbox',
8487aa12 84 fieldLabel: gettext('Firewall'),
b2991833
CE
85 name: 'firewall',
86 checked: (me.insideWizard || me.isCreate)
57f034f6
DC
87 }
88 ];
89
90 me.advancedColumn1 = [
8487aa12 91 {
57f034f6
DC
92 xtype: 'proxmoxcheckbox',
93 fieldLabel: gettext('Disconnect'),
94 name: 'disconnect'
8487aa12
DM
95 }
96 ];
97
98 if (me.insideWizard) {
57f034f6
DC
99 me.column1.unshift({
100 xtype: 'checkbox',
101 name: 'nonetwork',
8487aa12 102 inputValue: 'none',
57f034f6
DC
103 boxLabel: gettext('No network device'),
104 listeners: {
105 change: function(cb, value) {
106 var fields = [
107 'disconnect',
108 'bridge',
109 'tag',
110 'firewall',
111 'model',
112 'macaddr',
113 'rate',
114 'queues'
115 ];
116 fields.forEach(function(fieldname) {
117 me.down('field[name='+fieldname+']').setDisabled(value);
118 });
119 me.down('field[name=bridge]').validate();
120 }
121 }
122 });
123 me.column2.unshift({
124 xtype: 'displayfield'
8487aa12
DM
125 });
126 }
127
57f034f6 128 me.column2.push(
8487aa12 129 {
42902182 130 xtype: 'pveNetworkCardSelector',
8487aa12
DM
131 name: 'model',
132 fieldLabel: gettext('Model'),
39c06c69 133 value: PVE.qemu.OSDefaults.generic.networkCard,
8487aa12
DM
134 allowBlank: false
135 },
136 {
137 xtype: 'textfield',
138 name: 'macaddr',
139 fieldLabel: gettext('MAC address'),
140 vtype: 'MacAddress',
141 allowBlank: true,
142 emptyText: 'auto'
57f034f6
DC
143 });
144 me.advancedColumn2 = [
8487aa12
DM
145 {
146 xtype: 'numberfield',
147 name: 'rate',
148 fieldLabel: gettext('Rate limit') + ' (MB/s)',
149 minValue: 0,
150 maxValue: 10*1024,
151 value: '',
152 emptyText: 'unlimited',
153 allowBlank: true
154 },
155 {
bf96f60d 156 xtype: 'proxmoxintegerfield',
8487aa12 157 name: 'queues',
a1af3e38 158 fieldLabel: 'Multiqueue',
8487aa12
DM
159 minValue: 1,
160 maxValue: 8,
161 value: '',
162 allowBlank: true
8487aa12
DM
163 }
164 ];
165
166 me.callParent();
167 }
168});
169
170Ext.define('PVE.qemu.NetworkEdit', {
9fccc702 171 extend: 'Proxmox.window.Edit',
8487aa12
DM
172
173 isAdd: true,
174
175 initComponent : function() {
176 /*jslint confusion: true */
177
178 var me = this;
179
180 var nodename = me.pveSelNode.data.node;
181 if (!nodename) {
182 throw "no node name specified";
183 }
184
d5e771ce 185 me.isCreate = me.confid ? false : true;
8487aa12
DM
186
187 var ipanel = Ext.create('PVE.qemu.NetworkInputPanel', {
188 confid: me.confid,
b2991833
CE
189 nodename: nodename,
190 isCreate: me.isCreate
8487aa12
DM
191 });
192
193 Ext.applyIf(me, {
194 subject: gettext('Network Device'),
195 items: ipanel
196 });
197
198 me.callParent();
199
200 me.load({
201 success: function(response, options) {
202 var i, confid;
203 me.vmconfig = response.result.data;
d5e771ce 204 if (!me.isCreate) {
8487aa12
DM
205 var value = me.vmconfig[me.confid];
206 var network = PVE.Parser.parseQemuNetwork(me.confid, value);
207 if (!network) {
185a77e5 208 Ext.Msg.alert(gettext('Error'), 'Unable to parse network options');
8487aa12
DM
209 me.close();
210 return;
211 }
212 ipanel.setNetwork(me.confid, network);
213 } else {
214 for (i = 0; i < 100; i++) {
215 confid = 'net' + i.toString();
216 if (!Ext.isDefined(me.vmconfig[confid])) {
217 me.confid = confid;
218 break;
219 }
220 }
221 ipanel.setNetwork(me.confid);
222 }
223 }
224 });
225 }
226});