]> git.proxmox.com Git - pve-manager.git/commitdiff
make it easier to set VLAN tags on OVS ports/bond
authorDietmar Maurer <dietmar@proxmox.com>
Mon, 30 Dec 2013 10:04:46 +0000 (11:04 +0100)
committerDietmar Maurer <dietmar@proxmox.com>
Mon, 30 Dec 2013 10:06:34 +0000 (11:06 +0100)
PVE/API2/Network.pm
www/manager/Makefile
www/manager/form/BridgeSelector.js
www/manager/form/VLanField.js [new file with mode: 0644]
www/manager/node/NetworkEdit.js
www/manager/qemu/NetworkEdit.js

index 739ef874f766e212f2291d05b6c5e33ed75952a7..eeaa50839d9eb468f0ff57178851401dbc754474 100644 (file)
@@ -55,6 +55,13 @@ my $confdesc = {
        optional => 1,
        type => 'string', format => 'pve-iface-list',
     },
+    ovs_tag => {
+       description => "Specify a VLan tag (used by OVSPort, OVSIntPort, OVSBond)",
+       optional => 1,
+       type => 'integer',
+       minimum => 1,
+       maximum => 4094,
+    },
     ovs_options => {
        description => "OVS interface options.",
        optional => 1,
@@ -130,7 +137,7 @@ __PACKAGE__->register_method({
            type => {
                description => "Only list specific interface types.",
                type => 'string',
-               enum => $network_type_enum,
+               enum => [ @$network_type_enum, 'any_bridge' ],
                optional => 1,
            },
        },
@@ -158,7 +165,11 @@ __PACKAGE__->register_method({
 
        if ($param->{type}) {
            foreach my $k (keys %$config) {
-               delete $config->{$k} if $param->{type} ne $config->{$k}->{type};
+               my $type = $config->{$k}->{type};
+               my $match =  ($param->{type} eq $type) || (
+                   ($param->{type} eq 'any_bridge') && 
+                   ($type eq 'bridge' || $type eq 'OVSBridge'));
+               delete $config->{$k} if !$match;
            }
        }
 
index 23b0d9981f3d880a4ddc349fd49c0652f96b3cf3..f8cc8198c72e7eef26d4ae1d899c2fbabe457df0 100644 (file)
@@ -19,6 +19,7 @@ JSSRC=                                                        \
        data/DiffStore.js                               \
        data/ObjectStore.js                             \
        data/ResourceStore.js                           \
+       form/VLanField.js                               \
        form/Checkbox.js                                \
        form/TextField.js                               \
        form/RRDTypeSelector.js                         \
index 0bfd3784efdc1f715efaeaad3edc11f0025a91e5..945a2d25d3c1e6c17f44862170e7a6a91bff308f 100644 (file)
@@ -2,7 +2,7 @@ Ext.define('PVE.form.BridgeSelector', {
     extend: 'PVE.form.ComboGrid',
     alias: ['widget.PVE.form.BridgeSelector'],
 
-    bridgeType: 'bridge', // or OVSBridge
+    bridgeType: 'any_bridge', // bridge, OVSBridge or any_bridge
 
     setNodename: function(nodename) {
        var me = this;
diff --git a/www/manager/form/VLanField.js b/www/manager/form/VLanField.js
new file mode 100644 (file)
index 0000000..c699907
--- /dev/null
@@ -0,0 +1,40 @@
+Ext.define('PVE.form.VlanField', {
+    extend: 'Ext.form.field.Number',
+    alias: ['widget.pveVlanField'],
+
+    deleteEmpty: false,
+
+    emptyText: 'no VLAN',
+    
+    fieldLabel: gettext('VLAN Tag'),
+
+    allowBlank: true,
+    
+    getSubmitData: function() {
+        var me = this,
+            data = null,
+            val;
+        if (!me.disabled && me.submitValue) {
+            val = me.getSubmitValue();
+            if (val) {
+                data = {};
+                data[me.getName()] = val;
+            } else if (me.deleteEmpty) {
+               data = {};
+                data['delete'] = me.getName();
+           }
+        }
+        return data;
+    },
+
+    initComponent: function() {
+       var me = this;
+
+       Ext.apply(me, {
+           minValue: 1,
+           maxValue: 4094
+       });
+
+       me.callParent();
+    }
+});
index eae1bc04390614b2ccd05fc3d219c6a50f45e9fa..072bee6f86149a95fa1dc5e8e85fd3a4d3019f48 100644 (file)
@@ -79,6 +79,12 @@ Ext.define('PVE.node.NetworkEdit', {
                bridgeType: 'OVSBridge',
                name: 'ovs_bridge'
            });
+           column2.push({
+               xtype: 'pveVlanField',
+               deleteEmpty: !me.create,
+               name: 'ovs_tag',
+               value: ''
+           });
            column2.push({
                xtype: 'textfield',
                fieldLabel: gettext('OVS options'),
@@ -129,6 +135,12 @@ Ext.define('PVE.node.NetworkEdit', {
                bridgeType: 'OVSBridge',
                name: 'ovs_bridge'
            });
+           column2.push({
+               xtype: 'pveVlanField',
+               deleteEmpty: !me.create,
+               name: 'ovs_tag',
+               value: ''
+           });
            column2.push({
                xtype: 'textfield',
                fieldLabel: gettext('OVS options'),
@@ -166,11 +178,6 @@ Ext.define('PVE.node.NetworkEdit', {
 
        if (me.iftype === 'OVSBond') {
            column1.push([
-               {
-                   xtype: 'textfield',
-                   fieldLabel: gettext('Slaves'),
-                   name: 'ovs_bonds'
-               },
                {
                    xtype: 'bondModeSelector',
                    fieldLabel: gettext('Mode'),
@@ -178,6 +185,11 @@ Ext.define('PVE.node.NetworkEdit', {
                    openvswitch: true,
                    value: me.create ? 'active-backup' : undefined,
                    allowBlank: false
+               },
+               {
+                   xtype: 'textfield',
+                   fieldLabel: gettext('Slaves'),
+                   name: 'ovs_bonds'
                }
            ]);
        } else {
index ca5d59cc28b9467c0a30ab57ce043245e2e524e6..a7bbd64773aea9d67df12d7677d274cbfcce4fba 100644 (file)
@@ -89,15 +89,10 @@ Ext.define('PVE.qemu.NetworkInputPanel', {
            },
            me.bridgesel,
            {
-               xtype: 'numberfield',
+               xtype: 'pveVlanField',
                name: 'tag',
-               minValue: 1,
-               maxValue: 4094,
                value: '',
-               emptyText: 'no VLAN',
-               fieldLabel: gettext('VLAN Tag'),
-               labelAlign: 'right',
-               allowBlank: true
+               labelAlign: 'right'
            },
            {
                xtype: 'radiofield',