A vlan on an OVS bridge doesn't require a device

Updates the object model so that a VLAN on top of a bridge
(an OVS int port) doesn't require a physical device to
be set in the object model.
This commit is contained in:
Dan Prince 2014-08-21 13:25:38 -04:00
parent db8deb0a06
commit 3b5e878987
5 changed files with 25 additions and 15 deletions

View File

@ -2,20 +2,24 @@
{
"type": "ovs_bridge",
"name": "br-ctlplane",
"use_dhcp": "true",
"members": [
{
"type": "interface",
"name": "em1"
},
{
"type": "vlan",
"device": "em1",
"vlan_id": 16,
"addresses": [{
"ip_netmask": "192.0.2.1/24"
}],
"routes": [{
"next_hop": "192.0.2.1",
"ip_netmask": "192.0.2.1/24"
}]
}
]
],
"routes": [{
"next_hop": "192.0.2.1",
"ip_netmask": "192.0.2.1/24"
}]
}
]
}

View File

@ -2,15 +2,18 @@ network_config:
-
type: ovs_bridge
name: br-ctlplane
use_dhcp: true
members:
-
type: interface
name: em1
-
type: vlan
device: em1
vlan_id: 16
addresses:
-
ip_netmask: 192.0.2.1/24
routes:
-
next_hop: 192.0.2.1
ip_netmask: 192.0.2.1/24
routes:
-
next_hop: 192.0.2.1
ip_netmask: 192.0.2.1/24

View File

@ -89,8 +89,9 @@ class ENINetConfig(os_net_config.NetConfig):
for i in interface.members:
data += " %s" % i.name
data += "\n"
for i in interface.members:
data += " pre-up ip addr flush dev %s\n" % i.name
for mem in interface.members:
if isinstance(mem, objects.Interface):
data += " pre-up ip addr flush dev %s\n" % mem.name
if interface.primary_interface_name:
mac = utils.interface_mac(interface.primary_interface_name)
data += (" ovs_extra set bridge %s "

View File

@ -61,7 +61,8 @@ class IfcfgNetConfig(os_net_config.NetConfig):
data += "HOTPLUG=no\n"
if isinstance(base_opt, objects.Vlan):
data += "VLAN=yes\n"
data += "PHYSDEV=%s\n" % base_opt.device
if base_opt.device:
data += "PHYSDEV=%s\n" % base_opt.device
if base_opt.ovs_port:
data += "DEVICETYPE=ovs\n"
if base_opt.bridge_name:

View File

@ -205,7 +205,8 @@ class Vlan(_BaseOpts):
@staticmethod
def from_json(json):
device = _get_required_field(json, 'device', 'Vlan')
# A vlan on an OVS bridge won't require a device (OVS Int Port)
device = json.get('device')
vlan_id = _get_required_field(json, 'vlan_id', 'Vlan')
opts = _BaseOpts.base_opts_from_json(json)
return Vlan(device, vlan_id, *opts)