Merge "Restart Openvswitch after adding DPDK ports" into stable/newton
This commit is contained in:
commit
3cb1fc32f4
|
@ -681,6 +681,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
|||
nfvswitch_interfaces = [] # nfvswitch physical interfaces
|
||||
nfvswitch_internal_ifaces = [] # nfvswitch internal/management ports
|
||||
stop_dhclient_interfaces = []
|
||||
ovs_needs_restart = False
|
||||
|
||||
for interface_name, iface_data in self.interface_data.iteritems():
|
||||
route_data = self.route_data.get(interface_name, '')
|
||||
|
@ -706,6 +707,11 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
|||
update_files[route6_path] = route6_data
|
||||
if "BOOTPROTO=dhcp" not in iface_data:
|
||||
stop_dhclient_interfaces.append(interface_name)
|
||||
# Openvswitch needs to be restarted when OVSDPDKPort or
|
||||
# OVSDPDKBond is added
|
||||
if "OVSDPDK" in iface_data:
|
||||
ovs_needs_restart = True
|
||||
|
||||
else:
|
||||
logger.info('No changes required for interface: %s' %
|
||||
interface_name)
|
||||
|
@ -913,6 +919,16 @@ class IfcfgNetConfig(os_net_config.NetConfig):
|
|||
for oldname, newname in self.renamed_interfaces.iteritems():
|
||||
self.ifrename(oldname, newname)
|
||||
|
||||
# DPDK initialization is done before running os-net-config, to make
|
||||
# the DPDK ports available when enabled. DPDK Hotplug support is
|
||||
# supported only in OvS 2.7 version. Until then, OvS needs to be
|
||||
# restarted after adding a DPDK port. This change will be removed on
|
||||
# migration to OvS 2.7 where DPDK Hotplug support is available.
|
||||
if ovs_needs_restart:
|
||||
msg = "Restart openvswitch"
|
||||
self.execute(msg, '/usr/bin/systemctl',
|
||||
'restart', 'openvswitch')
|
||||
|
||||
for location, data in update_files.iteritems():
|
||||
self.write_config(location, data)
|
||||
|
||||
|
|
|
@ -20,6 +20,7 @@ import tempfile
|
|||
from oslo_concurrency import processutils
|
||||
|
||||
from os_net_config import impl_ifcfg
|
||||
from os_net_config import NetConfig
|
||||
from os_net_config import objects
|
||||
from os_net_config.tests import base
|
||||
from os_net_config import utils
|
||||
|
@ -1120,3 +1121,32 @@ class TestIfcfgNetConfigApply(base.TestCase):
|
|||
self.provider.apply(cleanup=True)
|
||||
self.assertTrue(os.path.exists(tmp_lo_file))
|
||||
os.remove(tmp_lo_file)
|
||||
|
||||
def test_ovs_restart_called(self):
|
||||
interface = objects.Interface('em1')
|
||||
dpdk_port = objects.OvsDpdkPort('dpdk0', members=[interface])
|
||||
execute_strings = []
|
||||
|
||||
def test_execute(*args, **kwargs):
|
||||
execute_strings.append(args[1])
|
||||
pass
|
||||
self.stubs.Set(NetConfig, 'execute', test_execute)
|
||||
|
||||
self.provider.noop = True
|
||||
self.provider.add_ovs_dpdk_port(dpdk_port)
|
||||
self.provider.apply()
|
||||
self.assertIn('Restart openvswitch', execute_strings)
|
||||
|
||||
def test_ovs_restart_not_called(self):
|
||||
interface = objects.Interface('em1')
|
||||
execute_strings = []
|
||||
|
||||
def test_execute(*args, **kwargs):
|
||||
execute_strings.append(args[1])
|
||||
pass
|
||||
self.stubs.Set(NetConfig, 'execute', test_execute)
|
||||
|
||||
self.provider.noop = True
|
||||
self.provider.add_interface(interface)
|
||||
self.provider.apply()
|
||||
self.assertNotIn('Restart openvswitch', execute_strings)
|
||||
|
|
Loading…
Reference in New Issue