Add support for use of bridges for data ports

Inline with neutron-openvswitch add support for use of existing
linuxbridge's when wiring openvswitch bridges to underlying
network devices.

Change-Id: I24281e8c31d9a140dfdaff308e6e99d3ce162fef
Closes-Bug: 1635067
This commit is contained in:
James Page 2018-04-20 09:18:46 +01:00
parent 1eec99ada2
commit 2441950f44
3 changed files with 34 additions and 1 deletions

View File

@ -28,6 +28,8 @@ from charmhelpers.fetch import (
from charmhelpers.contrib.network.ovs import (
add_bridge,
add_bridge_port,
is_linuxbridge_interface,
add_ovsbridge_linuxbridge,
full_restart
)
from charmhelpers.contrib.hahelpers.cluster import (
@ -723,7 +725,10 @@ def configure_ovs():
for port, _br in portmaps.items():
if _br == br:
add_bridge_port(br, port, promisc=True)
if not is_linuxbridge_interface(port):
add_bridge_port(br, port, promisc=True)
else:
add_ovsbridge_linuxbridge(br, port)
# Ensure this runs so that mtu is applied to data-port interfaces if
# provided.

View File

@ -27,6 +27,11 @@ basepython = python3.5
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
[testenv:py36]
basepython = python3.6
deps = -r{toxinidir}/requirements.txt
-r{toxinidir}/test-requirements.txt
[testenv:pep8]
basepython = python2.7
deps = -r{toxinidir}/requirements.txt

View File

@ -21,6 +21,8 @@ TO_PATCH = [
'log',
'add_bridge',
'add_bridge_port',
'add_ovsbridge_linuxbridge',
'is_linuxbridge_interface',
'headers_package',
'full_restart',
'os_release',
@ -198,6 +200,7 @@ class TestNeutronUtils(CharmTestCase):
@patch('charmhelpers.contrib.openstack.context.config')
def test_configure_ovs_ovs_data_port(self, mock_config):
self.is_linuxbridge_interface.return_value = False
mock_config.side_effect = self.test_config.get
self.config.side_effect = self.test_config.get
self.test_config.set('plugin', 'ovs')
@ -243,6 +246,26 @@ class TestNeutronUtils(CharmTestCase):
call('br1', 'eth0.200', promisc=True)]
self.add_bridge_port.assert_has_calls(calls, any_order=True)
@patch('charmhelpers.contrib.openstack.context.config')
def test_configure_ovs_ovs_data_port_bridge(self, mock_config):
self.is_linuxbridge_interface.return_value = True
mock_config.side_effect = self.test_config.get
self.config.side_effect = self.test_config.get
self.test_config.set('plugin', 'ovs')
self.ExternalPortContext.return_value = \
DummyExternalPortContext(return_value=None)
# Test back-compatibility i.e. port but no bridge (so br-data is
# assumed)
self.test_config.set('data-port', 'br-eth0')
neutron_utils.configure_ovs()
self.add_bridge.assert_has_calls([
call('br-int'),
call('br-ex'),
call('br-data')
])
calls = [call('br-data', 'br-eth0')]
self.add_ovsbridge_linuxbridge.assert_has_calls(calls)
@patch.object(neutron_utils, 'register_configs')
@patch('charmhelpers.contrib.openstack.templating.OSConfigRenderer')
def test_do_openstack_upgrade(self, mock_renderer,