Add support for ovs_extra.
Adds support for ovs_extra to the OVS Bridge and OVS bond objects.
This commit is contained in:
@@ -47,6 +47,7 @@ class ENINetConfig(os_net_config.NetConfig):
|
||||
|
||||
def _add_common(self, interface, static_addr=None):
|
||||
|
||||
ovs_extra = []
|
||||
data = ""
|
||||
address_data = ""
|
||||
if static_addr:
|
||||
@@ -94,9 +95,9 @@ class ENINetConfig(os_net_config.NetConfig):
|
||||
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 "
|
||||
"other-config:hwaddr=%s\n"
|
||||
% (interface.name, mac))
|
||||
ovs_extra.append ("set bridge %s other-config:hwaddr=%s" %
|
||||
(interface.name, mac))
|
||||
ovs_extra.extend(interface.ovs_extra)
|
||||
elif interface.ovs_port:
|
||||
if isinstance(interface, objects.Vlan):
|
||||
data += "auto vlan%i\n" % interface.vlan_id
|
||||
@@ -127,6 +128,10 @@ class ENINetConfig(os_net_config.NetConfig):
|
||||
data += address_data
|
||||
if interface.mtu != 1500:
|
||||
data += " mtu %i\n" % interface.mtu
|
||||
|
||||
if ovs_extra:
|
||||
data += " ovs_extra %s\n" % " -- ".join(ovs_extra)
|
||||
|
||||
return data
|
||||
|
||||
def add_interface(self, interface):
|
||||
|
||||
@@ -56,6 +56,9 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
||||
logger.info('Ifcfg net config provider created.')
|
||||
|
||||
def _add_common(self, base_opt):
|
||||
|
||||
ovs_extra = []
|
||||
|
||||
data = "DEVICE=%s\n" % base_opt.name
|
||||
data += "ONBOOT=yes\n"
|
||||
data += "HOTPLUG=no\n"
|
||||
@@ -83,10 +86,11 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
||||
data += ("OVSDHCPINTERFACES=\"%s\"\n" % " ".join(members))
|
||||
if base_opt.primary_interface_name:
|
||||
mac = utils.interface_mac(base_opt.primary_interface_name)
|
||||
data += ("OVS_EXTRA=\"set bridge %s "
|
||||
"other-config:hwaddr=%s\"\n" % (base_opt.name, mac))
|
||||
ovs_extra.append("set bridge %s other-config:hwaddr=%s" %
|
||||
(base_opt.name, mac))
|
||||
if base_opt.ovs_options:
|
||||
data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options
|
||||
ovs_extra.extend(base_opt.ovs_extra)
|
||||
elif isinstance(base_opt, objects.OvsBond):
|
||||
data += "DEVICETYPE=ovs\n"
|
||||
data += "TYPE=OVSBond\n"
|
||||
@@ -97,6 +101,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
||||
data += ("BOND_IFACES=\"%s\"\n" % " ".join(members))
|
||||
if base_opt.ovs_options:
|
||||
data += "OVS_OPTIONS=\"%s\"\n" % base_opt.ovs_options
|
||||
ovs_extra.extend(base_opt.ovs_extra)
|
||||
else:
|
||||
if base_opt.use_dhcp:
|
||||
data += "BOOTPROTO=dhcp\n"
|
||||
@@ -124,6 +129,8 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
||||
first_v6 = v6_addresses[0]
|
||||
data += "IPV6_AUTOCONF=no\n"
|
||||
data += "IPV6ADDR=%s\n" % first_v6.ip
|
||||
if ovs_extra:
|
||||
data += "OVS_EXTRA=\"%s\"\n" % " -- ".join(ovs_extra)
|
||||
return data
|
||||
|
||||
def _add_routes(self, interface_name, routes=[]):
|
||||
|
||||
@@ -216,11 +216,13 @@ class OvsBridge(_BaseOpts):
|
||||
"""Base class for OVS bridges."""
|
||||
|
||||
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=[],
|
||||
routes=[], mtu=1500, members=[], ovs_options=None):
|
||||
routes=[], mtu=1500, members=[], ovs_options=None,
|
||||
ovs_extra=[]):
|
||||
super(OvsBridge, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
|
||||
routes, mtu, False)
|
||||
self.members = members
|
||||
self.ovs_options = ovs_options
|
||||
self.ovs_extra = ovs_extra
|
||||
for member in self.members:
|
||||
member.bridge_name = name
|
||||
member.ovs_port = True
|
||||
@@ -238,6 +240,7 @@ class OvsBridge(_BaseOpts):
|
||||
name = _get_required_field(json, 'name', 'OvsBridge')
|
||||
opts = _BaseOpts.base_opts_from_json(json, include_primary=False)
|
||||
ovs_options = json.get('ovs_options')
|
||||
ovs_extra = json.get('ovs_extra', [])
|
||||
members = []
|
||||
|
||||
# members
|
||||
@@ -250,7 +253,8 @@ class OvsBridge(_BaseOpts):
|
||||
msg = 'Members must be a list.'
|
||||
raise InvalidConfigException(msg)
|
||||
|
||||
return OvsBridge(name, *opts, members=members, ovs_options=ovs_options)
|
||||
return OvsBridge(name, *opts, members=members, ovs_options=ovs_options,
|
||||
ovs_extra=ovs_extra)
|
||||
|
||||
|
||||
class OvsBond(_BaseOpts):
|
||||
@@ -258,11 +262,12 @@ class OvsBond(_BaseOpts):
|
||||
|
||||
def __init__(self, name, use_dhcp=False, use_dhcpv6=False, addresses=[],
|
||||
routes=[], mtu=1500, primary=False, members=[],
|
||||
ovs_options=None):
|
||||
ovs_options=None, ovs_extra=[]):
|
||||
super(OvsBond, self).__init__(name, use_dhcp, use_dhcpv6, addresses,
|
||||
routes, mtu, primary)
|
||||
self.members = members
|
||||
self.ovs_options = ovs_options
|
||||
self.ovs_extra = ovs_extra
|
||||
for member in self.members:
|
||||
if member.primary:
|
||||
if self.primary_interface_name:
|
||||
@@ -278,6 +283,7 @@ class OvsBond(_BaseOpts):
|
||||
name = _get_required_field(json, 'name', 'OvsBond')
|
||||
opts = _BaseOpts.base_opts_from_json(json)
|
||||
ovs_options = json.get('ovs_options')
|
||||
ovs_extra = json.get('ovs_extra', [])
|
||||
members = []
|
||||
|
||||
# members
|
||||
@@ -290,4 +296,5 @@ class OvsBond(_BaseOpts):
|
||||
msg = 'Members must be a list.'
|
||||
raise InvalidConfigException(msg)
|
||||
|
||||
return OvsBond(name, *opts, members=members, ovs_options=ovs_options)
|
||||
return OvsBond(name, *opts, members=members, ovs_options=ovs_options,
|
||||
ovs_extra=ovs_extra)
|
||||
|
||||
@@ -56,6 +56,12 @@ iface br0 inet dhcp
|
||||
_OVS_BRIDGE_DHCP_PRIMARY_INTERFACE = _OVS_BRIDGE_DHCP + \
|
||||
" ovs_extra set bridge br0 other-config:hwaddr=a1:b2:c3:d4:e5\n"
|
||||
|
||||
|
||||
_OVS_BRIDGE_DHCP_OVS_EXTRA = _OVS_BRIDGE_DHCP + \
|
||||
" ovs_extra set bridge br0 other-config:hwaddr=a1:b2:c3:d4:e5" + \
|
||||
" -- br-set-external-id br-ctlplane bridge-id br-ctlplane\n"
|
||||
|
||||
|
||||
_VLAN_NO_IP = """auto vlan5
|
||||
iface vlan5 inet manual
|
||||
vlan-raw-device eth0
|
||||
@@ -164,6 +170,23 @@ class TestENINetConfig(base.TestCase):
|
||||
self.assertEqual(_OVS_BRIDGE_DHCP_PRIMARY_INTERFACE,
|
||||
self.provider.bridges['br0'])
|
||||
|
||||
def test_network_ovs_bridge_with_dhcp_and_primary_with_ovs_extra(self):
|
||||
|
||||
def test_interface_mac(name):
|
||||
return "a1:b2:c3:d4:e5"
|
||||
self.stubs.Set(utils, 'interface_mac', test_interface_mac)
|
||||
|
||||
interface = objects.Interface(self.if_name, primary=True)
|
||||
ovs_extra = "br-set-external-id br-ctlplane bridge-id br-ctlplane"
|
||||
bridge = objects.OvsBridge('br0', use_dhcp=True,
|
||||
members=[interface],
|
||||
ovs_extra=[ovs_extra])
|
||||
self.provider.add_bridge(bridge)
|
||||
self.provider.add_interface(interface)
|
||||
self.assertEqual(_OVS_PORT_IFACE, self.get_interface_config())
|
||||
self.assertEqual(_OVS_BRIDGE_DHCP_OVS_EXTRA,
|
||||
self.provider.bridges['br0'])
|
||||
|
||||
def test_vlan(self):
|
||||
vlan = objects.Vlan('eth0', 5)
|
||||
self.provider.add_vlan(vlan)
|
||||
|
||||
@@ -69,6 +69,12 @@ OVSDHCPINTERFACES="em1"
|
||||
_OVS_BRIDGE_DHCP_PRIMARY_INTERFACE = _OVS_BRIDGE_DHCP + \
|
||||
"OVS_EXTRA=\"set bridge br-ctlplane other-config:hwaddr=a1:b2:c3:d4:e5\"\n"
|
||||
|
||||
|
||||
_OVS_BRIDGE_DHCP_OVS_EXTRA = _OVS_BRIDGE_DHCP + \
|
||||
"OVS_EXTRA=\"set bridge br-ctlplane other-config:hwaddr=a1:b2:c3:d4:e5" + \
|
||||
" -- br-set-external-id br-ctlplane bridge-id br-ctlplane\"\n"
|
||||
|
||||
|
||||
_BASE_VLAN = """DEVICE=vlan5
|
||||
ONBOOT=yes
|
||||
HOTPLUG=no
|
||||
@@ -175,6 +181,24 @@ class TestIfcfgNetConfig(base.TestCase):
|
||||
self.assertEqual(_OVS_BRIDGE_DHCP_PRIMARY_INTERFACE,
|
||||
self.provider.bridges['br-ctlplane'])
|
||||
|
||||
|
||||
def test_network_ovs_bridge_with_dhcp_primary_interface_with_extra(self):
|
||||
def test_interface_mac(name):
|
||||
return "a1:b2:c3:d4:e5"
|
||||
self.stubs.Set(utils, 'interface_mac', test_interface_mac)
|
||||
|
||||
interface = objects.Interface('em1', primary=True)
|
||||
ovs_extra = "br-set-external-id br-ctlplane bridge-id br-ctlplane"
|
||||
bridge = objects.OvsBridge('br-ctlplane', use_dhcp=True,
|
||||
members=[interface],
|
||||
ovs_extra=[ovs_extra])
|
||||
self.provider.add_interface(interface)
|
||||
self.provider.add_bridge(bridge)
|
||||
self.assertEqual(_OVS_INTERFACE, self.get_interface_config())
|
||||
self.assertEqual(_OVS_BRIDGE_DHCP_OVS_EXTRA,
|
||||
self.provider.bridges['br-ctlplane'])
|
||||
|
||||
|
||||
def test_add_vlan(self):
|
||||
vlan = objects.Vlan('em1', 5)
|
||||
self.provider.add_vlan(vlan)
|
||||
|
||||
Reference in New Issue
Block a user