aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2016-03-25 17:35:48 +0000
committerGerrit Code Review <review@openstack.org>2016-03-25 17:35:48 +0000
commit4da6d609bbcd25438a41de87111aed3180a10007 (patch)
treeaa91b203dcd86f5726325e3a3a6c9f70d83b6703
parent5d8bb4c6a1baee3f9e677f25086eadebef167d9e (diff)
parentbfc72bd5ce838dad03e41e44cae661074552cb39 (diff)
Merge "Fix order-of-operations bug in os-net-config restart_interfaces"
-rw-r--r--os_net_config/impl_ifcfg.py46
-rw-r--r--os_net_config/tests/test_impl_ifcfg.py23
2 files changed, 57 insertions, 12 deletions
diff --git a/os_net_config/impl_ifcfg.py b/os_net_config/impl_ifcfg.py
index 0fe6ae1..1142a6e 100644
--- a/os_net_config/impl_ifcfg.py
+++ b/os_net_config/impl_ifcfg.py
@@ -58,6 +58,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
super(IfcfgNetConfig, self).__init__(noop, root_dir)
self.interface_data = {}
self.ivsinterface_data = {}
+ self.vlan_data = {}
self.route_data = {}
self.route6_data = {}
self.bridge_data = {}
@@ -281,7 +282,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
logger.info('adding vlan: %s' % vlan.name)
data = self._add_common(vlan)
logger.debug('vlan data: %s' % data)
- self.interface_data[vlan.name] = data
+ self.vlan_data[vlan.name] = data
if vlan.routes:
self._add_routes(vlan.name, vlan.routes)
@@ -353,7 +354,6 @@ class IfcfgNetConfig(os_net_config.NetConfig):
logger.info('adding linux bond: %s' % bond.name)
data = self._add_common(bond)
logger.debug('bond data: %s' % data)
- self.interface_data[bond.name] = data
self.linuxbond_data[bond.name] = data
if bond.routes:
self._add_routes(bond.name, bond.routes)
@@ -395,7 +395,9 @@ class IfcfgNetConfig(os_net_config.NetConfig):
"""
logger.info('applying network configs...')
restart_interfaces = []
+ restart_vlans = []
restart_bridges = []
+ restart_linux_bonds = []
update_files = {}
all_file_names = []
ivs_uplinks = [] # ivs physical uplinks
@@ -409,6 +411,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
route6_path = self.root_dir + route6_config_path(interface_name)
all_file_names.append(interface_path)
all_file_names.append(route_path)
+ all_file_names.append(route6_path)
if "IVS_BRIDGE" in iface_data:
ivs_uplinks.append(interface_name)
all_file_names.append(route6_path)
@@ -426,10 +429,13 @@ class IfcfgNetConfig(os_net_config.NetConfig):
for interface_name, iface_data in self.ivsinterface_data.iteritems():
route_data = self.route_data.get(interface_name, '')
+ route6_data = self.route6_data.get(interface_name, '')
interface_path = self.root_dir + ifcfg_config_path(interface_name)
route_path = self.root_dir + route_config_path(interface_name)
+ route6_path = self.root_dir + route6_config_path(interface_name)
all_file_names.append(interface_path)
all_file_names.append(route_path)
+ all_file_names.append(route6_path)
ivs_interfaces.append(interface_name)
if (utils.diff(interface_path, iface_data) or
utils.diff(route_path, route_data)):
@@ -437,9 +443,31 @@ class IfcfgNetConfig(os_net_config.NetConfig):
restart_interfaces.extend(self.child_members(interface_name))
update_files[interface_path] = iface_data
update_files[route_path] = route_data
+ update_files[route6_path] = route6_data
+ else:
logger.info('No changes required for ivs interface: %s' %
interface_name)
+ for vlan_name, vlan_data in self.vlan_data.iteritems():
+ route_data = self.route_data.get(vlan_name, '')
+ route6_data = self.route6_data.get(vlan_name, '')
+ vlan_path = self.root_dir + ifcfg_config_path(vlan_name)
+ vlan_route_path = self.root_dir + route_config_path(vlan_name)
+ vlan_route6_path = self.root_dir + route6_config_path(vlan_name)
+ all_file_names.append(vlan_path)
+ all_file_names.append(vlan_route_path)
+ all_file_names.append(vlan_route6_path)
+ if (utils.diff(vlan_path, vlan_data) or
+ utils.diff(vlan_route_path, route_data)):
+ restart_vlans.append(vlan_name)
+ restart_vlans.extend(self.child_members(vlan_name))
+ update_files[vlan_path] = vlan_data
+ update_files[vlan_route_path] = route_data
+ update_files[vlan_route6_path] = route6_data
+ else:
+ logger.info('No changes required for vlan interface: %s' %
+ vlan_name)
+
for bridge_name, bridge_data in self.bridge_data.iteritems():
route_data = self.route_data.get(bridge_name, '')
route6_data = self.route6_data.get(bridge_name, '')
@@ -492,7 +520,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
if (utils.diff(bond_path, bond_data) or
utils.diff(bond_route_path, route_data) or
utils.diff(bond_route6_path, route6_data)):
- restart_interfaces.append(bond_name)
+ restart_linux_bonds.append(bond_name)
restart_interfaces.extend(self.child_members(bond_name))
update_files[bond_path] = bond_data
update_files[bond_route_path] = route_data
@@ -512,9 +540,15 @@ class IfcfgNetConfig(os_net_config.NetConfig):
self.remove_config(ifcfg_file)
if activate:
+ for vlan in restart_vlans:
+ self.ifdown(vlan)
+
for interface in restart_interfaces:
self.ifdown(interface)
+ for linux_bond in restart_linux_bonds:
+ self.ifdown(linux_bond)
+
for bridge in restart_bridges:
self.ifdown(bridge, iftype='bridge')
@@ -530,6 +564,9 @@ class IfcfgNetConfig(os_net_config.NetConfig):
self.write_config(location, data)
if activate:
+ for linux_bond in restart_linux_bonds:
+ self.ifup(linux_bond)
+
for bridge in restart_bridges:
self.ifup(bridge, iftype='bridge')
@@ -553,4 +590,7 @@ class IfcfgNetConfig(os_net_config.NetConfig):
self.execute(msg, '/usr/bin/systemctl',
'restart', 'ivs')
+ for vlan in restart_vlans:
+ self.ifup(vlan)
+
return update_files
diff --git a/os_net_config/tests/test_impl_ifcfg.py b/os_net_config/tests/test_impl_ifcfg.py
index 3500e4c..fa85de7 100644
--- a/os_net_config/tests/test_impl_ifcfg.py
+++ b/os_net_config/tests/test_impl_ifcfg.py
@@ -179,11 +179,11 @@ BOOTPROTO=none
"""
_VLAN_LINUX_BRIDGE = _BASE_VLAN_OVS + """VLAN=yes
+PHYSDEV=em1
BRIDGE=br-ctlplane
BOOTPROTO=none
"""
-
_OVS_BOND_DHCP = """# This file is autogenerated by os-net-config
DEVICE=bond0
ONBOOT=yes
@@ -246,6 +246,12 @@ class TestIfcfgNetConfig(base.TestCase):
def get_interface_config(self, name='em1'):
return self.provider.interface_data[name]
+ def get_vlan_config(self, name='vlan1'):
+ return self.provider.vlan_data[name]
+
+ def get_linux_bond_config(self, name='bond0'):
+ return self.provider.linuxbond_data[name]
+
def get_route_config(self, name='em1'):
return self.provider.route_data.get(name, '')
@@ -430,19 +436,19 @@ class TestIfcfgNetConfig(base.TestCase):
def test_add_vlan(self):
vlan = objects.Vlan('em1', 5)
self.provider.add_vlan(vlan)
- self.assertEqual(_VLAN_NO_IP, self.get_interface_config('vlan5'))
+ self.assertEqual(_VLAN_NO_IP, self.get_vlan_config('vlan5'))
def test_add_vlan_ovs(self):
vlan = objects.Vlan('em1', 5)
vlan.ovs_port = True
self.provider.add_vlan(vlan)
- self.assertEqual(_VLAN_OVS, self.get_interface_config('vlan5'))
+ self.assertEqual(_VLAN_OVS, self.get_vlan_config('vlan5'))
def test_add_vlan_mtu_1500(self):
vlan = objects.Vlan('em1', 5, mtu=1500)
self.provider.add_vlan(vlan)
expected = _VLAN_NO_IP + 'MTU=1500\n'
- self.assertEqual(expected, self.get_interface_config('vlan5'))
+ self.assertEqual(expected, self.get_vlan_config('vlan5'))
def test_add_ovs_bridge_with_vlan(self):
vlan = objects.Vlan('em1', 5)
@@ -450,16 +456,15 @@ class TestIfcfgNetConfig(base.TestCase):
members=[vlan])
self.provider.add_vlan(vlan)
self.provider.add_bridge(bridge)
- self.assertEqual(_VLAN_OVS_BRIDGE, self.get_interface_config('vlan5'))
+ self.assertEqual(_VLAN_OVS_BRIDGE, self.get_vlan_config('vlan5'))
def test_add_linux_bridge_with_vlan(self):
- vlan = objects.Vlan(None, 5)
+ vlan = objects.Vlan('em1', 5)
bridge = objects.LinuxBridge('br-ctlplane', use_dhcp=True,
members=[vlan])
self.provider.add_vlan(vlan)
self.provider.add_bridge(bridge)
- self.assertEqual(_VLAN_LINUX_BRIDGE,
- self.get_interface_config('vlan5'))
+ self.assertEqual(_VLAN_LINUX_BRIDGE, self.get_vlan_config('vlan5'))
def test_ovs_bond(self):
interface1 = objects.Interface('em1')
@@ -489,7 +494,7 @@ BOOTPROTO=none
members=[interface1, interface2])
self.provider.add_linux_bond(bond)
self.assertEqual(_LINUX_BOND_DHCP,
- self.get_interface_config('bond0'))
+ self.get_linux_bond_config('bond0'))
def test_interface_defroute(self):
interface1 = objects.Interface('em1')