From f3bac8b95c50f6b2de9dd86127a0d50dda3b7d1e Mon Sep 17 00:00:00 2001 From: Jaganathan Palanisamy Date: Thu, 19 Jan 2017 03:00:33 -0500 Subject: [PATCH] Network service is failing with DPDK Network service is failing and not started when interface is binded with dpdk driver and interface config file is available. In such case, removing config file for the interface which is binded with dpdk driver. Change-Id: Id445fbfe7abdd54c2ea522960224c7f0e412dd30 Closes-Bug: #1657661 (cherry picked from commit d1db332350a894e48a74a3b6b658d3d3c8d13c4a) --- os_net_config/impl_ifcfg.py | 11 +++++++++++ os_net_config/tests/test_impl_ifcfg.py | 7 +++++++ 2 files changed, 18 insertions(+) diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py index 70eca4c5..83180230 100644 --- a/os_net_config/impl_ifcfg.py +++ b/os_net_config/impl_ifcfg.py @@ -34,6 +34,13 @@ def ifcfg_config_path(name): return "/etc/sysconfig/network-scripts/ifcfg-%s" % name +def remove_ifcfg_config(ifname): + if re.match('[\w-]+$', ifname): + ifcfg_file = ifcfg_config_path(ifname) + if os.path.exists(ifcfg_file): + os.remove(ifcfg_file) + + # NOTE(dprince): added here for testability def bridge_config_path(name): return ifcfg_config_path(name) @@ -574,6 +581,8 @@ class IfcfgNetConfig(os_net_config.NetConfig): # Bind the dpdk interface utils.bind_dpdk_interfaces(ifname, ovs_dpdk_port.driver, self.noop) + if not self.noop: + remove_ifcfg_config(ifname) data = self._add_common(ovs_dpdk_port) logger.debug('ovs dpdk port data: %s' % data) @@ -592,6 +601,8 @@ class IfcfgNetConfig(os_net_config.NetConfig): # checks are added at the object creation stage. ifname = dpdk_port.members[0].name utils.bind_dpdk_interfaces(ifname, dpdk_port.driver, self.noop) + if not self.noop: + remove_ifcfg_config(ifname) data = self._add_common(ovs_dpdk_bond) logger.debug('ovs dpdk bond data: %s' % data) diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py index 7968d7b5..d235d37f 100644 --- a/os_net_config/tests/test_impl_ifcfg.py +++ b/os_net_config/tests/test_impl_ifcfg.py @@ -894,6 +894,13 @@ class TestIfcfgNetConfigApply(base.TestCase): return self.temp_ifcfg_file.name self.stubs.Set(impl_ifcfg, 'ifcfg_config_path', test_ifcfg_path) + def test_remove_ifcfg_config(name): + ifcfg_file = self.temp_ifcfg_file.name + if os.path.exists(ifcfg_file): + os.remove(ifcfg_file) + self.stubs.Set(impl_ifcfg, 'remove_ifcfg_config', + test_remove_ifcfg_config) + def test_routes_path(name): return self.temp_route_file.name self.stubs.Set(impl_ifcfg, 'route_config_path', test_routes_path)